Errori, bug, domande - pagina 74

 

Mentre testavo l'Expert Advisor, mi sono imbattuto per caso nella funzione Sleep() nel tester che credo non funzioni correttamente. Il punto è il seguente:

l'Expert Advisor chiude tutte le posizioni alle 23:00 se il profitto totale è superiore a quello specificato (la funzione CloseAll()). Dopo la chiusura della posizione successiva, viene introdotto un ritardo di 10 secondi da Sleep(10000).

Ecco cosa abbiamo nel registro:

FP 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 CloseAll Profit: 3030.66
JD 0 Trade 04:31:04 vendita istantanea 0,80 EURAUD a 1,56474 (1,56474 / 1,56558 / 1,56474)
JH 0 Trades 04:31:04 affare #85 vendere 0.80 EURAUD a 1.56474 fatto (basato sull'ordine #85)
HL 0 Trade 04:31:04 operazione eseguita [#85 vendere 0.80 EURAUD a 1.56474]
HI 0 Commercio 04:31:04 ordine eseguito vendere 0,80 EURAUD a 1,56474 [#85 vendere 0,80 EURAUD a 1,56474]
QE 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 posizione da EURAUD da chiudere
PN 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
FG 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 Dormi 10 cek.
RO 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
QD 0 Trade 04:31:04 comprare 1.00 USDJPY a 90.444 (90.417 / 90.444 / 90.417)
NS 0 Trades 04:31:04 deal #86 buy 1.00 USDJPY at 90.444 done (based on order #86)
MJ 0 Commercio 04:31:04 operazione eseguita [#86 comprare 1.00 USDJPY a 90.444]
JS 0 Trade 04:31:04 ordine eseguito compra 1.00 a 90.444 [#86 compra 1.00 USDJPY a 90.444]
JL 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 posizione di USDJPY da chiudere
JI 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
PN 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 Dormi 10 cek.
DF 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
QN 0 Trade 04:31:04 comprare 0,80 AUDUSD a 0,90001 (0,89967 / 0,90001 / 0,89967)
IH 0 Trades 04:31:04 deal #87 buy 0.80 AUDUSD at 0.90001 done (based on order #87)
KQ 0 Commercio 04:31:04 affare eseguito [#87 comprare 0,80 AUDUSD a 0,90001]
RL 0 Trade 04:31:04 ordine eseguito comprare 0,80 a 0,90001 [#87 comprare 0,80 AUDUSD a 0,90001]
EG 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 posizione di AUDUSD da chiudere
LP 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0
JI 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 Dormi 10 cek.

NQ 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 23:0:0

Come possiamo vedere, il tempo prima e dopo il ritardo è lo stesso. Ma succede solo se TimeCurrent() == 0.

In caso contrario, lo slittamento funziona bene. Per esempio:

MD 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 CloseAll Profit: 3382.28
KQ 0 Trade 04:30:39 ET 0,70 EURUSD a 1,44090 (1,44090 / 1,44108 / 1,44090)
IE 0 Trades 04:30:39 deal #27 sell 0.70 EURUSD at 1.44090 done (based on order #27)
CI 0 Commercio 04:30:39 operazione eseguita [#27 vendere 0,70 EURUSD a 1,44090]
EL 0 Trade 04:30:39 ordine eseguito vendere 0,70 a 1,44090 [#27 vendere 0,70 EURUSD a 1,44090]
DH 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39
JR 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:7
MK 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 Dormi 10 cek.
EP 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:15
DE 0 Trade 04:30:39 ET 0,80 AUDUSD a 0,91951 (0,91951 / 0,91993 / 0,91951)
CJ 0 Trades 04:30:39 affare #28 vendere 0.80 AUDUSD a 0.91951 fatto (basato sull'ordine #28)
HR 0 Commercio 04:30:39 affare eseguito [#28 vendere 0,80 AUDUSD a 0,91951]
HH 0 Trade 04:30:39 ordine eseguito vendere 0,80 AUDUSD a 0,91951 [#28 vendere 0,80 AUDUSD a 0,91951]
LS 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 AUDUSD da chiudere
QL 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:15
ED 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 10 cek Sleep.
LO 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:25
DD 0 Trade 04:30:39 comprare 0.60 EURAUD a 1.56727 (1.56632 / 1.56727 / 1.56632)
LN 0 Trades 04:30:39 deal #29 buy 0.60 EURAUD at 1.56727 done (based on order #29)
FK 0 Trade 04:30:39 operazione eseguita [#29 compra 0.60 EURAUD a 1.56727]
IR 0 Trade 04:30:39 ordine eseguito comprare 0.60 a 1.56727 [#29 comprare 0.60 EURAUD a 1.56727]
RM 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 posizione di EURAUD da chiudere
FE 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:25
GN 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 Dormi 10 cek.

QE 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:35

Codice per chiudere una posizione:

if(m_trade[j].PositionClose(m_symbol[j].Name()))
           {
            PosCloseCount--;
            printf("Position by %s to be closed",m_symbol[j].Name());
            MqlDateTime  dt_struct;
            TimeCurrent(dt_struct);
            printf("%u:%u:%u",dt_struct.hour,dt_struct.min,dt_struct.sec);
            Sleep(10000);
            Print("Sleep 10 cek.");
            TimeCurrent(dt_struct);
            printf("%u:%u:%u",dt_struct.hour,dt_struct.min,dt_struct.sec);
           }

Chiamata alla funzione CloseAll:

   MqlDateTime  dt_struct;
   TimeCurrent(dt_struct);
   if(dt_struct.hour==2 3 && m_account.Profit()>InpProfitToClose)
     {
      Trade=false;Print("CloseAll Profit: ",m_account.Profit());
      while(PositionsTotal()>0)
         CloseAll();

Se cambiamo la condizione in

if(dt_struct.hour==23 && dt_struct.min>0 && m_account.Profit()>InpProfitToClose)
non c'è nessun errore.
Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Общие функции / Sleep - Документация по MQL5
 
joo:
Quindi, il mio messaggio non è vano, come ho già pensato?

Sì, abbiamo corretto il comportamento di StringToTime, grazie.

 
Valmars:

Mentre testavo l'Expert Advisor, mi sono imbattuto per caso nella funzione Sleep() nel tester che credo non funzioni correttamente. Il punto è il seguente:

Molto interessante. Vediamo.
 
Apro la scheda "News" e c'è... - è la notizia sbagliata. Mi manca qualcosa?
 
x100intraday:
Apro la scheda "News" e c'è... - è la notizia sbagliata. Mi manca qualcosa?

Imposta le lingue in cui vuoi ricevere le notizie.


 
Rosh:

Imposta le lingue in cui vuoi ricevere le notizie.


Non lo è. È un po' cosparso di "notizie" del forum mt5, non ha niente a che fare con le notizie sul forex. Non solo gli aggiornamenti pro-auto di recente, ma ho scaricato di nuovo la distribuzione mt5 e l'ho installata, ormai è passata quasi una settimana. Non so come fosse durante la settimana, perché non sono andato nella scheda "News", ma l'ho scoperto ora:

Strane notizie finanziarie

 
x100intraday:

Non lo è. È un po' cosparso di "notizie" del forum mt5, non ha niente a che fare con le notizie del forex. Non l'ho solo pro-auto-uploadato di recente, ho scaricato di nuovo la distribuzione mt5 e l'ho installata, ormai è passata quasi una settimana. Non so come fosse durante la settimana, perché non sono entrato nella scheda "News", ma l'ho scoperto ora:

Questo è il nostro server demo che trasmette le notizie di MQL5.com al posto delle notizie forex mancanti (non abbiamo il diritto di distribuire notizie gratuite da altri).

Se non vuoi vederle, basta deselezionare la casella appropriata nella sezione delle categorie di notizie del menu del clic destro.

 

Dopo l'aggiornamento automatico, l'EA precedentemente funzionante ha iniziato a dare messaggi che non poteva copiare le serie temporali. Il problema è stato risolto scaricando l'EA e caricandolo di nuovo. Domanda: questo risultato dell'aggiornamento automatico deve essere atteso sempre o è un errore terminale, che sarà eliminato?

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
Yedelkin:

Dopo l'aggiornamento automatico, l'EA precedentemente funzionante ha iniziato a dare messaggi che non poteva copiare le serie temporali. Il problema è stato risolto scaricando l'EA e caricandolo di nuovo. Domanda: questo risultato dell'aggiornamento automatico deve essere atteso sempre o è un errore terminale, che sarà eliminato?

Si prega di fornire maggiori dettagli (log, screenshot, ecc.).

Senza questo, non è possibile dare una risposta informata.

 
Renat:

Fornisci più dettagli (log, screenshot, ecc.), per favore.

Senza questo, è impossibile dare una risposta ragionevole.

OK. Conto demo sul server MQ, file di log allegato (2010729.log), l'ora di inizio dell'aggiornamento automatico è 20:54, alle 22:36 ho cancellato io stesso Expert Advisor e l'ho caricato un minuto dopo.

C'è un semplice controllo del tipo in EA:

if(CopyHigh(Symbol(),0,0,bars,high)<bars || CopyClose(Symbol(),0,0,bars,close)<bars || CopyLow(Symbol(),0,0,bars,low)<bars || CopyTime(Symbol(),0,0,bars,time)<bars)
  {
   Print("Can't copy timeseries!");
   return;
  }

Di conseguenza, dopo i messaggi di aggiornamento automatico è andato (file 20100729copy.log). In generale, questo si è verificato prima, ma in qualche modo non ha prestato attenzione.

Dopo aver ricaricato l'Expert Advisor, sono scomparse anche le linee dei prezzi di apertura e di stop-loss nel grafico.

Posso aggiungere qualcos'altro a ciò che è stato detto?

Motivazione: