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.
... 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".
In MetaEditore aggiungete un punto di interruzione e iniziate il debugging. Quando il punto di interruzione viene fermato, aggiungere time[0] all'osservazione:
In MetaEditore aggiungete un punto di interruzione e iniziate il debugging. Quando il punto di interruzione viene fermato, aggiungere time[0] all'osservazione:
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 :)
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.
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".
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:
In MetaEditore aggiungete un punto di interruzione e iniziate il debugging. Quando il punto di interruzione viene fermato, aggiungere time[0] all'osservazione:
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?
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
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 :)
Aggiunto: mentre stavo scrivendo, hai trovato il modo giusto :)
L'ho incollato nel codice di MT5:
Sta uscendo:
Emette soloExtCalcVlBuffer, ma la media e la deviazione non contano...
E continua a produrre sulla barra corrente, anche se non dovrebbe.
...
E viene ancora visualizzato sulla barra corrente, anche se non dovrebbe.
Perché non dovrebbe?
L'ho spento i<rates_total-1
PERCHE'?!
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.