El indicador se corrompe - página 5

 
Rosh:

¿A qué te refieres con corrupciones? Acabo de adjuntar su indicador en EURUSD M1 y no veo ningún valor.


El terminal de cliente de 32 bits MetaTrader 4 muestra la misma imagen. ¿Está seguro de que ese indicador proporcionado funciona?
 
Rosh:

El terminal de cliente de 32 bits MetaTrader 4 zapatos de la misma imagen. Estás seguro de que ese indicador proporcionado funciona?
Parece que has descargado la versión original del código de ejemplo (timestamped 2011.10.11 18:06). Eso no dibuja nada durante 25 minutos. En init(), establece drawTime a TimeCurrent(), y sólo activa cualquier código en start() una vez (drawTime + 1500 < TimeCurrent()).

La segunda versión, con fecha 2011.10.12 06:37, parece que debería empezar a dibujar inmediatamente.

Pero, de todos modos, los problemas aparentemente no empiezan a ocurrir hasta pasadas varias horas.
 
jjc:
Parece que has descargado la versión original del código de ejemplo (con fecha de 2011.10.11 18:06). Eso no dibuja nada durante 25 minutos.
Ok, voy a esperar
 

El terminal de cliente de 32 bits MetaTrader 4 muestra la misma imagen. ¿Está seguro de que el indicador proporcionado funciona?

- Sí. Estoy ejecutando el mismo indicador en una máquina de 32 bits también, desde anoche, aproximadamente 18 horas. El problema no se produce.

Si desea otro posible error de MT4 para perseguir, ¿qué sucede si usted utiliza Low[i] y High[i] en lugar de iLow() y iHigh() ?

- En mi código actual se utilizan iHighest / iHigh / iLowest / iLow etc.. Usé High/Low en el código de ejemplo para reducir la complejidad

 
RaptorUK:
Tengo una idea . . pero tengo que salir ahora, he añadido el Indicador a un nuevo gráfico, voy a probar mi idea cuando vuelva y publicar los resultados.

OK, acabo de regresar, el gráfico se veía bien desde que cargué el Indicador por primera vez... entonces probé mi idea... Me Paged Up para mover el gráfico a la derecha de modo que los nuevos datos se descargan . y hey presto . .

Esto es lo que sugerí en este hilo en 2011.10.07 19:08

 
RaptorUK:

OK, acabo de regresar, el gráfico se veía bien desde que cargué el Indicador por primera vez... entonces probé mi idea... Me Paged Up para mover el gráfico a la derecha de modo que los nuevos datos se descargan . y hey presto . .

Vale, ¿así que tienes la hipótesis de que el historial de barras está cambiando por alguna razón, y se está rellenando de nuevo, y el indicador se está viendo afectado porque sólo dibuja hacia delante y no sigue el comportamiento habitual de los indicadores de recalcular en base a cosas como IndicatorCounted()?
 
jjc:
Vale, ¿así que estás planteando la hipótesis de que el historial de barras está cambiando por alguna razón, y se está rellenando de nuevo, y el indicador se está viendo afectado porque sólo dibuja hacia delante y no sigue el comportamiento habitual de los indicadores de recalcular en base a cosas como IndicatorCounted()?
No he mirado el código reciente . . pero sí, algo parecido a lo que has escrito.
 
RaptorUK:
No he mirado el código reciente . . pero sí, algo parecido a lo que has escrito.

Bien, en resumen, lo que parece que tenemos es lo siguiente

* Un indicador normal utilizará IndicatorCounted() para determinar qué valores de barra están "sucios" y necesitan ser (re)calculados.

* Cuando se añaden barras adicionales al historial desplazándose hacia atrás, IndicatorCounted() se pone a cero. Por lo tanto, en este punto, un indicador normal recalculará todos sus valores históricos.

* El indicador aquí no hace esto. En efecto, ignora IndicatorCounted() y dibuja sólo hacia adelante.

* Por alguna razón, la máquina Win64 de AnkaSoftware está rellenando periódicamente con datos más antiguos pero la máquina Win32 no. El sistema operativo es probablemente una coincidencia en este contexto.

* Es un poco travieso que MT4 no ajuste los buffers de los indicadores a la luz de las nuevas barras que se han añadido, y en su lugar confíe en que el código del indicador recalcule todos los valores antiguos porque IndicatorCounted() se reinicia. (Sin embargo, es razonablemente justificable, porque la adición de valores de barras antiguas a muchos indicadores afecta potencialmente a los cálculos posteriores. Por ejemplo, un EMA cambiará, aunque por un valor minúsculo, si se añade una barra más al principio del historial).

 
jjc:

* Es un poco pícaro que MT4 no ajuste los buffers de los indicadores en función de las nuevas barras que se han añadido, y en su lugar confíe en que el código del indicador recalcule todos los valores antiguos porque IndicatorCounted() se reinicia.

En realidad, pensándolo bien, eso es incorrecto. Hay una buena razón por la que MT4 trata de decirle al indicador que recalcule todo, y ese escenario bien podría estar aplicándose aquí.

Digamos que el indicador ha estado funcionando durante un tiempo, pero luego hay una desconexión del broker que dura varias barras. En la reconexión, MT4 recibirá un tick y comenzará a dibujar los valores del indicador para la última barra. De forma separada, asíncrona y más lenta, recibirá los datos históricos de las barras que faltan y que tuvieron lugar durante la desconexión. Estos se insertan en medio del historial de barras, por lo que es necesario que cualquier indicador normal vuelva a dibujar los valores antiguos a partir de, al menos, el principio del periodo de desconexión. En la práctica, es comprensible que MT4 adopte el enfoque de "redibujar todo". La única objeción es si MT4 debería cambiar automáticamente los valores del buffer a EMPTY_VALUE si son potencialmente inválidos.
 

¿Este problema afecta SOLO a los indicadores?

¿Qué pasa con otros, por ejemplo High[], low[], o iHigh, iLow, iLowest, iBarshift, etc, etc...., eso es lo que prefiero saber y tener claro.

Razón de la queja: