Registro de verificación

El motor de backtest v2 y su paridad con MetaTrader 5 y TradingView

Cómo el motor de backtest ejecuta órdenes dentro de una vela, cobra costes y redondea precios y dinero, y hasta qué punto MetaTrader 5 y TradingView lo siguen: las cifras y los límites.

Para qué sirve el motor

AlfaTactix describe cada estrategia una sola vez, en un único documento de estrategia, y lo convierte en código MQL5 para MetaTrader 5 o en código Pine Script v6 para TradingView. El motor de backtest v2 ejecuta ese mismo documento sobre velas pasadas. Tiene dos tareas:

  • Un backtest para ti. El backtest está abierto a todos los usuarios con sesión iniciada. Una estrategia que creas en el creador de 7 pasos se ejecuta en el motor con las reglas de velas, los costes y el redondeo que describe esta página. Qué permite cada plan y cómo empezar: Backtest sin programar.
  • Una referencia para el código. El motor es la vara de medir con la que se comprueba el código generado. Ejecutamos la misma estrategia en el motor y en el Probador de estrategias de MetaTrader 5 o en TradingView, y comparamos las señales y las operaciones. Cada diferencia debe tener una causa con nombre; si no, cuenta como error.

Esta página explica las reglas del motor en palabras sencillas y luego muestra hasta qué punto MetaTrader 5 y TradingView las siguen, con los límites. Cómo probamos el resto del producto está en Cómo probamos; el código generado tiene su propia página, Generadores MQL5 y Pine.


El modelo de velas en palabras sencillas

Una vela da cuatro precios: apertura, máximo, mínimo y cierre. No dice en qué orden llegaron los precios dentro de la vela. Todo probador necesita una regla para eso. Estas son las reglas del motor, escritas en la especificación de la estrategia:

  • Un hueco se ejecuta en la apertura. Si una vela abre más allá de tu stop loss o tu take profit, la orden se ejecuta en la apertura, no en el nivel que fijaste.
  • Primero el stop. Cuando el stop loss y el take profit están los dos dentro de una misma vela, el motor supone que se tocó primero el stop.
  • Niveles por orden de precio. Cuando una vela cruza varios niveles, como cierres parciales y el take profit, se ejecutan en el orden en que el precio los alcanza.
  • Movimientos desde la vela siguiente. Un stop dinámico o un movimiento a breakeven se aplica desde la vela siguiente, no dentro de la vela que lo activó.
  • Señales al cierre, ejecuciones en la apertura siguiente. Las señales de salida y las salidas por tiempo se deciden al cierre de una vela y se ejecutan en la apertura de la siguiente.
  • Los cierres parciales se redondean hacia abajo al paso de volumen del símbolo.

Por qué primero el stop

Una sola vela no puede decir cuál de dos niveles llegó antes, así que un probador tiene que suponerlo. Elegir el stop es la suposición prudente. En velas normales esta regla es más estricta que la de TradingView, MetaTrader 5 y NinjaTrader, y la ejecución de un hueco en la apertura es igual que la de TradingView. Esa comparación es una lectura de la documentación de las propias plataformas: no ejecutamos sus probadores para hacerla.

Las reglas tienen su propia biblioteca de pruebas: 25 casos, 25 de 25 superados.

Cuatro reglas más

Fijadas también:

  • las velas son precios Bid, y una posición corta sale en el Ask;
  • el deslizamiento se aplica solo a las ejecuciones de stop, de hueco y a mercado;
  • una orden límite puede tener un desplazamiento de ejecución en ticks (0 por defecto);
  • cuando los cierres parciales suman la posición entera, el último nivel cierra lo que queda.

El modo de datos finos

Dentro de una vela, el motor puede leer precios más finos en lugar de suponer. Cada ejecución usa uno de tres modos:

ModoQué lee el motor dentro de cada vela
Velassolo la vela, con las reglas de arriba
OHLC de 1 minutola apertura, el máximo, el mínimo y el cierre de cada minuto dentro de la vela
Ticks realescada cambio de precio dentro de la vela

Una vela sin precios más finos vuelve a las reglas de velas, y la ejecución cuenta cuántas velas lo hicieron. Cada resultado indica su modo, así que siempre sabes qué lectura estás viendo.

Las comparaciones con MetaTrader 5 que siguen usaron el modo OHLC de 1 minuto. El modo de ticks reales todavía no se ha comparado con MetaTrader 5 ni con TradingView.


Los costes y el perfil de prueba

Los costes no se esconden en el modelo de velas. Cada uno se fija en el perfil de prueba de la ejecución, donde puedes verlo:

CosteCómo se fija
Spreadsegún los datos de precios, o un valor fijo
Comisiónpor lote, por orden o un porcentaje del valor de la operación
Swapsegún los datos de precios, o valores fijos para largos y cortos
Deslizamientosolo en el backtest, en ejecuciones de stop, de hueco y a mercado
Desplazamiento de ejecución de órdenes límiteun desplazamiento opcional en ticks para las órdenes límite, 0 por defecto

El perfil de prueba 1.1 añade tres cosas:

  • la divisa de cotización y la divisa base del símbolo;
  • una conversión de divisa fija;
  • el día de triple swap: el miércoles para forex y metales, el viernes para CFD de índices y de acciones.

Una ejecución con un perfil 1.0 sigue dando resultados idénticos byte a byte.


La cuadrícula de ticks y el redondeo del dinero

Precios en la cuadrícula de ticks

Los precios se mueven a saltos: el tamaño de tick del símbolo. Un nivel que cae entre dos saltos no se puede ejecutar nunca. El motor coloca cada nivel de stop loss, take profit, stop dinámico y breakeven en la cuadrícula de ticks del símbolo, redondeado en sentido contrario a la entrada: por debajo de la entrada, el nivel baja al salto siguiente; por encima, sube al salto siguiente. Un nivel a menos de una millonésima de tick de un salto cuenta como si estuviera en él. El tamaño de la posición y 1R siguen usando la distancia exacta que fijaste.

En los modos de minutos y de ticks, el stop dinámico y el breakeven se mueven una vez por vela, a su cierre, y los precios a menos de una millonésima de tick de la cuadrícula se ajustan a ella cuando el motor los lee. El motivo es un hecho de la plataforma: MetaTrader guarda el 6,2 % de los precios de minuto de EURUSD a un ulp (el paso más pequeño que puede dar un número en un ordenador) de la cuadrícula.

El dinero, al céntimo

La comisión, el swap y el resultado de cada ejecución se anotan en la unidad más pequeña de la divisa de la cuenta, el céntimo en una cuenta en USD, redondeando la mitad hacia fuera del cero, como los anota el Probador de estrategias de MetaTrader 5. La prueba son 42 cargos que caían justo en medio céntimo y 841 de 841 transacciones del probador. En el swap y en el resultado de las ejecuciones se observó; en la comisión es una suposición. TradingView guarda el dinero exacto, sin redondear.


Cómo comparamos: valores, señales, operaciones

Comparamos el motor con cada plataforma en tres niveles:

NivelQué se comparaCon qué exactitud
P1valores de los indicadoresbit a bit en MetaTrader 5, tolerancia cero en TradingView
P2señales: en cada vela, cada marca de entrada y de salida y cada regla de la estrategiaiguales o no, vela a vela
P3operaciones: la lista completa, con entradas, salidas, precios y volúmenesiguales, o cada diferencia tiene una causa con nombre

P1 es la parte de los generadores y tiene su propia página: Generadores MQL5 y Pine. Esta página trata de P2 y P3.

Causas con nombre y errores

Una diferencia en una lista de operaciones es una de doce causas con nombre, revisadas fila a fila, o es un error. Una ejecución está dentro del margen cuando cada diferencia tiene una causa con nombre y los resultados netos de los dos lados cuadran con un resto de 0,00. Cuatro causas explican la mayoría de las diferencias:

  • Fin de los datos. El motor cierra una operación abierta al cierre de la última vela; el Probador de estrategias de MetaTrader 5 la cierra en su propio final de prueba; TradingView la deja abierta.
  • Modo del probador. En "1 minute OHLC", el Probador de estrategias de MetaTrader 5 ejecuta un stop loss o un take profit en el propio nivel, aunque el minuto abriera más allá. El motor lo ejecuta en la apertura de ese minuto, el precio realista.
  • El recorrido dentro de la vela. Cuando una vela toca a la vez el stop loss y el take profit, el recorrido que sigue el probador o TradingView dentro de la vela puede llegar antes al take profit; el motor toma primero el stop.
  • Efecto en cadena sobre el capital. Tras una diferencia con nombre, los dos saldos difieren un poco, así que una operación posterior dimensionada por riesgo puede diferir en un paso de volumen.

Resultados frente al Probador de estrategias de MetaTrader 5

Estrategias de referencia

Nuestro conjunto de referencia tiene 31 estrategias de prueba válidas. Las comparaciones de referencia se ejecutan con velas de prueba en un símbolo personalizado de MetaTrader 5, así que el motor y el Asesor Experto leen velas idénticas:

NivelIgualesDentro del margenNo comparables
Señales (P2)29no aplica2
Operaciones (P3, "1 minute OHLC")7222

Es decir, 29 de 31 estrategias dan las mismas señales, y 29 de 31 dan operaciones iguales o dentro del margen, con 0 errores. Las 2 no comparables son estrategias que MetaTrader 5 no puede ejecutar: una usa todos los filtros a la vez y otra usa un filtro fundamental que solo ofrece TradingView. El generador las rechaza para MetaTrader 5 a propósito.

Seis estrategias habituales con precios reales

Ejecutamos seis estrategias habituales con unos diez meses de precios reales de EURUSD en H1 en el Probador de estrategias de MetaTrader 5 (modo "1 minute OHLC"):

EjecuciónEstrategiaOperaciones: motor / MetaTrader 5Veredicto
R1Cruce de EMA 20/50 con un stop de 2 × ATR89 / 89dentro del margen
R2Reversión a la media con RSI(14) y una SMA 20016 / 16igual
R3Ruptura de Bollinger (20, 2) con filtro de volumen127 / 127dentro del margen
R4MACD en H4 con un filtro de EMA 200 diaria17 / 17dentro del margen
R5Ruptura del rango de Londres con los límites de FTMO71 / 71dentro del margen
R6Ruptura de Donchian 20, stop dinámico, 50 % cerrado en 1R170 / 170dentro del margen

Las señales tuvieron 0 diferencias en cada vela de cada ejecución, por ejemplo 4832 filas en R4 y 12 110 en R6. En las cinco ejecuciones dentro del margen, las diferencias vienen sobre todo del modo del probador y del fin de los datos, y los resultados netos cuadran con un resto de 0,00.

La mayoría de las seis perdió dinero en este periodo. No es lo que mide la prueba: muestra que el motor y MetaTrader 5 coinciden, no cómo le irá a una estrategia.


Resultados en TradingView

TradingView no tiene un probador por línea de comandos, así que cada ejecución allí es manual y la cobertura es pequeña. Con las 31 estrategias de referencia:

NivelEn el propio TradingViewSin ejecutar
Señales (P2)7 iguales24
Operaciones (P3)4 iguales, 1 dentro del margen26

También comprobamos nuestro propio simulador del código Pine frente al motor en cada estrategia de referencia. Es una comprobación de nuestro simulador, no de TradingView: señales 20 iguales, operaciones 18 iguales y 2 dentro del margen, 11 no comparables. Tras la versión 1.0.0 del generador, los veredictos no cambian.

Con las propias velas de TradingView

Ejecutamos las seis estrategias habituales con las propias velas de EURUSD en H1 de TradingView (5012 velas, sin costes):

  • R1 87, R2 11, R3 125 y R5 75 operaciones, cada una igual a la ejecución del motor con las mismas velas;
  • R6 181 operaciones, con una causa con nombre (el recorrido dentro de la vela) de la que se siguen las operaciones posteriores;
  • R4 ninguna operación: su calentamiento necesita más velas de las que cargó la cuenta de TradingView.

Por qué MetaTrader 5 y TradingView nunca coinciden del todo

Una prueba evidente es ejecutar la misma estrategia en MetaTrader 5 y en TradingView y comparar las dos. No coincidirán del todo, y no decimos que lo hagan: las dos plataformas leen fuentes de precios distintas. Un cruce ocurre en una fuente y falla por un punto o dos en la otra; un filtro de volumen cuenta ticks distintos; una salida una hora antes o después cambia la posición siguiente.

En cinco de las seis estrategias habituales, esta fue la parte de entradas a la misma hora y en el mismo sentido:

EjecuciónMisma hora y sentido
R194 %
R282 %
R388 %
R594 %
R695 %

Por eso comparamos cada plataforma con el motor sobre las propias velas de esa plataforma, como en las dos secciones anteriores, y no las dos plataformas entre sí.


Los límites

Estos son los límites de lo que muestra esta página:

  • La comisión y el deslizamiento en MetaTrader 5 no están demostrados. En un símbolo personalizado, el Probador de estrategias de MetaTrader 5 nunca cobra comisión, deslizamiento ni el desplazamiento de ejecución de las órdenes límite. Los dejamos fuera de los dos lados y los nombramos en cada caso.
  • TradingView modela menos costes. No modela spread, swap ni conversión de divisa, y su registro no informa de la comisión. También se dejan fuera de los dos lados.
  • Poca cobertura en TradingView. Señales de 7 y operaciones de 5 de las 31 estrategias de referencia.
  • Un símbolo, una fuente, unos diez meses. Las ejecuciones con precios reales usaron solo EURUSD, la fuente de precios de un bróker y el modo "1 minute OHLC". No se ejecutó: el modo de ticks reales ni una prueba de 12 meses en TradingView.
  • Sin operativa real. Nada de esto se probó con dinero real, en una cuenta real ni a futuro (forward).
  • Sin verificar todavía. La exportación de la lista de operaciones de TradingView, los límites de los registros de Pine, la carpeta de archivos compartida del Probador de estrategias de MetaTrader 5 (FILE_COMMON) y el cierre propio del probador al final de una prueba.
  • Cuatro métricas se basan en suposiciones nuestras. La anualización del ratio de Sharpe, el factor de recuperación sobre el drawdown del capital, el objetivo 0 del ratio de Sortino y la exposición.
  • Los backtests completos no son exactos bit a bit. Bit a bit se refiere a los valores de los indicadores. Las señales son iguales en los casos de arriba; las operaciones son iguales o difieren por una causa con nombre.

Preguntas frecuentes

¿Coincidirá un backtest aquí con mi ejecución en el Probador de estrategias de MetaTrader 5?

En nuestras pruebas, con las mismas velas y los costes que cobran los dos lados, las señales fueron las mismas y las operaciones fueron iguales o difirieron por una causa con nombre. Una ejecución tuya en el probador puede diferir si lee otras velas, usa otro modo del probador o cobra costes que la ejecución del motor deja fuera.

¿Por qué el motor toma primero el stop?

Una vela no dice cuál de dos niveles llegó antes, así que un probador tiene que suponerlo, y el stop es la suposición prudente. En los modos de OHLC de 1 minuto y de ticks reales, el motor lee los precios dentro de la vela, así que tiene que suponer menos.

¿Qué significa "dentro del margen"?

Cada diferencia entre el motor y la plataforma tiene una causa con nombre de una lista fija, y los resultados netos de los dos lados cuadran con un resto de 0,00. Una diferencia sin causa con nombre es un error.

¿Un buen backtest significa que a una estrategia le irá bien?

No. Un backtest muestra lo que habrían hecho las reglas con precios pasados, con los costes y los límites indicados. No dice nada del futuro. Las pruebas de esta página comprueban que el motor y las plataformas coinciden, no que una estrategia sea buena.

¿Se probó el motor con dinero real?

No. Solo se ejecutaron el Probador de estrategias de MetaTrader 5 y backtests de TradingView. No se probó la operativa real.

¿Quién puede ejecutar un backtest?

Todos los usuarios con sesión iniciada. Para probar el creador sin registrarte, abre la demo pública.


Fuentes

Las cifras de esta página vienen de nuestro registro de ingeniería, citado por el número de documento.

  • 149 Dosier de pruebas: los hechos del motor (§2) y lo que podemos afirmar (§6.1).
  • 115 Actualización del diseño del motor: el modelo de velas (§2) y el perfil de prueba (§9).
  • 125 Comprobación del modelo de velas frente a TradingView, MetaTrader 5 y NinjaTrader.
  • 100 Decisiones DD-66, DD-101, DD-103 y DD-105.
  • 137 Banco de paridad: los tres niveles y las causas con nombre.
  • 137a Informe de paridad: los recuentos.
  • 143 Ejecuciones de referencia de las seis estrategias habituales.