Errori, bug, domande - pagina 438

 
joo:
Forse la semplice presenza di Sleep (rispetto alla sua assenza) nel codice influenza in qualche modo il tempo di esecuzione complessivo, ma il fatto che Sleep non conta nel tester - questo è sicuro.
Beh, non sono un esperto qui... Mezzo minuto di ritardo nell'elaborazione della funzione Sleep() con un argomento negativo e la perdita di 17 giorni di test - questi sono i fatti.
 

Il codice blocca il terminale:

   MqlRates s1[];

   int count=TerminalInfoInteger(TERMINAL_MAXBARS);
   int s1_copied=CopyRates(Symbol(),Period(),0,count,s1);
   if(s1_copied<=0)
      Print("Ошибка копирования ценовых данных ",GetLastError());
   else Print("Скопировано ",ArraySize(s1)," баров");

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

   ArrayFree(s1);

Qual è la ragione?

 
Graff:

Il codice blocca il terminale:

Qual è la ragione?

Per cominciare:
 int count=TerminalInfoInteger(TERMINAL_MAXBARS);
 Print("count=",count);

Il terminale non è impostato su Unlim?

 
uncleVic:
Per cominciare:

Unlim non è nelle impostazioni del terminale?


le barre massime sono impostate a 5000. questo valore può essere ridotto?
 
Graff:
le barre massime sono 5000. questo valore può essere ridotto?

Non credo che si possa fare di meno (non ne sono sicuro).

Cosa mostra Print(count)?

 
uncleVic:

Non credo che sia possibile meno (non ne sono sicuro).

Bene, cosa restituisce Print(count)?

2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) 5000 barre copiate
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

nel commento -1

Ho provato con un altro simbolo ma non è apparso nel commento -1

NOTA: congelare dopo qualche secondo. Inizio il codice da int OnInit()

 
joo:
Sì, e funziona nel tester, perché Sleep viene ignorato nel tester.

Il sonno è completamente e accuratamente emulato nello Sleep tester.

Nell'esempio, a causa di un overflow aritmetico quando si tratta di valori interi, c'era solo un'attesa di 17,5 giorni. Il tester ha aspettato esattamente quel tempo.

Quindi, non c'è nessun errore nel tester o nell'ambiente di esecuzione MQL5, ma c'è un errore evidente fatto dal programmatore.

 

Renat:

Cioè, non c'è un errore del tester o dell'ambiente di esecuzione MQL5, ma c'è un chiaro errore del programmatore.

È abbastanza chiaro.

Renat:

Il sonno è emulato nel tester in modo completo e abbastanza accurato.

A causa dell'overflow aritmetico quando si lavora con valori interi il tempo di attesa è di 17,5 giorni. Questo è esattamente il tempo che il tester ha aspettato.

Hmm, ecco qui. E ho erroneamente pensato che Sleep fosse semplicemente ignorato.

Risulta che se io, per esempio, impostassi Sleep (3 mesi) in Expert Advisor in modalità test, il tester farebbe semplicemente avanzare velocemente la storia per 3 mesi? - È fantastico.

 
Sì, si riavvolgerà. Solo il limite della funzione è di 49 giorni, finché il contatore di millisecondi è pieno.

Durante il periodo di attesa il tester continua a emulare completamente l'ambiente di trading, compresa tutta l'elaborazione degli ordini precedentemente piazzati. Il tester di MT5 è molto dettagliato.
 
Graff:
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) 5000 barre copiate
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

nel commento -1

Ho provato con un altro simbolo ma non è apparso nel commento -1

NOTA: congelare dopo qualche secondo. Eseguirò il codice da int OnInit()

Sì, non abbiamo nemmeno notato l'elefante.

Questa linea mi rende molto sospettoso:

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

ArrayMaximum

cerca l'elemento massimo in una matrice numerica unidimensionale.

intArrayMaximum(
doppioarray[],// array da cercare
intstart=0//da quale indice iniziamo la ricerca
intcount=WHOLE_ARRAY,// numero di indici da controllare
);


e nel nostro caso:

   MqlRates s1[];

Penso che il compilatore non dovrebbe saltare questo. Che cosa avete? Neanche un avvertimento? In caso contrario, fate una richiesta al Service Desk. Ok?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
Motivazione: