Guía de ayuda de MetaTrader 5Trading algorítmico, robots comercialesParticularidades de simulación

Particularidades de simulación

La idea del trading automatizado es bastante atractiva con el hecho de que el robot de trading trabaja sin descanso 24 horas al día y siete días a la semana. El robot no sabe nada de cansancio, dudas y miedo, ni tampoco de problemas psicológicos. Sólo basta con formalizar las reglas de trading e implementarlas en forma de algoritmos, y su robot está listo a trabajar sin parar. Pero antes, es necesario asegurarse del cumplimiento de dos condiciones importantes:

  • el Asesor Experto realiza las operaciones comerciales de acuerdo con las reglas del sistema de trading;
  • la estrategia de trading que ha sido implementada en el Asesor Experto muestra la ganancia a base de los datos históricos.

Para recibir respuestas a estas preguntas, se utiliza el Probador de Estrategias que forma parte integrante de la plataforma comercial.

Activación y ejecución de órdenes

Para los instrumentos no bursátiles, la activación de todos los tipos de órdenes pendientes y SL/TP se realiza conforme a los precios Bid y Ask. La ejecución sucede según los precios de mercado actuales Bid y Ask en el momento de la activación.

Para los instrumentos bursátiles, la construcción de gráficos y la activación de órdenes stop se realiza según los precios de la última operación (Last). La activación de las órdenes límite se realiza según los precios Bid y Ask. Además, la ejecución de órdenes límite se realiza al precio anunciado en la orden (sin deslizamiento), y el resto de tipos de órdenes se ejecuta a los precios de mercado actuales Bid y Ask (el deslizamiento es posible).

Veamos un ejemplo con el instrumento Si-6.16. Con los precios actuales Bid=72570, Ask=72572, Last=72552 se ha colocado una orden Buy Stop con un precio de activación de 72580. En el flujo de precios hemos obtenido los nuevos precios actuales:

  • Bid=72588
  • Ask=72590
  • Last=72580

En los instrumentos bursátiles, el precio Last es el que activa las órdenes stop. Por eso, la llegada del precio Last=72580 en el flujo ha provocado la activación de la orden Buy Stop. La ejecución de la orden (operación mercantil de compra) tendrá lugar al precio de mercado actual Ask=72590.

Ejemplo de activación y ejecución de una orden Buy Stop con un instrumento bursátil

En los modo de prueba "Según los precios de abertura" e "М1 en OHLC", la ejecución de ordenes SL/TP se realiza de acuerdo con los precios indicados en estas ordenes. El algoritmo de ejecución a precios de mercado utilizado en las condiciones exactas (todos os ticks e ticks reales), no es adecuado para condiciones rudas. En los últimos, los ticks intermedios no se generan, y la diferencia entre el precio indicado en la orden y el precio de mercado, en el momento de la ejecución (Open o OHLC), puede ser significativo. La ejecución de órdenes al precio indicado en los modos "Según los precios de abiertura" y "M1 en OHLC" da unos resultados de pruebas más precisos.

Formación de las barras

Para los instrumentos bursátiles, las barras en el simulador de estrategias se forman solo conforme a los ticks con un precio Last distinto a cero. En este sentido, pueden llegar precios Bid y Ask, los indicadores se calcularán, pero las barras no se formarán. En el modo "Todos los ticks" no se dan precios Last cero. Por eso cada nuevo tick cambiará la barra.

Modelación del spread #

La diferencia entre los precios Bid y Ask se llama spread. El spread no se modela durante la simulación, sino se coge de los datos históricos. Si en los datos históricos el spread es más bajo o igual a cero, entonces se utiliza el último spread conocido para el momento de la generación.

En el Probador un spread siempre se considera como flotante.

Variables globales de la plataforma comercial #

Durante la simulación, las variables globales de la plataforma se emulan también, pero no están relacionadas de ninguna manera con auténticas variables globales de la plataforma que se puede ver en la plataforma utilizando el botón F3. Eso quiere decir que durante la simulación todas las operaciones con las variables globales de la plataforma se realizan fuera de la misma (en el agente de pruebas).

Carga del historial durante la simulación #

El historial para el instrumento a probar se sincroniza y se descarga por la plataforma desde el servidor comercial antes del inicio del proceso de simulación. En este caso, la plataforma descarga por primera vez desde el servidor comercial todo el historial disponible para el instrumento a probar para luego ya no volver a este asunto. A continuación, se descargan sólo los datos nuevos.

El agente de pruebas recibe de la plataforma el historial para el instrumento a probar justamente después de que haya sido iniciado el proceso de simulación. Si durante el proceso de simulación se utilizan los datos de otros instrumentos (por ejemplo, si se trata de un EA de múltiples divisas), entonces en este caso el agente de pruebas solicita a la plataforma el historial necesario durante la primera invocación. Si los datos históricos se encuentran dentro de la plataforma, se pasan inmediatamente a los agentes de pruebas. Si no hay datos necesarios, la plataforma los solicitará y descargará desde el servidor, y luego los pasará a los agentes de pruebas.

También se realiza el acceso a los instrumentos adicionales en el caso cuando se calcula el precio del tipo de cambio cruzado durante las operaciones de trading. Por ejemplo, durante la simulación de la estrategia sobre EURCHF con la moneda del depósito en dólares de los EE.UU. el agente de pruebas solicita a la plataforma el historial para EURUSD y USDCHF antes de procesar la primera operación comercial, aunque la estrategia no supone la invocación directa a estos instrumentos financieros.

La descarga de la historia comercial adicional puede comenzarse con la llamada de ciertas funciones desde los programas MQL5:

La descarga se realiza

La descarga no se realiza

Al llamar SymbolInfoDouble con los parámetros:

  • SYMBOL_BID
  • SYMBOL_BIDHIGH
  • SYMBOL_BIDLOW
  • SYMBOL_ASK
  • SYMBOL_ASKHIGH
  • SYMBOL_ASKLOW
  • SYMBOL_LAST
  • SYMBOL_LASTHIGH
  • SYMBOL_LASTLOW
  • SYMBOL_TRADE_TICK_VALUE
  • SYMBOL_TRADE_TICK_VALUE_PROFIT
  • SYMBOL_TRADE_TICK_VALUE_LOSS

Al llamar SymbolInfoInteger con los parámetros:

  • SYMBOL_VOLUME
  • SYMBOL_VOLUMEHIGH
  • SYMBOL_VOLUMELOW
  • SYMBOL_TIME
  • SYMBOL_SPREAD

Al llamar SymbolInfoTick

Al llamar:

  • SymbolInfoString
  • SymbolName
  • SymbolSelect
  • SymbolInfoMarginRate
  • SymbolInfoSessionQuote
  • SymbolInfoSessionTrade
  • Otras funciones no indicadas
  • SymbolInfoDouble y SymbolInfoInteger con otros parámetros no indicados a la izquierda

Antes de empezar a probar una estrategia de múltiples divisas, se recomienda descargar previamente todos los datos históricos necesarios en la plataforma. Esto permitirá evitar las demoras durante la simulación/optimización relacionadas con la descarga complementaria de datos que faltan. Por ejemplo, puede descargar el historial si abre los gráficos correspondientes y los desplaza hacia el inicio del historial.

Los agentes de pruebas en su lugar reciben el historial en forma comprimida desde la plataforma. Durante la simulación repetida el Probador ya no vuelve a descargar el historial desde la plataforma, puesto que quedan los datos después del arranque anterior del Probador.

  • La plataforma descarga el historial desde el servidor comercial sólo una vez cuando el agente se dirige a la plataforma a por el historial para el símbolo a probar. El historial se descarga en forma comprimida con el fin de ahorrar el tráfico.
  • Los ticks no se mandan por la red, sino se generan por los agentes de pruebas.

Simulación en múltiples divisas #

El Probador permite llevar a cabo la simulación sobre el historial de estrategias que tradean utilizando varios instrumentos financieros. A estos EAs se les llaman condicionalmente de múltiples divisas, porque desde el principio en las plataformas anteriores la simulación se realizaba sólo para un instrumento financiero. Mientras que en el Probador de la plataforma se puede simular el trading con todos los instrumentos disponibles.

El historial para los instrumentos utilizados se descarga por el Probador desde la plataforma comercial (¡no desde el servidor comercial!) de forma automática cuando se le llama al instrumento en cuestión por primera vez.

El agente de pruebas descarga sólo el historial que falta con pequeña reserva con el fin de asegurar los datos históricos necesarios para el cálculo de los indicadores en el momento del inicio simulación. El volumen mínimo del historial a descargar desde el servidor comercial para los períodos D1 e inferiores es de un año. De esta manera, si se inicia la simulación en el intervalo 2010.11.01-2010.12.01 (simulación en el intervalo de un mes) con el período M15 (cada barra es igual a 15 minutos), entonces se le solicitará a la plataforma el historial para el instrumento durante el año 2010 entero. Para los períodos Weekly será solicitado el historial de 100 barras, lo que supone aproximadamente dos años (52 semanas en el año). Para la simulación sobre el período mensual Monthly el agente solicitará el historial de 8 años (12 meses * 8 años = 96 meses).

Si por alguna razón resulta imposible conseguir antes del inicio de la prueba el número de barras necesario, entonces la fecha del inicio de la simulación será acercada automáticamente hacia el presente para alcanzar esta cantidad de barras.

Durante la simulación se emula también la "Observación del Mercado" desde la cual se puede obtener la información sobre los instrumentos. Por defecto, al inicio de la simulación la "Observación del Mercado" del Probador contiene sólo un símbolo, para el que ha sido iniciada la simulación. Todos los símbolos necesarios se conectan a la "Observación del Mercado" del Probador (¡no de la plataforma!) de forma automática en cuanto se hace la llamada a ellos.

Antes de empezar la simulación de un EA de múltiples divisas, hay que seleccionar los instrumentos necesarios para esta simulación en la "Observación del Mercado" de la plataforma y bajar los datos necesarios con la profundidad necesaria. Al llamar a un símbolo "ajeno" por primera vez, se ejecuta automáticamente la sincronización para este símbolo entre el agente de pruebas y la plataforma. Un símbolo "ajeno" es aquel que se diferencia del símbolo para el que ha sido iniciada la simulación.

En el momento cuando se hace la primera invocación a un símbolo ajeno, el proceso de simulación se detiene y se realiza la descarga adicional de datos históricos que faltan para el par símbolo/período desde la plataforma al agente de pruebas. Al mismo tiempo se activa el proceso de generación de la secuencia de ticks para este símbolo.

Para cada instrumento se genera su propia secuencia de ticks de acuerdo con el modo de generación de ticks seleccionado.

De esta manera, para llevar a cabo la simulación de múltiples divisas en la plataforma, no hace falta hacer ningunos esfuerzos adicionales. Bastará con abrir los gráficos de los instrumentos correspondientes en la plataforma. El historial de los símbolos necesarios se descargará automáticamente desde el servidor comercial con la condición si dispone de estos datos.

Modelación de la hora en el Probador #

Durante la simulación la hora local siempre es igual a la hora del servidor. En su lugar, la hora del servidor siempre es igual a la hora que corresponde a la hora GMT.

La falta de diferencia entre GMT, la hora local y de servidor en el Probador está hecha a propósito debido a que la conexión con el servidor no siempre puede ser permanente. Mientras que los resultados de la simulación tienen que ser iguales, independientemente de que si hay conexión o no. La información sobre la hora del servidor no se guarda de forma local, sino se coge en el servidor.

Objetos gráficos durante la simulación #

La construcción de los objetos gráficos no se hace durante la simulación/optimización. De esta manera, el EA obtiene los valores cero cuando se dirige a las propiedades del objeto creado durante la simulación/optimización.

Esta limitación no concierne a la simulación en modo visual.

Sincronización de las barras durante la simulación en el modo "Sólo precios de apertura" #

El Probador de la plataforma permite probar también así llamados Asesores Expertos "de múltiples divisas". Un EA de múltiples divisas es un Asesor Experto que opera con dos o más símbolos.

La simulación de las estrategias que tradean con varios instrumentos impone al Probador unos requerimientos técnicos adicionales:

  • generación de ticks para estos instrumentos;
  • cálculo de valores de los indicadores para estos instrumentos;
  • cálculo de requerimientos del margen para estos instrumentos;
  • sincronización de secuencias de ticks generadas para todos los instrumentos con los que se tradea.

El Probador genera y reproduce una secuencia de ticks para cada instrumento en función del modo de trading seleccionado. En este caso la nueva barraen cada instrumento se abre independientemente de cómo se ha abierto la barra en otro instrumento. Eso significa que durante la simulación de un EA de múltiples divisas puede surgir la situación (suele pasar con bastante frecuencia) cuando en un instrumento la barra ya se ha abierto y en el otro todavía no. De esta manera, durante la simulación pasa lo mismo que pasa en la vida real.

Esta auténtica modelación del desarrollo del historial en el Probador no causa preguntas hasta que utilizamos los modos de simulación "Todos los ticks" y "1 minute OHLC". Durante el uso de estos modos, dentro de los límites de una vela se genera una cantidad de ticks suficiente para esperar el momento de sincronización de las barras de diferentes símbolos. ¿Pero cómo vamos a probar las estrategias de múltiples divisas en el modo "Sólo precios de apertura" si se requiere la sincronización obligatoria de las barras para los instrumentos con los que tradeamos? Pues, en este modo el EA es llamado sólo en el tick que corresponde a la hora de apretura de la barra.

Lo explicaremos con un ejemplo: si probamos nuestro EA sobre el símbolo EURUSD, y en EURUSD ha sido abierta una nueva vela, será muy fácil enterarnos de eso. Es que durante la simulación en el modo "Sólo precios de apertura", el evento de la llegada de un nuevo tick corresponde al momento de apertura de la barra en el período de la prueba. Pero no existe garantía alguna de que la nueva vela se ha abierto para el símbolo GBPUSD que se utiliza en el EA.

Agentes de pruebas #

En la plataforma la simulación se realiza utilizando los agentes de pruebas. Los agentes locales se crean y se conectan de forma automática. Por defecto, el número de agentes locales corresponde al número de núcleos que tiene el ordenador.

Cada agente de pruebas dispone de su propia copia de variables globales que no está relacionada de ninguna manera con la plataforma. La misma plataforma desempeña el papel del operador que reparte las tareas para los agentes locales y remotos. Después de ejecutar la tarea de turno relacionada con la simulación de un EA con los parámetros establecidos, el agente devuelve el resultado a la plataforma. Durante la prueba única se utiliza sólo un agente.

El agente guarda el historial que recibe de la plataforma en las carpetas separadas que llevan el nombre del instrumento. Es decir, el historial para EURUSD se guarda en la carpeta con el nombre EURUSD. Aparte de eso, el historial de los instrumentos se divide según las fuentes. La estructura de almacenamiento del historial es la siguiente:

carpeta_del_probador\Agent-IPaddress-Port\bases\nombre_de_la_fuente\history\nombre_del_instrumento

Por ejemplo, el historial para EURUSD del servidor MetaQuotes-Demo se puede guardar en la carpeta_del_probador\Agent-127.0.0.1-3000\bases\MetaQuotes-Demo\EURUSD.

Después de haber finalizado el proceso de simulación, el agente local se encuentra durante cinco minutos en el modo de espera de la siguiente tarea para no perder tiempo con el arranque en caso de las siguientes llamadas. Y sólo transcurrido este plazo de espera, el agente local finaliza su trabajo y se descarga de la memoria del ordenador.

En caso de la finalización anticipada de la simulación por parte del usuario (el botón "Cancelar"), así como en caso del cierre de la plataforma, todos los agentes locales finalizan su trabajo y se descargan de la memoria del ordenador.

Intercambio de datos entre la plataforma y el agente #

Cuando se inicia el proceso de simulación, la plataforma se prepara para enviar al agente unos bloques de parámetros:

  • Parámetros de entrada de simulación (modo de modelación, intervalo de simulación, instrumento, criterio de optimización, etc.)
  • Lista de instrumentos seleccionados en "Observación del Mercado"
  • Especificación del instrumento a probar (tamaño del contrato, desviaciones permitidas del mercado para colocar StopLoss y Take Profit, etc.)
  • EA a probar y los valores de sus parámetros de entrada
  • Información sobre los archivos adicionales (bibliotecas, indicadores, archivos de datos)

Para cada bloque de parámetros se crea una huella digital en forma del hash MD5 que se envía al agente. El hash MD5 es único para cada conjunto de datos, siendo su volumen muchas veces menor que el volumen de la información a base de la cual éste ha sido calculado.

El agente recibe los hashs de los bloques y los compara con los que ya tiene almacenados. Si el agente no dispone de la huella de este bloque de parámetros, o el hash recibido se diferencia del existente, el agente solicita el bloque de parámetros en sí. De esta manera, se reduce el volumen de tráfico entre la plataforma y el agente.

Después de realizar la simulación, el agente devuelve a la plataforma todos los resultados de la prueba que se muestran en las pestañas "Resultados de simulación" y "Resultados de optimización": beneficio obtenido, número de transacciones, ratio de Sharpe, resultado de la función OnTester(), etc.

Durante la optimización, la plataforma reparte entre los agentes las tareas para realizar la prueba utilizando pequeños paquetes de datos. Cada paquete contiene unas cuantas tareas (cada tarea supone una prueba única con el conjunto de parámetros de entrada). Esto reduce el tiempo de intercambio entre la plataforma y el agente.

Los agentes nunca guardan los archivos EX5 recibidos de la plataforma (EA, indicadores, bibliotecas, etc.) en el disco duro por motivos de seguridad. Se hace para que no se pueda utilizar los datos recibidos en el ordenador con el agente instalado. Todos los demás archivos, incluyendo DLL, se guardan en la zona protegida (sandbox). En los agentes remotos no se puede probar los EAs con el uso de las DLL.

La plataforma deposita los resultados de simulación en una caché de resultados especial (caché resultante) para un acceso rápido a ellos cuando surja esta necesidad. Para cada conjunto de parámetros la plataforma busca en la caché resultante los resultados ya listos de los arranques anteriores con el fin de evitar los arranques repetitivos. Si el resultado con este conjunto de parámetros no ha sido encontrado, el agente recibe la orden para empezar la prueba.

Todo el tráfico entre la plataforma y el agente se codifica.

Los ticks no se mandan por la red, sino se generan por los agentes de pruebas.

Uso de la carpeta compartida de todas las plataformas #

Todos los agentes de pruebas están aislados uno del otro y de la plataforma también: cada agente tiene su propia carpeta donde se guardan todos los logs del agente. Además de eso, durante la simulación todas las operaciones con los archivos se hacen en la carpeta nombre_del_agente/MQL5/Files. No obstante, se puede organizar la interacción entre los agentes locales y la plataforma a través de la carpeta compartida de todas las plataformas.

Uso de la DLL #

Para acelerar el proceso de la simulación, se puede utilizar no sólo los agentes locales, sino también los agentes remotos. Pero hay ciertas limitaciones para los agentes remotos. En primer lugar, los agentes remotos no muestran en sus logs los resultados de ejecución de la función Print(), los mensajes sobre la apertura y el cierre de posiciones. En el log se muestra el mínimo de la información para que los EAs escritos de forma incorrecta no sobrellenen con sus mensajes el disco duro del ordenador en el que trabaja el agente remoto.

La segunda limitación consiste en la prohibición del uso de DLL durante la simulación de los EAs. Las llamadas a las bibliotecas DLL están completamente prohibidas en los agentes remotos por motivos de seguridad. Para los agentes locales las llamadas dll dentro de los EAs que se prueban están permitidas sólo en el caso si el permiso correspondiente ha sido concedido por medio de la opción "Permitir importación de DLL".

Asesores Expertos

Si utiliza los EAs (scripts, indicadores) recibidos desde fuera que exigen que les permita las llamadas a DLL, Usted debe comprender todo el riesgo que toma sobre sí en caso de permitir el uso de esta opción en los ajustes de la plataforma. Y eso no depende de la forma del uso del EA -para la simulación o para su arranque en el gráfico.