Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 534

 
MikeZv:

Vladimir, grazie per la risposta alla prima domanda, mi mancavano queste caratteristiche.

Ho messo uno stesso indicatore in MT4 e in MT5 (naturalmente, il codice è adattato ad ogni piattaforma).
Fino a zero bar i loro valori sono gli stessi, quindi apparentemente da un'estremità ... :)
E quando si disabilita il calcolo sulla barra corrente in MT4 non viene disegnato nulla sotto la barra corrente, in MT5 - valori sbagliati.

Forum sul trading, sistemi di trading automatico e test di strategia

Domande dai principianti

Karputov Vladimir, 2016.03.08 15:13

... Per il debugging impostate il controllo - quale valore è contenuto nell'array delle serie temporali time[i] - in modo da capire a quale fine si inizia il calcolo delle barre e dove si ha una barra "zero".


 
MikeZv:
E come mettere un tale controllo?

In MetaEditore aggiungete un punto di interruzione e iniziate il debugging. Quando il punto di interruzione viene fermato, aggiungere time[0] all'osservazione:

Debugging

 
Karputov Vladimir:

In MetaEditore aggiungete un punto di interruzione e iniziate il debugging. Quando il punto di interruzione viene fermato, aggiungere time[0] all'osservazione:


Ho già inserito l'output nel codice

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

Inserito nel codice MT5ArraySetAsSeries(time,true);
Ora output:

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

E anche gli array di prezzi?


 
MikeZv:
Ho già messo l'output nel codice

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
Cosa devo fare adesso?

In entrambe le versioni dell'indicatore aggiungeteArraySetAsSeries- per quegli array che usate per i vostri calcoli: high[], low[] e temporaneamente per l'array time[] - vi aiuterà a capire dove si trova la barra "zero". Così, la barra "zero" in entrambe le versioni sarà sullo stesso lato del grafico (destra o sinistra - a seconda di ciò che si imposta in ArraySetAsSeries), e si otterrà la stessa parte di calcolo dell'indicatore.

Aggiunto: mentre stavo scrivendo, avete annaspato nel modo giusto :)

 
Karputov Vladimir:


Aggiunto: mentre stavo scrivendo, hai trovato il modo giusto :)

L'ho trovato, ma ancora non lo mostra correttamente. :)
L'ho incollato nel codice di MT5:
   ArraySetAsSeries(ExtCalcVlBuffer,true); 
   ArraySetAsSeries(ExtMovingBuffer,true);
   ArraySetAsSeries(ExtStdDevBuffer,true);
   ArraySetAsSeries(time,true);             
   ArraySetAsSeries(low,true);              
   ArraySetAsSeries(high,true); 

Sta uscendo:

Emette soloExtCalcVlBuffer, ma la media e la deviazione non contano...
E continua a produrre sulla barra corrente, anche se non dovrebbe.

 
MikeZv:
...

E viene ancora visualizzato sulla barra corrente, anche se non dovrebbe.

Perché non dovrebbe?
 
Karputov Vladimir:
Perché non dovrebbe?
L'ho spento i<rates_total-1
 
MikeZv:
L'ho spento i<rates_total-1
PERCHE'?!
 
Karputov Vladimir:
PERCHE'?!
Non hai bisogno di contare su quello attuale, stai solo sprecando la tua CPU, e semplicemente non hai bisogno del valore.
 
MikeZv:
Non c'è bisogno di usare il valore attuale, caricherà solo il processore invano e semplicemente non avete bisogno di questo valore.

Quindi, è necessario specificare subito una tale richiesta :) .

La situazione è la seguente: se c'è una barra nel grafico, corrisponde a una cella nel buffer dell'indicatore. Finché non scrivete qualcosa in questa cella, questa cella memorizzerà dei rifiuti.