Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 674

 
Leo59:

No consigo imprimir algo() en el registro del probador. ¿Cómo se hace?

Aquí está el código de OnInit() del Asesor Experto:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   SymbolSelect("EURJPY",true);
   Print(__FUNCTION__,", ",TimeToString(TimeCurrent()));
   SymbolSelect("USDJPY",true);
//---
   return(INIT_SUCCEEDED);
  }


A continuación, establezco un punto de interrupción (paso 1) y ejecuto la prueba en el historial (paso 2):

OnInit()

y en el probador obtengo el resultado:

2016.11.23 13:02:24.191 2016.06.13 00:00:00   OnInit, 2016.06.13 00:00
 

Vladimir Karputov:

A continuación, establezco un punto de interrupción (paso 1) y ejecuto una prueba histórica (paso 2):

Extrañamente, este botón azul, que señalas con el número "2", no está activo para mí. ¿Será porque estoy en MT4?
 
Pero, sin embargo, si tal cosa está escrita:


Hay restricciones en la operación de algunas funciones en el probador de estrategias del terminal del cliente.

Funciones Print() y PrintFormat()

Para aumentar el rendimiento al optimizar los parámetros de EA, las funcionesPrint() yPrintFormat() no se ejecutan. La excepción es el uso de estas funciones dentro del manejadorOnInit(). Esto nos permite facilitar la búsqueda de las causas de los errores cuando éstos se producen.


¿por qué las funcionesPrint() dentro del manejadorOnInit() no funcionan como siempre?

¿Y en general, sobre otras funciones definidas por el usuario en init() en modo de optimización?
 
Leo59:
Curiosamente, mi botón azul, que señalas con "2", no está activo. ¿Será porque estoy en MT4?

Sí, por eso puedo probar libremente cualquier EA en el HISTÓRICO, es decir, elegir un marco temporal, digamos del 2016.06.20 al 2016.11.11 y tranquilamente, paso a paso, depurar y observar los cambios en las variables, mientras que tú no puedes hacerlo.

Entonces, ¿merece la pena seguir sentado en un viejo terminal cuyo soporte ha terminado? ¿O tal vez debería utilizar el moderno MetaTrader 5? De hecho, MetaTrader 5 ya dispone decobertura: La plataforma comercial MetaTrader 5 dispone de cobertura.

 
Vladimir Karputov:

Sí, por eso puedo probar libremente cualquier EA en el HISTÓRICO, es decir, elegir un marco temporal, digamos del 2016.06.20 al 2016.11.11 y tranquilamente, paso a paso, depurar y observar los cambios en las variables, mientras que tú no puedes hacerlo.

Entonces, ¿merece la pena seguir sentado en un viejo terminal cuyo soporte ha terminado? ¿O tal vez debería utilizar el moderno MetaTrader 5? Después de todo, MetaTrader 5 ya tienecobertura: La plataforma comercial MetaTrader 5 tiene cobertura.

¿Por qué puedo realizar la depuración en MT4 y observar los cambios de las variables paso a paso? ¿Qué estoy haciendo mal?
 
Artyom Trishkin:
¿Por qué puedo depurar en MT4, y tranquilamente, paso a paso, depurar y ver cómo cambian las variables? ¿Qué estoy haciendo mal?
Qué estás haciendo mal: leer muy rápido o saltarte el texto deliberadamente.
 
¡¡¡¡Estimado!!!!

Pregunta de fondo:

¿Por qué la funciónPrint() dentro del manejadorOnInit() no funciona como siempre? Y en general, ¿qué pasa con otras funciones personalizadas en init() en modo de optimización?

 
Leo59:
¡¡¡¡Estimado!!!!

Pregunta de fondo:

¿Por qué la funciónPrint() dentro del manejadorOnInit() no funciona como siempre? Y en general, ¿qué pasa con otras funciones definidas por el usuario en init() en modo de optimización?

Todo está explicado arriba. Funcionó y funciona. Te mostré un ejemplo.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Preguntas de los principiantes

Vladimir Karputov, 2016.11.23 12:07

Aquí está el código de OnInit() de EA:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   SymbolSelect("EURJPY",true);
   Print(__FUNCTION__,", ",TimeToString(TimeCurrent()));
   SymbolSelect("USDJPY",true);
//---
   return(INIT_SUCCEEDED);
  }


Además, pongo un punto de interrupción (paso 1) y empiezo a probar el historial (paso 2):

OnInit()

Y en el probador obtengo el resultado:

2016.11.23 13:02:24.191 2016.06.13 00:00:00   OnInit, 2016.06.13 00:00

 
Vladimir Karputov:

Lo anterior ya se ha explicado. Funcionó y funciona. Y te he dado un ejemplo.


Vladimir, en tu ejemplo con breakpoint y ejecutando la prueba desde el MetaEditor, y no desde el tester en la terminal no es estándar.

Permítanme repetirlo:

1. ¿Por qué la funciónPrint() dentro del manejadorOnInit() no funciona como siempre?

2. ¿Cómo funcionan las otras funciones de usuario en init() en modo de optimización?

 
Leo59:
Vladimir, en tu ejemplo con el breakpoint y el inicio de las pruebas desde el MetaEditor, y no desde el tester en la terminal no es estándar.

Otra vez:

1. ¿Por qué la funciónPrint() dentro del manejadorOnInit() no funciona como siempre?

2. ¿Cómo funcionan las otras funciones de usuario en init() en modo de optimización?

Tengo la sensación de que nunca has encendido el terminal.

Aquí está el código del OnInit() del Asesor Experto:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   SymbolSelect("EURJPY",true);
   Print(__FUNCTION__,", ",TimeToString(TimeCurrent()));
   SymbolSelect("USDJPY",true);
//---
   return(INIT_SUCCEEDED);
  }

Paso a paso. Primer paso: iniciar el probador desde el terminal (una sola pasada), probando en el historial, con visualización:

Paso 1

En el probador de estrategias, obtenemos los siguientes resultados:

Paso 2

Razón de la queja: