Cipherline Confluence
- Asesores Expertos
-
Noel Anjao Alube
Dedicated to developing smart, data-driven trading solutions with a strong focus on performance, risk management, and innovation. Committed to transforming trading ideas into automated strategies. - Versión: 2.0
- Activaciones: 5
Descripción general
CIPHER es un sistema de trading automatizado para MetaTrader 5, con múltiples motores y múltiples marcos temporales, diseñado en torno a una arquitectura de puntuación de confluencias. En lugar de basarse en una única estrategia, ejecuta tres motores independientes de generación de señales — Adaptive Support/Resistance (A2SR), Conceptos de Dinero Inteligente (SMC) y Liquidez—, cada uno de los cuales se evalúa simultáneamente en cuatro marcos temporales distintos, y solo actúa cuando un número mínimo configurable de esos motores y marcos temporales coinciden en la dirección. Incorpora gestión de riesgos, control de exposición, filtrado de correlaciones, filtrado de sesiones y noticias, promedios basados en cuadrículas, un sistema de recuperación y un panel de información en tiempo real en el gráfico, además del núcleo de señales, con registro completo de las operaciones en formato CSV. El EA está diseñado para ejecutarse con un único símbolo por instancia de gráfico, pero realiza un seguimiento de la correlación con respecto a una cesta fija de otras divisas principales (XAUUSD, USDJPY, EURUSD, GBPUSD) para evitar la acumulación de riesgos correlacionados.
Controles principales
- InpMasterEnable: interruptor global de activación/desactivación para toda la actividad de negociación. Cuando está en «false», el EA se inicializa igualmente y puede mostrar el panel, pero no realiza órdenes.
- InpPrimaryTF: el marco temporal utilizado para los propios motores de señales de cierre de barra del EA (A2SR, SMC, Liquidity) tal y como se ejecutan en la instancia «principal», independiente de los cuatro marcos temporales de confluencia.
Activación/desactivación de motores
Nueve interruptores booleanos independientes permiten al usuario activar o desactivar cada subsistema sin necesidad de modificar el código: motor A2SR, motor SMC, motor de liquidez, motor de volatilidad, puntuación de confluencia, recuperación inteligente, cuadrícula inteligente, panel de gráficos y registro de operaciones. Al desactivar un motor, se elimina su voto de la puntuación de confluencia y se omite por completo su cálculo, lo que también reduce la carga de la CPU por tick.
Gestión de riesgos
- Determinación del tamaño de la posición: basada en el porcentaje de riesgo o en lotes fijos. Si InpFixedLot es mayor que cero, cada operación utiliza ese volumen fijo; en caso contrario, el tamaño del lote se calcula a partir de InpRiskPercent del capital de la cuenta actual dividido por el valor monetario de la distancia del stop-loss en puntos, utilizando el valor real del tick y el tamaño del tick del símbolo (no un valor de pip predefinido), y luego se normaliza según el paso de volumen, el mínimo y el máximo del bróker.
- Límite de caída diaria (InpMaxDailyDrawdown): se calcula a partir de un valor de referencia del capital que se restablece una vez transcurrido cada día, expresado como porcentaje de pérdida respecto a dicho valor de referencia.
- Límite de caída total/máxima del capital (InpMaxEquityDrawdown): se calcula a partir del valor más alto del capital observado durante la ejecución del EA, expresado como porcentaje de descenso respecto a ese máximo.
- Límite de exposición por símbolo (InpMaxExposurePct): volumen total abierto en el símbolo negociado, convertido a un porcentaje del capital de la cuenta, que se compara con un límite máximo antes de permitir nuevas operaciones.
- Límite de exposición global (InpGlobalMaxExposure): el mismo cálculo, pero sumado a todas las posiciones abiertas de la cuenta, independientemente del símbolo, lo que protege contra la sobreexposición cuando hay varias instancias del EA o posiciones manuales activas simultáneamente.
Tanto los controles de drawdown como los de exposición se aplican en cada tick antes de que se considere cualquier nueva orden, y cualquier incumplimiento bloquea la negociación para ese tick sin cerrar las posiciones existentes.
Filtros
- Filtro de spread (InpMaxSpread): el spread actual en puntos debe ser igual o inferior a este valor; de lo contrario, se bloquean las nuevas operaciones.
- Filtro de deslizamiento (InpMaxSlippage): se pasa al objeto de operación como la desviación máxima permitida en puntos en la ejecución de la orden; también se supervisa tras los intentos de ejecución en busca de códigos de error relacionados con el deslizamiento.
- Filtro de correlación (InpCorrelationThreshold): se calcula mediante un coeficiente de correlación de Pearson móvil entre el símbolo negociado y una cesta de divisas principales (XAUUSD, USDJPY, EURUSD, GBPUSD por defecto), que se actualiza con cada tick y cada 60 segundos mediante el temporizador, en una ventana retrospectiva de 100 barras en el gráfico H1. Si la correlación con cualquier miembro de la cesta supera el umbral, se suprimen las nuevas operaciones para evitar duplicar el mismo riesgo direccional bajo un nombre de símbolo diferente.
- Filtro de sesión (InpEnableSessionFilter): clasifica la hora actual del servidor en sesiones de Asia, Londres, Nueva York o «Off» en función de los límites horarios (00:00–09:00 Asia, 09:00–16:00 Londres, 16:00–24:00 Nueva York). El filtro es actualmente permisivo tanto en modo de prueba como en modo real, pero la clasificación de sesiones se muestra en el panel para una futura lógica de restricción.
- Filtro de noticias (InpEnableNewsFilter): un gancho de marcador de posición que, actualmente, siempre indica que no hay eventos de actualidad; está diseñado para conectarse a una fuente externa de calendario económico sin modificar el resto de la lógica del EA.
Sistema de puntuación de Confluence
Cuatro marcos temporales independientes (InpTF1 a InpTF4, con valores predeterminados de M5, M15, H1 y H4) disponen cada uno de su propio conjunto completo de instancias de los motores A2SR, SMC y de liquidez: doce instancias de motor en total, todas ellas inicializadas y desactivadas de forma independiente. En cada nueva barra del marco temporal principal, el sistema de puntuación de confluencia:
- Consulta cada uno de los tres motores en cada uno de los cuatro marcos temporales para obtener una señal direccional (+1, -1 o 0).
- Suma las direcciones de los tres motores por marco temporal para obtener una dirección neta por marco temporal.
- Cuenta cuántos de los cuatro marcos temporales coinciden en la dirección positiva frente a la dirección negativa.
- Asigna una dirección general (la del lado que cuente con más marcos temporales coincidentes).
- Asigna un nivel de confluencia del 1 al 6 en función del número de intervalos de tiempo que coinciden y de la intensidad de la puntuación del intervalo más fuerte: el nivel 6 requiere una coincidencia unánime de 4 de 4; el nivel 5, 3 de 4 con una puntuación líder fuerte; el nivel 4, 2 de 4 con una puntuación líder moderada; y los niveles 3, 2 y 1 representan grados de coincidencia progresivamente más débiles.
- Solo se tiene en cuenta una operación si el nivel de confluencia alcanza o supera el valor InpConfluenceMinLevel (por defecto, 4) y la dirección general es distinta de cero.
Motores de señales (detalle)
Motor A2SR (Soporte/Resistencia Adaptativa): utiliza un cruce de la media móvil exponencial (EMA) de 20 y 50 períodos en el marco temporal dado, combinado con un filtro de impulso RSI de 14 períodos y un detector de soporte/resistencia en máximos y mínimos de oscilación (detección de pivotes de 5 barras en un historial de 100 barras). Una señal de compra requiere un cruce alcista de la EMA, que el RSI no se encuentre en territorio de sobreventa con impulso negativo y que el precio esté cerca de un nivel de soporte detectado o rompa al alza un nivel de resistencia detectado; el caso de venta es similar. Las zonas detectadas se registran en una instancia dedicada de CZoneManager por motor para su posible visualización en el gráfico.
Motor SMC (Smart Money Concepts): detecta la ruptura de estructura (BOS) comparando los máximos y mínimos de la barra actual con los de las dos barras anteriores (histórico de 5 barras mediante CopyHigh / CopyLow), detecta el «cambio de carácter» (CHOCH) mediante una comprobación del patrón de precios de cierre de 4 barras, y calcula un porcentaje de «prima» o «descuento» que representa la posición del precio actual dentro del rango comprendido entre el máximo más alto y el mínimo más bajo de las últimas 50 barras. Una señal de compra requiere un BOS alcista, ausencia de CHOCH y que el precio se encuentre en la zona de «descuento» (por debajo del 40 % del rango); el caso de venta es el contrario, con la zona de «prima» (por encima del 60 %).
Motor de liquidez: actualmente es un esbozo con estructura que inicializa su propio gestor de zonas y el contexto de símbolo/intervalo de tiempo, pero no devuelve ninguna señal direccional (siempre 0). Está estructurado para ampliarse con lógica de detección de «liquidity sweep» y «stop-hunt» sin necesidad de cambios en el resto del código, ya que el sistema de puntuación de confluencia ya lo trata como uno de los tres votos con igual ponderación.
Motor de volatilidad: calcula tanto un ATR rápido (14 períodos) como uno lento (50 períodos), un ratio de volatilidad normalizado respecto a un historial móvil de 100 muestras de lecturas de volatilidad pasadas, y señala un «pico de volatilidad» cuando la volatilidad actual supera el doble de la media histórica. Proporciona cálculos de precios de stop-loss y take-profit basados en el ATR (multiplicadores por defecto de 1,5 veces el ATR para el SL y 2 veces el ATR para el TP) que se utilizan como alternativa siempre que un motor no proporcione sus propios SL/TP, y su detección de picos se integra directamente en el filtro de seguridad.
Prioridad en la ejecución de operaciones
Cuando se cumplen las condiciones de confluencia, el EA busca un precio de entrada concreto y unos niveles de stop siguiendo un orden de prioridad fijo: primero la señal A2SR (si está activada y su dirección coincide con la de la confluencia), luego la señal SMC, después la señal de liquidez y, por último —si el nivel de confluencia es 5 o superior, pero ningún motor individual ha proporcionado una señal direccional coincidente—, una entrada en el mercado de «confluencia fuerte» de reserva utilizando SL/TP basados en el ATR. La fuente que prevalezca proporciona el precio de entrada, el stop-loss, el take-profit y una cadena de texto explicativa que se adjunta al comentario de la orden y a la entrada del registro.
Sistema de recuperación inteligente
Cuando está activado y no se ejecuta en modo de probador de estrategias, el sistema de recuperación supervisa la caída desde el valor máximo del capital. Si la caída actual se sitúa entre el 5 % y el límite máximo configurado en InpRecoveryMaxDrawdown, y el número de operaciones de recuperación ya realizadas es inferior a InpRecoveryMaxTrades, se abre una operación adicional con un tamaño calculado por CalculateRecoveryLot(), que aumenta el lote base mediante un multiplicador proporcional a la caída actual (con un límite máximo de 3 veces el lote base y un límite adicional establecido por InpRecoveryMaxLot). Todas las operaciones de recuperación se registran en una matriz interna de tickets; un mecanismo de cierre de beneficios por cesta comprueba las ganancias flotantes combinadas de todas las operaciones de recuperación registradas cada 60 segundos mediante el temporizador y cierra toda la cesta en el momento en que las ganancias combinadas pasan a ser positivas.
Sistema Smart Grid
Cuando está activado, cada orden ejecutada también registra un nivel de rejilla (precio, tamaño del lote, tipo de orden) en un array interno con un límite máximo de InpGridMaxLevels (por defecto, 5). Los tamaños de los lotes de la rejilla se escalan geométricamente mediante InpGridMultiplier (por defecto, 1,5x) por nivel. En cada tick en el que ya haya una posición abierta, el EA comprueba si el precio ha alcanzado el precio de activación de algún nivel de rejilla pendiente y no ejecutado y, de ser así, lo ejecuta. El estado del nivel de la rejilla (incluido el ticket de orden resultante) se almacena y actualiza mediante métodos de acceso específicos (GetLevel, SetLevelTicket, GetLevelTicket) en lugar de mediante acceso directo a punteros, ya que MQL5 no permite punteros a tipos de estructura simples. También está disponible un cálculo de take-profit de la cesta de la rejilla (CalculateGridTP), que calcula un precio de entrada medio ponderado entre todos los niveles activos de la rejilla y deriva un objetivo combinado cuando la cesta está en pérdidas.
Filtro de seguridad
Un filtro de seguridad centralizado (CSafetyFilter) que, fuera del modo de prueba, ejecuta todas las subcomprobaciones habilitadas —diferencial, deslizamiento, correlación, picos de volatilidad y caída máxima— antes de permitir que la lógica principal de ticks proceda a la evaluación de señales. Cada subcomprobación se puede activar o desactivar de forma independiente mediante SetChecks(). En el modo de prueba, el filtro de seguridad se omite por completo (CheckAll devuelve «true» incondicionalmente) para evitar interferencias con las ejecuciones de backtesting y validación de estrategias, mientras que las comprobaciones de drawdown diario y de capital, así como las de exposición (gestionadas por separado por el Gestor de Riesgos), siguen aplicándose.
Sistema de registro
Cada entrada de operación y cada evento de operación cerrada se registra en un búfer circular en memoria con capacidad para hasta 1.000 entradas (registros SLogEntry: hora, símbolo, motivo de entrada, motivo de salida, precio de entrada, precio de salida, volumen y beneficio) y, simultáneamente, se imprime en el registro de la terminal. Fuera del modo de prueba, el búfer se vacía periódicamente en un archivo CSV (Cipher_<símbolo>_<magic>.csv o un nombre de archivo personalizado) mediante FileOpen / FileWrite, tanto a intervalos fijos (cada 10 operaciones completadas, comprobado en OnTrade) como cada 60 segundos mediante el temporizador, así como al desinicializarse el EA.
Panel en el gráfico
Un panel con tema oscuro que se actualiza en tiempo real (se activa/desactiva mediante InpEnablePanel y se posiciona con SetPosition), construido a partir de los objetos de gráfico OBJ_RECTANGLE_LABEL y OBJ_LABEL. Muestra: símbolo, número mágico, indicador de modo en vivo/de prueba; capital de la cuenta, saldo, beneficio flotante (codificado por colores en verde/rojo) y recuento de posiciones abiertas; el nivel de confluencia actual de un total de 6, la dirección determinada (COMPRAR/VENDER/NEUTRO, codificada por colores) y la razón textual de la última señal; así como el spread actual (codificado por colores en función del filtro de spread máximo), el nombre de la sesión de negociación activa y cualquier noticia pendiente. El panel vuelve a dibujar completamente sus etiquetas en cada ciclo de actualización, en lugar de modificarlas in situ, y se elimina por completo al desinicializar el EA, junto con todos los objetos del gráfico con el prefijo «Cipher_».
Funciones premium
- Cargador automático de ajustes (InpAutoSettingsLoader): un gancho, que se ejecuta una vez durante la inicialización, destinado a cargar ajustes preestablecidos de parámetros específicos para cada símbolo; actualmente registra un mensaje de confirmación y está estructurado para la futura integración de una tabla de ajustes preestablecidos (ya existe una estructura SPreset en el código fuente con este fin).
- Pausa por impacto en el capital (InpAutoPauseOnEquityShock): fuera del modo de prueba, realiza un seguimiento del cambio porcentual del capital tick a tick; si el capital cae un 5 % o más en una sola evaluación, la negociación se pausa por completo hasta que el capital se recupere en más de un 2 % respecto al mínimo alcanzado durante la pausa.
- Salida por tiempo inteligente (InpSmartTimeExit) y cierre parcial (InpPartialClose, con InpTP1Ratio / InpTP2Ratio controlando la división del cierre parcial): tanto los parámetros como sus valores de configuración se transmiten a la clase CPremiumFeatures, pero los métodos subyacentes (SmartTimeExit, PartialClose) están actualmente simulados para devolver «false» o no realizar ninguna operación, y se reservan para una versión posterior que implementará cierres parciales por etapas en TP1 y salidas forzadas basadas en el tiempo.
Motor de correlación
Mantiene un historial móvil de 100 muestras de precios de cierre en el timeframe H1 para hasta diez símbolos seguidos (el símbolo negociado más XAUUSD, USDJPY, EURUSD y GBPUSD por defecto), recalcula una matriz completa de correlación de Pearson por pares en cada tick y cada 60 segundos mediante el temporizador, y ofrece tanto una consulta directa de correlación por pares como una comprobación IsCorrelated() utilizada por el filtro de seguridad. Actualmente, la comprobación de correlación devuelve «false» de forma incondicional a la espera de una configuración completa basada en umbrales, pero el cálculo de la matriz subyacente está totalmente operativo y disponible para que la función CheckCorrelation del filtro de seguridad lo utilice una vez que se habilite esa última puerta de control.
Funciones del ciclo de vida
OnInit() detecta el modo de prueba o visual, genera un número mágico único a partir de un hash del nombre del símbolo combinado con el ID del gráfico, asigna e inicializa cada módulo (con un retorno de error grave ante cualquier fallo de asignación), establece los parámetros de ejecución de operaciones (número mágico, desviación de deslizamiento, ejecución de órdenes «fill-or-kill», modo síncrono), inicia la cesta de correlación y crea el panel si está habilitado. OnDeinit() vacía los registros, destruye el panel y todos los objetos de gráfico con el prefijo «EA», y elimina de forma limpia todos los punteros de módulos asignados en orden inverso de dependencia. OnTick() ejecuta el proceso completo por tick: actualiza los datos del símbolo, actualiza el pico de capital, actualiza los historiales de volatilidad y correlación, comprueba la pausa por impacto en el capital, ejecuta el filtro de seguridad y las comprobaciones de exposición, sesión y noticias, gestiona los niveles de la rejilla de cualquier posición ya abierta y, en los límites de las nuevas barras, evalúa los motores de confluencia y ejecuta nuevas operaciones si se cumplen las condiciones. OnTrade() recoge el historial de operaciones cerradas que coinciden con el número mágico del EA y registra las ganancias o pérdidas resultantes. OnTimer() ejecuta un ciclo de mantenimiento con un intervalo de 60 ticks que abarca la exportación de registros, la actualización de la matriz de correlación, la actualización del historial de volatilidad y las comprobaciones de toma de beneficios de la cesta de recuperación. OnTester() devuelve el beneficio de la cuenta como criterio de optimización para el Strategy Tester.
