Errores, fallos, preguntas - página 1998

 
Stanislav Korotky:

Este es el argumento que no entendí (cuando lo expuso MQ) y no lo entiendo ahora. La inicialización no va a ninguna parte. Ahora se confía al programador de la aplicación y éste lo hace de todas formas, pero como muestra la práctica, a veces con errores. Si lo hiciera un núcleo, el rendimiento no se vería afectado y no habría errores.

Tomemos, por ejemplo, la matriz del buffer del indicador: al inicializar el indicador, el buffer tiene una longitud cero. ¿Qué hay que inicializar con ceros? Cuando se añade otro índice, ¿se obliga a ponerlo a cero y luego a rellenarlo con algún valor? ¿Para qué sirve esta puesta a cero o relleno con EMPTY_VALUE? Y si es necesario asignar PLOT_EMPTY_VALUE y no 0 o EMPTY_VALUE o forzar uno, pero necesitamos otro... Lo mires como lo mires, acabas perdiendo el tiempo...

Y una matriz personalizada... El array se declara para algún dato distinto de cero y EMPTY_VALUE. Entonces, ¿por qué habría que inicializarlo a la fuerza con algo?

Así que resulta que afecta al rendimiento en la mayoría de los casos.

 
Alexey Viktorov:

Pero una matriz personalizada... El array se declara para algún dato distinto de cero y EMPTY_VALUE. Entonces, ¿cuál es el propósito de inicializarlo forzosamente con algo?

Para tener menos "los resultados de los probadores no coinciden".

 
fxsaber:

Para que sea menos "los resultados de las pruebas no coinciden".

¿Quién lo necesita?

Escribe un artículo que diga en cada párrafo que no hay que pedir EAs a cualquiera. Tienes que escribir tus EAs correctamente.

 
Alexey Viktorov:

¿Quién lo necesita?

Yo y, estoy bastante seguro, los desarrolladores.

 
fxsaber:

Yo y, estoy bastante seguro, los desarrolladores.

Dudo mucho que una nimiedad así te ponga en un aprieto. O eso o hay otra razón.

 
Alexey Viktorov:

Dudo mucho que una cosa tan trivial pueda dejarte perplejo. O la razón es otra.

Incluso si escribiera perfectamente (sin cometer errores - que no es el caso), es normal tomar la biblioteca de alguien (a veces sin código fuente - en el Marketplace) y usarla, esperando que esté escrita de manera competente. Y no hay seguridad de que después de eso te encuentres con resultados diferentes en el probador. Y encontrar la verdadera causa será MUY difícil. Y arreglarlo es a veces imposible.

El objetivo es que de una ejecución a otra el resultado sea reproducible, es decir, idéntico, incluso con un error.

 
fxsaber:

Probablemente la solución ideal sería forzar la inicialización para todos los programas por defecto + un interruptor de compilación para desactivarla (para los que se confíen y quieran acelerar un par de veces).

 

La inicialización realmente requiere muchos recursos. Tiré un trozo de código con inicialización forzada y obtuve casi 2 veces más rápido en la optimización)

Y me encontré con una cosa interesante. ¿Cómo es posible que el drawdown sea del 120% y al mismo tiempo el resultado esté en el top y el plus?

Cuando pruebo la estrategia obtengo un drawdown del 109% y ninguna llamada de margen, mientras que el saldo sigue creciendo.
 
Anton Ohmat:

La inicialización consume muchos recursos. Tiré un trozo de código con inicialización forzada - se aceleró en la optimización por casi 2 veces)

Algo que escribiste mal.

 
Andrey Khatimlianskii:

La inicialización completa no siempre es necesaria. Por ejemplo, para un indicador que rellena el valor del buffer para cada barra en el bucle (y lo hace independientemente de si el buffer del indicador está inicializado o no).

En este caso será más económico sin la puesta a cero forzada.

¿Y por qué inventar escenarios tan irreales, de hecho errores de programador MQL? Obviamente, la inicialización completa se realiza sólo una vez, o cuando se detecta el bombeo de datos. En este caso, sería más eficiente que lo hiciera el núcleo.

Razón de la queja: