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

 
MikeZv:

Vladimir, gracias por la respuesta a la primera pregunta, echaba de menos estas características.

Pongo un mismo indicador en MT4 y en MT5 (por supuesto, el código se adapta a cada plataforma).
Hasta la barra cero sus valores son los mismos, así que aparentemente desde un extremo... :)
Y al desactivar el cálculo en la barra actual en MT4 no se dibuja nada bajo la barra actual, en MT5 - valores erróneos.

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

Preguntas de los principiantes

Karputov Vladimir, 2016.03.08 15:13

... Para la depuración, establezca la comprobación - qué valor está contenido en la matriz de la serie de tiempo time[i] - para que entienda en qué extremo comienza el cálculo de las barras y dónde tiene una barra "cero".


 
MikeZv:
¿Y cómo se pone ese control?

En MetaEditore añada un punto de interrupción y comience a depurar. Cuando el punto de interrupción se detiene, añade el tiempo[0] a la observación:

Depuración

 
Karputov Vladimir:

En MetaEditore añada un punto de interrupción y comience a depurar. Cuando el punto de interrupción se detiene, añade el tiempo[0] a la observación:


Ya he insertado la salida en el código

MT4 2016.03.08 18:37:04.710 mvt_Vlt EURUSD,H1: time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 1971.01.04 00:00:00

MT5 2016.03.08 18:36:23.565 mvt_Vlt (EURUSD,H1) time[0] = 2010.01.04 00:00:00 time[rates_total-1] = 2016.03.08 17:00:00

Insertado en el código de MT5ArraySetAsSeries(time,true);
Ahora la salida:

MT5 2016.03.08 18:45:05.402 mvt_Vlt (EURUSD,H1) time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 2010.01.04 00:00:00

¿Y hacer matrices de precios también?


 
MikeZv:
Ya he puesto la salida en el código

MT4 2016.03.08 18:37:04.710 mvt_Vlt EURUSD,H1: time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 1971.01.04 00:00

MT5 2016.03.08 18:36:23.565 mvt_Vlt (EURUSD,H1) time[0] = 2010.01.04 00:00:00 time[rates_total-1] = 2016.03.08 17:00:00
¿Qué hago ahora?

En ambas versiones del indicador añadaArraySetAsSeries- para aquellas matrices que utilice para sus cálculos: high[], low[] y temporalmente para la matriz time[] - le ayudará a entender dónde está la barra "cero". Así, la barra "cero" en ambas versiones estará en el mismo lado del gráfico (a la derecha o a la izquierda - dependiendo de lo que establezca en ArraySetAsSeries), y obtendrá la misma parte de cálculo del indicador.

Añadido: mientras escribía, has tanteado el camino correcto :)

 
Karputov Vladimir:


Añadido: mientras escribía, has encontrado el camino correcto :)

Lo he encontrado, pero sigue sin mostrarlo correctamente. :)
Lo he pegado en el código de MT5:
   ArraySetAsSeries(ExtCalcVlBuffer,true); 
   ArraySetAsSeries(ExtMovingBuffer,true);
   ArraySetAsSeries(ExtStdDevBuffer,true);
   ArraySetAsSeries(time,true);             
   ArraySetAsSeries(low,true);              
   ArraySetAsSeries(high,true); 

Está saliendo:

Sóloda salida a ExtCalcVlBuffer, pero la media y la desviación no cuentan...
Y sigue saliendo en la barra actual, aunque no debería.

 
MikeZv:
...

Y sigue apareciendo en la barra de corriente, aunque no debería.

¿Por qué no habría de hacerlo?
 
Karputov Vladimir:
¿Por qué no habría de hacerlo?
Lo desactivé i< rates_total-1
 
MikeZv:
Lo desactivé i< rates_total-1
¿POR QUÉ?
 
Karputov Vladimir:
¿POR QUÉ?
Y no es necesario contar con el actual, es sólo una pérdida de tiempo de la CPU, y simplemente no necesita el valor.
 
MikeZv:
No es necesario utilizar el valor actual, sólo cargará el procesador en vano y simplemente no necesita este valor.

Hay que especificar eso de inmediato :) .

La situación es la siguiente: si hay una barra en el gráfico, corresponde a una celda en el buffer del indicador. Mientras no escribas algo en esta celda, esta celda almacenará basura.