Backtesting/Optimización - página 82

 

Buen post sobre backtesting, precio de compra/venta:

https://www.mql5.com/en/forum/181204

 

Strategytester: LotSize Limit MT4

Hola,

¿Cómo puedo cambiar la configuración del tamaño máximo del lote en el probador de estrategias de MT$? Atm el Probador de Estrategias no abre Poticiones >50 Lotes.

¿Y hay un Límite de Balance en el Probador de Estrategias?

Apreciaría alguna ayuda. ¡Gracias!

 
lsteixeira:
Algunos datos decentes que he utilizado vienen de aquí:

Http://www.histdata.com

¡¡Salud!!

Gracias por el consejo...estoy usando tickdata de Ducas con un 99% de calidad de modelado en este momento. No puedo decir lo que se acerca a la realidad, pero espero que se acerque lo suficiente ^^.

 

[langtitle=fr]Problema con un backtest[/langtitle]

[lang=fr]Hola a todo el mundo,

Me dirijo a ustedes porque tengo un problema durante el backtest de mi EA.

Como pueden ver en el gráfico, hay una caída brutal y no sé si es así, tengo un stop loss de 10 pips.

Archivos adjuntos:
graphique.jpg  117 kb
rapport.jpg  97 kb
 

Fin normal de la parada de prueba

targetik:
[lang=fr]Bonjour tout le monde,

Me dirijo a usted porque tengo un problema durante el backtest de mi EA.

Como usted puede ver en el gráfico, hay una caída brutal y no sé si es así, tengo un tope de pérdida de 10 pips.

Hola Targettik,

Eso es un Stop-Out normal de "Fin de Probador de Estrategia"...

El probador cierra todas las operaciones abiertas cuando el probador termina... y todas sus operaciones abiertas activas suelen cerrar con una pérdida.

Yo simplemente ignoro la última operación...o reajusto las fechas para que pasen de esa operación para que se pueda cerrar correctamente...o ajusto la fecha de la última operación cerrada para no tener ninguna operación abierta al final de la prueba.

Espero que esto ayude,

Robert

 

[lang=fr]Merci beaucoup [/lang]

 

¡Gran hilo!

--

 

¿Recuperar la equidad más alta de las optimizaciones?

¿Es posible recuperar la información sobre la equidad más alta alcanzada por cada ejecución de cualquier conjunto de resultados de optimización en MT4?

Por lo que puedo decir, MT4 no proporciona información en la ventana de resultados para la equidad más alta alcanzada por una estrategia durante la prueba de espalda - ya sea en los resultados de optimización o en el informe de una sola ejecución manual a través. (Lo más cerca que llega es el drawdown $, que creo que requiere que usted sepa el valor de la depresión relevante para determinar cuál fue el pico anterior - y sólo se puede adivinar a partir del balance final). Es de suponer que el probador de la estrategia habría conocido esa cifra exacta de equidad más alta en algún momento durante sus cálculos. ¿Hay alguna forma de recuperar esos datos para los resultados de la optimización?

Se me ocurre una solución parcial. La equidad más alta alcanzada durante una sola prueba manual podría ser visto por la adición de una variable en el EA que actúa como un registro de la "marca de agua más alta" alcanzado en términos de la equidad, y luego imprimir que el diario al final de la ejecución a través de (o cuando). El problema es que la información del diario no parece estar disponible cuando la misma estrategia se ejecuta como parte de una optimización... Esto estaría bien para un pequeño número de ejecuciones manuales, pero no es adecuado para un mayor número de optimizaciones.

La única otra solución que se me ocurre es utilizar un indicador que actúe como un EA y cargarlo en el gráfico normal del terminal. Introduciendo una "hora de inicio" como variable externa podría llevar un recuento de pérdidas y ganancias (siempre que las posiciones no se abran dentro de los candeleros). Sin embargo, el problema es el mismo. Tendría que introducir manualmente las diferentes variables externas para cada ejecución diferente de las posibilidades de optimización - ¡que podrían ser muchas!

Alternativamente, usted podría colocar un tope artificial en la equidad en un EA, y luego cerrar todas las posiciones y terminar el comercio en el EA una vez que se haya alcanzado una equidad predeterminada. Entonces podría ver una lista del número de ejecuciones que terminaron en ese valor en los resultados de las optimizaciones. Sin embargo, no se sabría a partir de esto si alguna ejecución determinada habría llegado a una equidad más alta a menos que se ejecute un gran número de ejecuciones con diferentes topes de equidad. Sin embargo, esto parece una solución muy torpe e ineficiente.

(Incluso el poder ver un simple gráfico del saldo frente al número de operaciones sería un comienzo - pero eso tampoco parece estar disponible en las optimizaciones).

¿Alguien conoce un método mejor que funcione de manera más eficiente para las optimizaciones?

 

Creo que acabo de encontrar la respuesta a mi propia pregunta, así que voy a publicar aquí en caso de que alguien todavía quiere saber la respuesta.

Una solución es utilizar las variables globales(Variables globales - Documentación MQL4). Resulta que las variables globales se establecen o actualizan durante cada ejecución de una optimización. Me refiero a las variables globales de todo el terminal del cliente aquí, no sólo las "variables globales" dentro de un EA. Ya que la variable es global, usted puede consultarla usando algo fuera del Probador de Estrategias. Usted podría simplemente añadir una variable normal (doble) dentro del EA que se actualiza a sí mismo a la equidad más alta cada vez tic, a continuación, establecer una variable global a ese valor en el deinit () sección de ese mismo EA. Esta variable global podría entonces ser consultada usando GlobalVariableGet() en un script en una ventana de gráfico normal en la terminal una vez que cada pase de la optimización es completado, y el valor resultante podría ser mostrado como un Comentario o registrado en el diario de la terminal usando Print.

El único problema con este enfoque es que usted tendría que ejecutar manualmente la secuencia de comandos después de cada ejecución a través de cada pase en la optimización (antes de la próxima ejecución a través completado) - por lo que todavía tendría que sentarse y ver las optimizaciones. No creo que se pueda utilizar un EA para consultar la variable global, porque el EA tendría que ejecutarse varias veces para capturar múltiples ejecuciones de la optimización. Lo más probable es que usted no estaría recibiendo ningún ticks durante una optimización, porque sería desconectado de los datos en vivo con el fin de preservar su configuración de propagación. Supongo que los diversos métodos para enviar "ticks falsos" al EA no funcionarían DESDE una ejecución de optimización hasta el gráfico normal de la terminal...

Esto es menos problemático si está utilizando una cuenta con un tamaño de spread estable, en cuyo caso podría ejecutar las optimizaciones mientras está conectado a los datos en vivo entrantes, sin demasiado riesgo de cambiar los datos del spread. Sin embargo, seguiría siendo un problema si quisiera optimizar durante el fin de semana. Además, si su siguiente pase de optimización se completara antes de que se recibiera un nuevo tick, los datos del último pase no se registrarían.

Usted podría evitar esto estableciendo una variable global SEPARADA con cada pase de la optimización, y luego leerlos todos al final presionando F3. Eso podría hacerse con una operación de ciclo en el deinit() para recuperar el número actual de variables globales ("n"), y luego nombrar la variable global actual "n+1", y establecerla al valor de equidad relevante. De esta manera se podrían ver todas al final pulsando F3, y el nombre de la variable sería el mismo que el número de la pasada de la ejecución (siempre y cuando no hubiera variables globales en existencia al inicio de la optimización - lo que se puede lograr fácilmente ejecutando un script con GlobalVariablesDeleteAll() antes de cada optimización). No estoy seguro de cuál es el número máximo de variables globales - pero mientras tengas un número razonable de optimizaciones debería estar bien, supongo. Por desgracia, no creo que los datos de presionar F3 es exportable, por lo que tendría que copiar hacia abajo usando una tapa de la pantalla o un buen viejo lápiz y papel (o simplemente tener una instalación de MT4 por separado para cada optimización si usted está usando un estupendo número de pases). Supongo que usted podría escribir un script para imprimir todos los nombres y valores de las variables globales en el diario de la terminal después de la optimización se ha completado, y luego exportar ese diario.

Este método, por supuesto, podría utilizarse para recuperar casi cualquier dato de las optimizaciones, en lugar de tener que depender de la información limitada de la ventana de resultados de optimización del Probador de Estrategias. Espero que esto ayude a alguien :-)

 

p.d. - Acabo de darme cuenta de que tanto Print como Alert sólo permiten 64 caracteres, por lo que no podrías escribir un script para imprimir las variables globales si estuvieras usando más que un puñado de optimizaciones. (A no ser que imprimieras cada variable global en una línea separada del diario de la terminal, y luego hicieras clic y las copiaras todas una a una en Excel o similar. No parece haber una manera de seleccionar más de una entrada en el diario en cualquier momento).

Para evitar esto, podría usar una operación de ciclo para escribir los valores de cada una de las variables globales en secuencia en una cadena masiva (usando \n para colocar cada valor de la variable global en una nueva línea), y luego enviar por correo electrónico esa cadena a usted mismo usando SendMail(). No parece haber un límite en el número de caracteres en Send Mail. Puede copiar fácilmente estos datos de correo electrónico a un documento de texto en su ordenador, y utilizar el botón DataImport External Data en Excel para importar esos datos en el formato que desee. Si también copia los resultados de la optimización en un documento de texto, y luego los importa a Excel utilizando el mismo método (seleccionando "Delimitado" en la primera pantalla, luego marcando la casilla de "Otros" y escribiendo "=" en esa casilla de entrada para separar el texto de los números), puede entonces simplemente alinear los datos de su correo electrónico con los datos exportados directamente de la optimización. De esta manera, tendrá cualquier información que haya extraído de la optimización utilizando variables globales en la misma fila que los datos relevantes exportados de la optimización para cualquier pase. Es muy sencillo.