MetaTrader 4 Build 529 beta rilasciato con un nuovo compilatore - pagina 39

 
Out of range indica inequivocabilmente un errore nel codice - andare fuori dall'array. La stringa e la posizione dell'errore sono indicate lì, quindi cercate l'errore.
 

Ecco il codice.


datetime   prevtime0 = 0;
double prevVolume0 =0;
double prevClose0 =0;
void init()
{
   Print("_______Test init");
   prevtime0 = iTime(NULL,PERIOD_M1,0); 
   prevVolume0 = iVolume(NULL,PERIOD_M1,0);
   prevClose0 = iClose(NULL,PERIOD_M1,0);
}

void start()
{
  Print(" prevtime0!!!!! = ",prevtime0," iTime(NULL,PERIOD_M1,0) =",iTime(NULL,PERIOD_M1,0) );
  Print(" prevVolume0!!!!! = ",prevVolume0," iVolume(NULL,PERIOD_M1,0) =",iVolume(NULL,PERIOD_M1,0) );
  Print(" prevClose0!!!!! = ",prevClose0," iClose(NULL,PERIOD_M1,0) =",iClose(NULL,PERIOD_M1,0) );
  Print("");

  prevtime0 = iTime(NULL,PERIOD_M1,0); 
  prevVolume0 = iVolume(NULL,PERIOD_M1,0);
  prevClose0 = iClose(NULL,PERIOD_M1,0);

}

Ecco il risultato dell'esecuzione nel terminale Versione 4.0 Build 536

2013.11.11 22:53:08 Test EURJPY,M1: prevClose0!!!!! = 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevVolume0!!!!! = 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevtime0!!!!! = 2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 Test EURJPY,M1:
2013.11.11 22:52:25 Test EURJPY,M1: prevClose0!!!!! = 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevVolume0!!!!! = 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevtime0!!!!! =2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

Come potete vedere né iClose, né iVolume, né iTime cambiano.

Presumo di sì, e lo stesso vale per le altre funzioni che iniziano per i.

Inoltre, la funzione iVolume in questo esempio mostra chiaramente non Volume.

Allo stesso tempo nel tester, tutto funziona e cambia tranne iVolume. Anche lì non funziona.

Nota.

 
thecore:

Ecco il codice.


Ecco il risultato dell'esecuzione nel terminale Versione 4.0 Build 536

2013.11.11 22:53:08 Test EURJPY,M1: prevClose0!!!!! =133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevVolume0!!!!! =133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevtime0!!!!! =2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 Test EURJPY,M1:
2013.11.11 22:52:25 Test EURJPY,M1: prevClose0!!!!! =133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevVolume0!!!!! =133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevtime0!!!!! =2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

Come potete vedere né iClose, né iVolume, né iTime cambiano.

Presumo che anche le altre funzioni che iniziano con i non cambino.

Inoltre, la funzione iVolume in questo esempio mostra chiaramente non Volume.

Allo stesso tempo nel tester, tutto funziona e cambia tranne iVolume. Anche lì non funziona.

Nota.

Beh, l'ho fatto. Cosa c'è che non va?
 
tara:
Beh, l'ho fatto. Cosa c'è che non va?


Giusto...

La funzione iTime(NULL,PERIOD_M1,0) dà il tempo sbagliato dal terminale a sinistra.

Terminal dà 2013.11.11 22:53:08, iTime dà 2013.11.11 22:38:00, e dovrebbe dare

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0) dovrebbe restituire qualche intero, per esempio 1, 2, 3, 100, non

come in questo esempio 133.02

iClose dovrebbe dare 133,02 nel primo caso, e 133,03 nel secondo.

 

Tutte queste funzioni lavorano un po' diversamente, minuto per minuto. La vostra stampa funziona in ticchettii. Il tempo in MT è contato in secondi.

E il secondo terminale, in generale, a sinistra :)

 
tara:

Tutte queste funzioni lavorano un po' diversamente, minuto per minuto. La vostra stampa funziona in ticchettii. Il tempo in MT è contato in secondi.

E il secondo terminale, in generale, a sinistra :)

Senti, capisco che non hai nessuno con cui parlare la sera.

So che il verbale, ecco perché nella stampa del risultato e mostrato SPECIALE

due risultati a minuti diversi.

E poi, questo messaggio non era per voi, ma per gli sviluppatori.

 
thecore:

iVolume(NULL,PERIOD_M1,0) dovrebbe restituire un intero, per esempio 1, 2, 3, 100, ma non

come in questo esempio 133.02

Sembra che iVolume restituisca davvero l'ultimo prezzo(prezzo di chiusura) invece del volume.

Ma sono stato abbastanza divertito dalla descrizione della guida (la prima è dal file, e la seconda è presa dal sito web)

1

datetime  iVolume(
   string           symbol,          // символ
   int              timeframe,       // период
   int              shift            // сдвиг
   );

2

double iVolume(string symbol, int timeframe, int shift)
 
thecore:


Giusto...

La funzione iTime(NULL,PERIOD_M1,0) dà il tempo sbagliato dal terminale a sinistra.

Il terminale mostra 2013.11.11 22:53:08, iTime mostra 2013.11.11 22:38:00 e dovrebbe mostrare

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0) dovrebbe restituire qualche intero, per esempio 1, 2, 3, 100, non

come in questo esempio 133.02

iClose dovrebbe produrre 133,02 nel primo caso, e 133,03 nel secondo.


Provate a usare RefreshRates(), OnTick ha lo stesso problema, il tempo e i prezzi non vengono aggiornati nel tester, ma quando si usa RefreshRates() tutto è ok ...
 
Altri due problemi con gli indicatori, consultate il Service Desk!
 
thecore:

Come potete vedere, né iClose, né iVolume, né iTime cambiano.

Suppongo che neanche le altre funzioni che iniziano per i lo facciano.

Inoltre, la funzione iVolume in questo esempio mostra chiaramente non Volume.


Corretto. Grazie