English Русский 中文 Deutsch 日本語 Português
preview
Comprensión y uso eficaz del simulador de estrategias MQL5

Comprensión y uso eficaz del simulador de estrategias MQL5

MetaTrader 5Probador | 9 octubre 2023, 11:44
585 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

Nosotros, como programadores de MQL5, necesitamos comprender y utilizar bien el simulador de estrategias para poder obtener resultados efectivos. Utilizando esta valiosa herramienta, podremos obtener información importante sobre el rendimiento de nuestros programas MQL5, lo cual influirá en la mejora de los resultados comerciales. Tenemos que comprender bien una serie de temas importantes antes de comenzar a realizar las pruebas, como, por ejemplo, el trabajo con todo tipo de errores. Otro tema que también deberemos entender bien es la depuración, que nos permite ejecutar los programas creados de forma interactiva. Finalmente, la herramienta más importante y valiosa es sin duda el simulador de estrategias, que nos permite probar y evaluar los programas creados utilizando funciones más interesantes que MetaTrader 4. El artículo está dedicado a los aspectos más importantes del uso del simulador de estrategias MQL5. Abarcaremos los siguientes temas:

Se supone que el lector ya conoce el lenguaje de programación MQL5 y sabe cómo crear programas. Estas son condiciones imprescindibles para comprender el artículo. Todo lo que necesita para dominar el lenguaje lo puede encontrar en la Documentación. También puede leer mis otros artículos sobre el estudio de los conceptos básicos de programación en MQL5 y cómo crear sistemas comerciales basados ​​en los indicadores técnicos más populares. Espero que los encuentre útiles.

Errores

En primer lugar, hablaremos de los errores que se pueden encontrar al crear, ejecutar e iniciar programas MQL5. MQL5 nos notifica sobre diferentes errores, pero si no sabemos qué significan o dónde ocurren, nos llevará mucho más tiempo solucionarlos.

Pueden producirse errores y advertencias de compilación al escribir código; también podemos encontrarnos con errores al ejecutar un programa MQL5 que supongan errores de tiempo de ejecución. Podemos encontrar otros tipos de errores cuando nuestro programa MQL5 intenta comerciar. Estos son, por ejemplo, errores del servidor comercial. Así, hoy veremos los siguientes tipos de errores:

  • Errores y advertencias de compilación.
  • Errores de tiempo de ejecución
  • Errores del servidor comercial

Antes de escribir sobre estos errores, debemos saber dónde aparecen. En MQL5 IDE hay una ventana de barra de herramientas en la parte inferior. Si no se encuentra ahí de forma predeterminada, podrá verla de una de las siguientes maneras:

1- Ver ==> Herramientas

Herramientas

2- Combinación de teclas Ctrl+T

3- Icono de “Herramientas” en la barra de herramientas principal

Herramientas 2

La ventana en sí tiene el aspecto siguiente:

Herramientas 3

Errores y advertencias de compilación:

Al escribir código, inevitablemente cometeremos errores de sintaxis o tipográficos, que a su vez provocarán errores de compilación. En esta parte presentaremos los errores más populares y comunes de esta clase. El programa no se podrá compilar hasta que se corrijan dichos errores. Los errores más frecuentes de este tipo son:

Falta punto y coma (semicolon expected error):

No hay punto y coma al final de la línea. En ocasiones también falta el paréntesis izquierdo. A continuación le mostramos un ejemplo del error.

Código erróneo:

int a=(2+1)

El mensaje de error en sí tiene el aspecto siguiente:

semicolon expected

Código correcto:

int a=(2+1);

Tras corregir el error y realizar la compilación, la ventana se verá así:

error corregido

Error de token inesperado (unexpected token error):

El motivo del error es la ausencia del paréntesis derecho en la última línea de código o un paréntesis izquierdo adicional en la línea de código actual. A continuación le mostramos un ejemplo:

Código erróneo:

int a=(2+1;

Mensaje de error:

Token sobrante

Código correcto:

int a=(2+1);

Pestaña "Errores" después de la corrección y la compilación:

 error corregido

Error de identificador no declarado:

Este tipo de error ocurre cuando usamos una variable sin declararla primero, pues debemos declarar cualquier variable nueva antes de usarla o asignarle cualquier valor. Necesitamos seleccionar el tipo de datos correcto y apropiado que deberemos retornar en esta variable, como un número entero o cadena. A continuación le mostramos un ejemplo de este tipo de error, que ocurre al usar una nueva variable sin declararla.

Código erróneo:

a=5;

En el código anterior usaremos la variable (a) asignándole el valor 5, sin declararla. El mensaje de error se ve así:

Identificador no declarado

Como podemos ver, el mensaje indica no solo el error en sí, sino también la variable 'a' que lo ha provocado.

Código correcto:

int a=5;

Errores entre paréntesis (unbalanced left parenthesis error):

El error ocurre si olvidamos un paréntesis en alguna parte o añadimos uno extra. A continuación le ofrecemos un ejemplo.

Código erróneo:

   bool a=7;
   if (a=5
   a=5;

La ausencia de paréntesis ha provocado dos errores al mismo tiempo: "unbalanced left parenthesis" y "some operator expected"

Paréntesis omitido

Código correcto:

   bool a=7;
   if (a=5)
   a=5;
Tras corregir el error, el código se compilará normalmente.


Error inesperado de finalización del programa (unexpected end of program error):

A veces, la falta de un paréntesis de cierre hace que un programa finalice de forma inesperada. A continuación le ofrecemos un ejemplo.

Código erróneo:

void OnStart()
  {
   bool a=7;
   if (a=5)
   a=5;

El paréntesis de cierre omitido ha provocado dos errores: "unexpected end of program" y "unbalanced parentheses"

unexpected end of program

Código correcto:

void OnStart()
  {
   bool a=7;
   if (a=5)
   a=5;
   }

Tras corregir el error, el código se compilará normalmente.

Las expresiones de ámbito global no están permitidas (expressions are not allowed on a global scope error):

El error ocurre cuando omitimos el paréntesis izquierdo en una declaración compuesta o especificamos una declaración o expresión fuera del ámbito de una función en particular, pues necesitamos usar expresiones solo dentro del ámbito de la función. A continuación le ofrecemos un ejemplo.

Código erróneo:

   int a=(7+5);
   if (a<7)
   
   a=7;
   }

Hemos omitido open(), que ha cambiado el ámbito, generando el error "Expressions are not allowed on a global scope". Este será el aspecto del mensaje de error en la pestaña "Errores".

No se permiten expresiones a nivel global


Código correcto:

   int a=(7+5);
   if (a<7)
   {
   a=7;
   }

Tras corregir el error, el código se compilará normalmente.

Error de recuento de parámetros incorrectos (wrong parameters count error):

Este error ocurre cuando usamos una función predefinida o personalizada con ciertos parámetros y no especificamos dichos parámetros correctamente, indicando demasiados o muy pocos de ellos. A continuación le mostramos un ejemplo del error.

Código de error:

Si creamos una función myVal para retornar el valor entero del resultado de la suma de dos valores enteros, ¿significará eso que tenemos dos parámetros en esta función? Cuando llamamos a esta función usando parámetros distintos a estos dos parámetros, obtendremos el mismo tipo de error que en el siguiente código

void OnStart()
  {
   int example=myVal(10);
  }
//+------------------------------------------------------------------+
int myVal(int a, int b)
  {
   return a+b;
  }

Una vez compilado el código, obtendremos el error:

Error en el recuento de parámetros

Código correcto:

Necesitaremos usar los parámetros dados de la función creada como se muestra a continuación.

void OnStart()
  {
   int example=myVal(10,20);
  }
//+------------------------------------------------------------------+
int myVal(int a, int b)
  {
   return a+b;
  }

Tras corregir el error, el código se compilará normalmente.

Operador omitido (some operator expected error):

Se ha omitido o colocado de forma errónea algún operador. A continuación le ofrecemos un ejemplo.

Código de error:

int a= 7 10;

Al código le falta un operador entre dos números, lo cual genera el error:

Operador omitido

Código correcto:

int a= 7+10;

Tras corregir el error, el código se compilará normalmente.

Estos son los errores de compilación más frecuentes. No obstante, además de los errores, también hay advertencias. Estas se muestran con fines informativos. A continuación le mostramos el código que activará una advertencia en la pestaña Errores.

int a;

Recibiremos una advertencia de que la variable 'a' no está en uso porque hemos declarado una nueva variable 'a', pero no la estamos usando ni le hemos asignado un valor.

 warning

A continuación le ofrecemos los enlaces a las secciones relevantes de comunicación:

Algunos consejos que pueden ser muy útiles para eliminar estos errores si se producen:

  • Comience a corregirlos desde el principio, ya que esto puede ayudarle a eliminar todos los errores posteriores.
  • Haciendo doble clic en la línea del error en la pestaña "Errores" de la barra de herramientas, accederá directamente a la línea de código que está causando el problema.

Ya hemos analizado los errores que se pueden encontrar en la primera etapa al escribir el código de un programa MQL5. Ahora vamos a ver los errores que pueden ocurrir durante la ejecución.

Errores de ejecución:

Como ya hemos mencionado, los errores de ejecución son errores que ocurren durante la ejecución de un programa MQL5. Estos errores no impedirán que el código se compile sin errores, aunque este no se ejecutará como queremos. Podemos encontrar los errores en el log en forma de mensajes indicando el motivo del error, así como la línea que contiene el error en el código fuente.

Ejemplos de dichos errores:

Código de error Motivo del error
4007
  No hay memoria suficiente para reasignar el array o se ha intentado cambiar el tamaño de un array estático
4101   ID de gráfico no válido
4301   Símbolo desconocido
4754   Orden no encontrada
5120   Error interno de la base de datos

Podrá ver estos códigos usando la función GetLastError(), añadiendo a su programa un método de procesamiento de errores. También podrá ver estos errores mirando la pestaña "Registro" durante la simulación o la pestaña "Expertos" mientras ejecuta el programa en el gráfico. Todos los errores de ejecución con sus códigos se presentan en la documentación de MQL5 en este enlace:

https://www.mql5.com/es/docs/constants/errorswarnings/errorcodes

El programa no finalizará su funcionamiento en caso de error de ejecución, salvo a causa de algunos errores críticos, por ejemplo, al salirse de los límites del array (array fuera de rango).

Errores del servidor comercial:

Este tipo de error ocurre en la etapa de ejecución de la transacción en la estructura de la solicitud comercial MqlTradeRequest cuando se usa la función OrderSend(). Estos errores se pueden ver en la pestaña "Registros" al realizar las simulaciones o en la pestaña "Expertos" al ejecutar el programa en un gráfico. Ejemplos de errores:

Código de error
Motivo del error
10006
  Solicitud rechazada
10032
  La operación solo está permitida para cuentas reales.
10033
  Se ha alcanzado el límite del número de órdenes pendientes
10034
  Se ha alcanzado el límite en el volumen de órdenes y posiciones para este símbolo.
10041
  La solicitud para activar una orden pendiente ha sido rechazada y la orden en sí ha sido cancelada.

Todos los códigos se pueden ver en la documentación de MQL5 en este enlace:

https://www.mql5.com/es/docs/constants/errorswarnings/enum_trade_return_codes

Depuración

El depurador MQL5 se puede usar para ejecutar el programa creado con datos históricos o actuales. A continuación le mostramos los botones del depurador en la barra de herramientas del MetaEditor.

 Botones del depurador

1- Iniciar/continuar depurando con datos históricos

2- Iniciar/continuar depurando con datos reales

3- Pausar la ejecución del programa

4- Finalizar la depuración

Cuando comience la depuración con datos históricos, se iniciará de inmediato la simulación del programa con la historia. Al depurar los datos actuales, el programa se ejecutará en el gráfico actual.

Simulador de estrategias

El simulador de estrategias es la herramienta más importante y valiosa de MetaTrader 5. Es mejor que su predecesor en MetaTrader 4 y, entre otras cosas, cuenta con simulación multidivisa. Podrá abrirlo de una de las siguientes maneras:

1- Combinación Ctrl+R con MetaTrader 5 abierto.

2- Ver ==> Simulador de estrategias.

Simulador

El tipo de prueba se puede seleccionar en la pestaña "Vista"

Simulador1

Allí podremos elegir lo que necesitamos probar. Una vez que hagamos esto, se abrirá la pestaña "Ajustes" con las configuraciones predefinidas según lo que hayamos elegido probar.

  • Única - probar asesores sin visualización.
  • Indicador - probar un indicador.
  • Visualización - probar en el modo de visualización. Esto nos permite ver cómo reacciona el programa a los datos según nuestras propias instrucciones.
  • Prueba de estrés con retrasos - prueba con retrasos.
  • Opciones de optimización (completa, genética, optimización forward).
  • Escaneo del mercado - probar el escaneo de mercado.
  • Cálculo matemático - comprobar los cálculos matemáticos.

Resultados anteriores - ver los resultados de las pruebas anteriores. También podrá buscar una prueba específica anterior usando la barra de búsqueda debajo de las opciones de simulación.

En la pestaña "Ajustes" veremos lo siguiente:

 Simulador2

  •   1. Asesor - seleccionar el archivo de programa que debe probarse.
  •   2. IDE - abrir el código fuente del programa seleccionado.
  •   3. Guardar/cargar configuraciones específicas.
  •   4. Símbolo - seleccionar un símbolo para realizar la prueba.
  •   5. Seleccionar un marco temporal para la prueba.
  •   6. Características del símbolo seleccionado.
  •   7. Intervalo - seleccionar el periodo de prueba.
  •   8. Seleccionar el periodo de prueba inicial.
  •   9. Seleccionar el periodo de prueba final.
  •  10. Forward - seleccionar la parte necesaria del periodo de optimización que se asignará para las pruebas directas.
  •  11. Seleccionar la fecha de inicio de la prueba forward.
  •  12. Se podrán seleccionar retrasos que se aproximen a los datos reales y a la ejecución real.
  •  13. Aproximarse a los datos reales y la ejecución real.
  •  13/2. Modelado - seleccione un modelo de simulación (con cada tic, etcétera).
  •  14. Habilitar la opción de representar las ganancias en pips.
  •  15. Depósito inicial.
  •  16. Seleccionar la divisa de depósito.
  •  17. Apalancamiento.
  •  18. Optimización - utilizar la optimización (hablaremos de ello con detalle más adelante).
  •  19. Active la opción si necesita visualizar las operaciones o la ejecución durante las pruebas.


La pestaña "Parámetros" le permitirá verificar si el programa probado tiene datos de entrada editables.

Al clicar en el botón "Inicio", se pondrá a prueba el programa. Cuando la visualización esté activada, veremos un gráfico con pestañas. "Trading" mostrará las transacciones completadas, si las hubiera. La pestaña "Historia" mostrará las órdenes cerradas o canceladas. En "Operaciones" se mostrarán todas las operaciones. En "Registro" se mostrarán mensajes del programa y otra información de servicio. El rendimiento del programa también se podrá controlar en la pestaña "Gráfico" del simulador de estrategias.

Una vez completada la prueba, todas las estadísticas necesarias se mostrarán en la pestaña "Backtest"

Simulador3

Simulador4

Dependiendo del programa que estemos probando, los datos en la pestaña Backtest se verán iguales o diferentes a los datos del ejemplo anterior.

La función de optimización involucra una amplia gama de diferentes parámetros y datos de entrada, y pone a prueba los datos de entrada y todas las combinaciones posibles de dichos datos para seleccionar los mejores resultados. El modelo de optimización se puede seleccionar en la pestaña de ajustes.

Simulador5

Simulador6

Los elementos más importantes que debemos comprobar después de las pruebas son:

  • El beneficio neto: se calcula restando la pérdida bruta del beneficio bruto.
  • La reducción: es la pérdida máxima de una cuenta durante su operación.
  • La rentabilidad: es la relación entre el beneficio bruto y la pérdida bruta.
  • La esperanza matemática: es la ganancia o pérdida promedio de una transacción.
  • El factor de recuperación: determina cómo de bien se recupera de las pérdidas la estrategia probada.  


Conclusión

Hoy hemos analizado el simulador de estrategias, una de las herramientas más importantes y valiosas que todos debemos dominar para desarrollar cualquier programa MQL5. También hemos abarcado algunos temas relacionados con él que ayudarán al lector a comprender y utilizar esta herramienta de forma efectiva. Asimismo, hemos estudiado los tipos de error que podemos encontrar al desarrollar programas MQL5:

  • Errores y advertencias de compilación.
  • Errores de ejecución.
  • Errores del servidor comercial.

También hemos analizado el proceso de depuración en el depurador integrado y estudiado con detalle las características principales del simulador de estrategias, incluidos sus modos operativos e informes de prueba.

Espero que este artículo le ayude a crear y probar eficazmente programas MQL5 de alta calidad. Quizás le interesen mis otros artículos, por ejemplo, sobre la creación de sistemas comerciales basados ​​en los indicadores técnicos más populares.

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/12635

Redes neuronales: así de sencillo (Parte 44): Estudiamos las habilidades de forma dinámica Redes neuronales: así de sencillo (Parte 44): Estudiamos las habilidades de forma dinámica
En el artículo anterior, nos familiarizamos con el método DIAYN, que ofrece un algoritmo para el aprendizaje de diversas habilidades. El uso de las habilidades aprendidas puede aprovecharse en diversas tareas, pero estas habilidades pueden resultar bastante impredecibles, lo cual puede dificultar su uso. En este artículo, analizaremos un algoritmo para el aprendizaje de habilidades predecibles.
Desarrollamos el indicador True Strength Index personalizado utilizando MQL5 Desarrollamos el indicador True Strength Index personalizado utilizando MQL5
Les presento un nuevo artículo sobre la creación de indicadores personalizados. Esta vez trabajaremos con el True Strength Index (TSI) y crearemos un asesor basado en él.
Desarrollando un canal de Donchian personalizado con la ayuda de MQL5 Desarrollando un canal de Donchian personalizado con la ayuda de MQL5
Existen muchas herramientas técnicas que se pueden usar para visualizar los canales de precios. Una de esas herramientas es el canal de Donchian. En este artículo, aprenderemos cómo crear un canal de Donchian, y también a usarlo como indicador personalizado dentro de un asesor experto.
Desarrollamos un indicador Heiken Ashi personalizado utilizando MQL5 Desarrollamos un indicador Heiken Ashi personalizado utilizando MQL5
En este artículo, aprenderemos cómo crear nuestro propio indicador usando MQL5 según nuestras preferencias. Dicho indicador se utilizará en MetaTrader 5 para interpretar gráficos o como parte de asesores expertos.