Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
- Visualizaciones:
- 17
- Ranking:
- Publicado:
-
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Resumen
Casi todo lo que se ha desarrollado en MetaTrader se rige por el calendario. Cada minuto, cada hora y cada día se cierra una barra, y los indicadores y los asesores expertos muestrean el mercado siguiendo esa cuadrícula fija. Pero el mercado no sabe lo que es un minuto. Durante la publicación de una noticia pueden producirse cientos de movimientos significativos en un solo minuto, mientras que, en una sesión tranquila, una hora apenas aporta información. El muestreo basado en el reloj presta la misma atención a ambos casos.
El tiempo intrínseco es la alternativa formalizada por el grupo de Olsen en Zúrich: dejar que el precio decida cuándo pasa el tiempo. Se fija un umbral delta. El reloj solo avanza cuando el precio se invierte en un valor delta respecto a su último extremo, es decir, un cambio de dirección. Una vez que se confirma el cambio, el precio suele seguir moviéndose en la nueva dirección durante un tiempo, y esa continuación es el sobreimpulso. Toda la trayectoria del precio se convierte en una secuencia alterna de secciones de cambio de dirección y de sobreimpulso, lo que los artículos denominan «línea de costa». Una hora agitada y una hora tranquila se miden entonces en la misma unidad: eventos.

Una trayectoria irregular del precio se desglosa en secciones de cambio de dirección (línea continua) y de sobrepaso (línea discontinua) en un umbral fijo. El reloj de tiempo intrínseco solo avanza en los eventos.
Este Asesor Experto es una adaptación pura a MQL5 del Alpha Engine, el sistema de trading de «línea de costa» a contracorriente que Golub, Glattfelder y Olsen construyeron sobre la base de ese reloj. Abre una posición en contra de un movimiento en un evento intrínseco, aumenta la posición en el siguiente evento si el precio sigue moviéndose en su contra (efecto en cascada) y cierra las posiciones añadidas una a una con beneficios a medida que el precio revierte (efecto de descascada). Dado que las posiciones solo se amplían en incrementos fijos, no se trata de una estrategia martingala. El núcleo de decisión —los algoritmos de umbral logarítmico y el indicador de liquidez basado en la teoría de la información— es una traducción línea por línea del código Java de referencia de los autores. Solo se ha adaptado la gestión de órdenes a la terminal.

Un agente en posición larga realiza una cascada (añade posiciones) a medida que el precio cae a través de sucesivos eventos intrínsecos, y luego des-cascada (recorta con beneficio) a medida que el precio se recupera.
Cómo opera
El EA ejecuta el conjunto que especifica el artículo: ocho agentes independientes, uno solo en largo y otro solo en corto en cada uno de los cuatro umbrales: 0,25 %, 0,5 %, 1 % y 1,5 %. Cada agente gestiona sus propias órdenes y posiciones a través de su propio «número mágico», por lo que los agentes nunca interfieren en las operaciones de los demás.
Todo el ciclo de vida se ejecuta mediante órdenes limitadas en una cuenta de cobertura, donde cada paso de la cascada constituye, naturalmente, su propia posición. Un agente de posiciones largas mantiene una única orden de compra limitada en espera en el siguiente nivel de evento intrínseco a la baja, y cada ejecución abre una posición con un take-profit situado exactamente un delta por encima de su entrada. Ese take-profit es la «descascada». A medida que el precio cae, se ejecutan las órdenes de compra con límite; a medida que se recupera, los «take-profit» las van cerrando una a una. Un agente en corto es la imagen especular. La orden en espera solo se vuelve a colocar cuando algo cambia (un evento intrínseco, un cambio de nivel o una ejecución), por lo que el EA no genera órdenes en cada tick.
Dos mecanismos de defensa evitan que un operador puramente contrarian se deje llevar por una tendencia. El primero es un sesgo impulsado por el inventario: cada agente avanza tres órdenes en cada tick, y el inventario actual decide cuál de ellas impulsa las órdenes. A medida que el inventario aumenta, el umbral adverso se amplía en relación con el favorable, por lo que el agente se muestra reacio a añadir y ansioso por recortar. La segunda es el tamaño fraccional: la unidad que se añade se reduce a medida que crece el inventario.
| Existencias (unidades) | Corridor activo | Umbral adverso : umbral favorable | Unidad añadida |
|---|---|---|---|
| por debajo de 15 | Simétrico | 1 : 1 (delta en cada sentido) | 1 |
| De 15 a 30 | Primera asimetría | 2 : 1 (delta de 1,5 frente a delta de 0,75) | 1/2 |
| 30 y más | Segunda asimetría | 4 : 1 (2 delta frente a 0,5 delta) | 1/4 |
Además, la unidad se escala mediante el indicador de liquidez L, un indicador basado en la teoría de la información que mide hasta qué punto es normal la evolución reciente de los precios. Trata cada evento intrínseco como un símbolo, calcula la media de la sorpresa (autoinformación) de la secuencia de eventos, la normaliza y la mapea a través de la función de distribución normal. L se sitúa cerca de 1 cuando el precio se comporta como un mercado normal y desciende hacia 0 cuando la trayectoria es inusualmente unilateral. El valor se mantiene íntegro cuando L es igual o superior a 0,5, se reduce a la mitad entre 0,1 y 0,5, y se reduce a una décima parte por debajo de 0,1. El indicador funciona con su propio umbral de sobrepaso más amplio, 2,525729 veces el delta, valor que el artículo elige para que L distinga la actividad normal de la anómala de la forma más nítida posible.
Las unidades abstractas se convierten en lotes a través de la entrada InpLotPerUnit, e InpMaxUnits limita el inventario de cada agente. Este límite es una medida de control de riesgo que el artículo omite: una vez alcanzado, el agente cancela su orden en espera y no añade nada más, mientras que las órdenes de toma de beneficios abiertas siguen activas.
Configuración recomendada
| Parámetro | Valor recomendado | Notas |
|---|---|---|
| Símbolo | EURUSD | El instrumento utilizado para el desarrollo y las pruebas, y aquel en el que se verificaron las leyes de escala del artículo. Los umbrales son relativos (porcentaje del precio), por lo que otros pares de divisas líquidos funcionan sin necesidad de reescalado. |
| Marco temporal | Cualquiera | El EA se ejecuta tick a tick en tiempo intrínseco, por lo que el marco temporal del gráfico no influye en sus decisiones. |
| Tipo de cuenta | Cobertura | Obligatorio. Cada paso de la cascada debe ser una posición independiente, por lo que, en una cuenta de compensación, el EA muestra un mensaje y devuelve INIT_FAILED por diseño. |
| Modelo del simulador | Cada tick se basa en ticks reales | Los eventos intrínsecos se definen en el flujo de ticks, por lo que los modelos basados en barras tergiversan tanto los eventos como las ejecuciones de los límites. El simulador hereda el modo de margen de la cuenta en la que hayas iniciado sesión, así que inicia sesión en una cuenta de cobertura antes de realizar las pruebas. |
| InpLotPerUnit | 0,02 (por defecto), hasta 0,4 | Con un paso de 0,01 lotes, las medias y cuartos de unidad, así como el recorte de liquidez, solo se mantienen como tamaños distintos cuando una unidad ronda los 0,4 lotes. Por debajo de ese valor, las adiciones más pequeñas se redondean al lote mínimo. El sesgo del umbral reside en los «runners» y no se ve afectado. |
Resultados de la prueba retrospectiva
EURUSD, cada tick basado en ticks reales, del 2 de febrero al 31 de julio de 2026, depósito inicial de 10 000 en una cuenta de cobertura, valores predeterminados (InpLotPerUnit = 0,02, InpMaxUnits = 30) con los ocho agentes activados. Los umbrales, las reglas de tamaño de posición y los take-profit son los del documento, no están ajustados a este símbolo ni a este periodo.

Informe del Strategy Tester correspondiente a la simulación de seis meses del EURUSD.
La simulación arrojó una rentabilidad del +10,68 % con un factor de beneficio de 2,21 y una caída máxima del capital del 10,10 % en 318 posiciones. La cifra neta oculta dos flujos muy diferentes, y desglosarla según cómo se cerró cada posición resulta más revelador que el total:
| Componentes del resultado de seis meses | Importe |
|---|---|
| 294 posiciones cerradas en su nivel de take-profit | +1 934,14 |
| 24 posiciones cerradas por el programa de pruebas al final de la serie | -823,55 |
| Comisión cobrada por las entradas | -42,14 |
| Beneficio neto | +1 068,45 |
Ambas líneas de cierre ya incluyen el swap, que ascendió a -620,38, una cifra muy superior a la comisión. Para un modelo capaz de mantener una cascada durante semanas, el coste dominante es la financiación, más que el spread. Las 24 posiciones que cerró el simulador son cascadas que nunca se recuperaron: en operaciones reales, seguirían abiertas.

El saldo (azul) aumenta a medida que se activan las órdenes de toma de beneficios. El capital (verde) soporta las cascadas abiertas y se iguala al saldo solo cuando el simulador las cierra el último día.
Se trata de un par de divisas en un periodo de seis meses, por lo que muestra un mecanismo de funcionamiento, no una cifra de rendimiento destacada. Cualquier estrategia que cierre las posiciones ganadoras y mantenga las perdedoras produce un saldo creciente, por lo que la línea de capital y el cierre forzado son los aspectos que merece la pena estudiar.
Parámetros de entrada
| Parámetro | Valor por defecto | Descripción |
|---|---|---|
| InpLotPerUnit | 0,02 | Lotes por unidad abstracta del tamaño del papel. Aumenta este valor hasta 0,4 para mantener el tamaño fraccionario exacto en un símbolo de 0,01 lotes, o redúcelo para operar con cantidades más pequeñas. |
| InpMaxUnits | 30 | Límite de inventario por agente, en unidades. Una vez alcanzado, no se realizan nuevas adiciones y las órdenes de cierre de beneficios abiertas se dejan para liquidar la posición. El nivel de sesgo más profundo solo se activa a partir de las 30 unidades, por lo que con el límite predeterminado nunca se alcanza. |
| InpMagicBase | 990000 | Número mágico base. Los ocho agentes toman un valor comprendido entre InpMagicBase e InpMagicBase + 7, por lo que debes modificarlo si otro EA de la cuenta utiliza ese rango. |
| InpTradeLong | true | Ejecuta los cuatro agentes de posiciones largas. |
| InpTradeShort | true | Ejecuta los cuatro agentes que operan únicamente en corto. Con ambos activados, el conjunto constituye la configuración simétrica completa del artículo. |
Uso de las clases en tu propio código
Uno de los agentes es una clase autónoma, CAeLiveTrader. No tiene conocimiento alguno de los demás agentes, por lo que un EA puede ejecutar un único agente, un conjunto diferente de umbrales o varios símbolos creando tantas instancias como necesite:
#include <IntrinsicTime\AeLiveTrader.mqh> CAeLiveTrader agent; //--- en OnInit: un agente «solo largo» con un delta del 0,5 %, 0,02 lotes por unidad y un límite máximo de 30 unidades agent.Init(_Symbol,990100,1,0.005,0.02,30.0); //--- en OnTick MqlTick t; if(SymbolInfoTick(_Symbol,t)) agent.OnTickUpdate(t.bid,t.ask,t.time); //--- en OnDeinit: cancela la posición abierta; los niveles de take-profit se mantienen agent.Shutdown();
El ejecutor de tiempo intrínseco también se puede utilizar por sí solo. CAeRunner toma umbrales de subida y bajada separados en precio logarítmico, devuelve un código de evento en cada cotización (más o menos 1 para un cambio de dirección, más o menos 2 para un paso de sobrepaso, 0 en los demás casos), y siempre conoce los precios exactos en los que se activarían los siguientes eventos, lo que lo convierte en una fuente natural de niveles de órdenes limitadas para otras estrategias:
#include <IntrinsicTime\AeRunner.mqh> CAeRunner runner; runner.Init(0.005,0.005,0.005,0.005); // delta al alza/a la baja, sobrepaso al alza/a la baja int ev=runner.Run(AeTick(t.bid,t.ask,t.time)); if(ev==AE_EVENT_DC_DOWN) Print("downturn confirmed, next level below: ",runner.ExpectedLowerIE());
El indicador de liquidez, CAeLocalLiquidity, sigue el mismo patrón: inicialízalo con un umbral, introdúceles cada cotización a través de Computation y lee el valor actual de L con Liq.
Limitaciones
Es importante saberlo antes de vincularlo a cualquier cosa que no sea una cuenta de demostración.
- No existe una salida de toda la posición. El operador de referencia del artículo cierra toda la posición de un agente una vez que su rentabilidad total —la realizada más la abierta— alcanza el delta. El agente en vivo no reproduce este comportamiento. Una cascada que evoluciona de forma adversa y nunca se recupera se detiene mediante InpMaxUnits, pero no se cierra, y sus órdenes de take-profit permanecen inactivas. Este es el mayor riesgo del diseño, y el cierre forzado en la prueba retrospectiva anterior es lo que cuesta.
- El swap domina los costes. Las cascadas pueden permanecer abiertas durante semanas, por lo que la financiación a un día pesa mucho más que el spread o la comisión. Comprueba el swap de tu bróker en ambos lados antes de ejecutarlo.
- Con el tamaño de lote enviado, el cálculo del tamaño de la posición se simplifica. A 0,02 lotes por unidad, una adición completa es de 0,02 lotes y cada adición menor se redondea al mínimo de 0,01 lotes, por lo que la escala de dimensionamiento del simulador se reduce a dos niveles. Aumentar InpLotPerUnit hacia 0,4 la restablece, con un tamaño de posición mucho mayor.
- El beneficio realizado no es una ventaja. En un paseo aleatorio sin deriva, el beneficio realizado por el motor es siempre positivo, mientras que su beneficio total es cero en teoría. Un par y una ventana de prueba no pueden establecer una ventaja en ningún sentido.
- Los programas se detienen fuera de las sesiones de negociación. El EA regresa antes de lo previsto desde OnTick cuando se cierra la sesión del símbolo, lo que mantiene el diario limpio y agiliza la prueba retrospectiva. Esto solo es relevante en un feed que siga cotizando mientras la negociación está cerrada.
Estructura de archivos
Un asesor experto y cuatro encabezados. Los encabezados se incluyen como <IntrinsicTime\...>, por lo que deben ubicarse en una subcarpeta de IntrinsicTime dentro de la carpeta «Include».
| Archivo | Función | Descripción |
|---|---|---|
| Experts\IntrinsicTime\AlphaEngine.mq5 | El EA | Aplica una cuenta de cobertura, crea el conjunto de ocho agentes según los cuatro umbrales del artículo, se activa en la sesión de negociación y controla a cada agente con la cotización más reciente. |
| Include\IntrinsicTime\AeLiveTrader.mqh | Agente en tiempo real | CAeLiveTrader, un agente de tipo «coastline» que opera con órdenes limitadas reales: selección del «runner» según el inventario, cálculo de volúmenes fraccionarios y de liquidez, normalización de lotes y una única entrada en espera con su take-profit «de-cascade». |
| Incluir\IntrinsicTime\AeRunner.mqh | Agente de tiempo intrínseco | CAeRunner, el «runner» de cambio de dirección con umbral logarítmico y umbrales separados al alza y a la baja, que emite eventos de cambio de dirección y de sobrepaso, así como los niveles de precio en los que se activarían los siguientes. |
| Incluir\IntrinsicTime\AeLiquidity.mqh | Indicador de liquidez | CAeLocalLiquidity, el indicador L basado en la teoría de la información que escala cada adición, con su propio runner y la función de distribución normal de la referencia. |
| Include\IntrinsicTime\AeTypes.mqh | Tipos compartidos | La estructura de ticks de compra/venta y los códigos de eventos intrínsecos que intercambian el «runner», el indicador y el agente. |
Base de investigación
La implementación se basa en:
- Anton Golub, James B. Glattfelder y Richard B. Olsen, «The Alpha Engine: Designing an Automated Trading Algorithm», 2017, SSRN 2951348.
- James B. Glattfelder, Alexandre Dupuis y Richard B. Olsen, «Patterns in high-frequency FX data: discovery of 12 empirical scaling laws», Quantitative Finance, 2011.
- La implementación en Java de referencia de los autores, disponible en GitHub. La adaptación conserva sus peculiaridades en lugar de corregirlas de forma silenciosa.
Un artículo complementario describe la construcción del operador de cambio de dirección, reproduce las leyes de escalado en 17,8 millones de ticks reales del par EUR/USD frente a un paseo aleatorio con volatilidad equivalente, repasa la adaptación de Alpha Engine clase por clase y comprueba su afirmación sobre los beneficios del paseo aleatorio: «Tiempo intrínseco: de las leyes de escalado del cambio de dirección a Alpha Engine».
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/code/77871
Repaint Inspector
Comprueba si un indicador se actualiza, en lugar de dar por buena la afirmación. Vuelve a leer los búferes de cualquier indicador personalizado en las barras que ya se han cerrado y cuenta cada valor que cambia, aparece o desaparece, teniendo en cuenta el momento más lejano en el que eso todavía ocurre. El resultado se muestra por búfer en un panel del gráfico, y cada evento se guarda en un archivo CSV.
ATS Liquidity City - liquidity pools and sweeps, drawn as a neon city
Muestra dónde es probable que se encuentren los stops y cuáles se acaban de activar. Los «pools» de liquidez son máximos y mínimos de oscilación confirmados que el precio aún no ha superado, máximos y mínimos iguales (un «pool» más grande) y el máximo y mínimo de ayer. Cuando una barra cotiza más allá de un grupo, se marca como «barrida», y como «capturada y rechazada» si esa misma barra cierra de nuevo dentro del grupo. Sin repintado: un swing solo se utiliza tras N barras cerradas a cada lado. El panel es una ciudad de neón dibujada en un CCanvas: el precio es un coche volador, las órdenes stop de venta son torres situadas debajo de él, las órdenes stop de compra son plataformas flotantes situadas encima, los niveles de ayer son vallas publicitarias doradas, un foco barre el cielo y un teletipo muestra las operaciones de hoy. Dos búferes proporcionan el grupo activo más cercano por encima y por debajo para su uso en un asesor experto. Solo indicador: nunca opera.
Mirror Hedge EA (Same terminal and account only)
Replica las operaciones abiertas, modificadas y cerradas por otro EA en la misma cuenta de cobertura, seleccionadas por su «número mágico». Por defecto, invierte la dirección (Compra ↔ Venta, SL ↔ TP), lo que permite realizar pruebas retrospectivas de la versión inversa de una estrategia con spreads, deslizamientos y ejecución reales.
Accelerator Oscillator (AC)
El indicador Acceleration/Deceleration (AC, Aceleración/Desaceleración) mide la aceleración y la desaceleración de la fuerza impulsora del mercado.