Risposta

[Bug + Fix] L'uscita il venerdì non viene calcolata correttamente

18 risposte

geektrader

Customer, bbp_participant, community, 522 replies.

Visita il profilo

8 anni fa #114118

Questa sera ho dato un'occhiata al mio VPS e ho notato che non c'erano più operazioni in corso (tutte le mie strategie utilizzano solo ordini pendenti). Guardando nel log, ho visto che ha sempre aggiunto/aggiustato i nuovi ordini di stop ogni 30 minuti come dovrebbe fare, ma li ha cancellati direttamente dopo ogni volta.

 

Dopo un lungo debug del codice MQL4 tramite "Print", si è arrivati alla funzionalità Exit on Friday che pensava sempre che fosse già la fine del venerdì e che dovesse cancellare tutti gli ordini pendenti / chiudere tutte le operazioni attive. La funzione confronta quanto segue per determinare se è il momento giusto per uscire:

 

....else if(dow == 5 && TimeCurrent() >= StrToTime(ExitTimeOnFriday)) {

            closeActiveOrders();

            closePendingOrders();

         }

 

Dopo aver stampato "TimeCurrent()" e StrToTime(ExitTimeOnFriday)) tramite il comando "Print", il risultato è stato che "TimeCurrent()" era effettivamente più grande di "ExitTimeOnFriday", anche se il mio "ExitTimeOnFriday" è 23:57, e il server di trading MT4 che sto utilizzando (Global Prime Forex) era attualmente alle 01:34 di venerdì a quell'ora. Perché è successo questo? Semplice, non si può passare "ExTimeOnFriday" ("23:57") alla funzione "StrToTime" in questo modo, perché la funzione "StrToTime" utilizza il giorno corrente del COMPUTER LOCALE per aggiungere un giorno alle 23:57, mentre la funzione "TimeCurrent()" utilizza sempre il giorno corrente del server MT4 - e il mio computer locale ha un orario completamente diverso dal server di trading MT4, poiché si trova in un altro fuso orario. Quindi, allo stato originale, il controllo dell'uscita di venerdì mette a confronto mele e arance.

 

Per i programmatori SQ, la soluzione è questa:

 

....else if(dow == 5 && TimeCurrent() >= StrToTime(DoubleToStr(TimeYear(TimeCurrent()), 0) + "." + DoubleToStr(TimeMonth(TimeCurrent()), 0) + "." + DoubleToStr(TimeDay(TimeCurrent()), 0) + " " + ExitTimeOnFriday)) {

…..

 

In questo modo si utilizzerà sempre il giorno corrente del server MT4 (lo stesso giorno restituito da "TimeCurrent()") per calcolare l'orario dell'uscita del venerdì, invece del giorno del computer locale. In questo modo l'uscita del venerdì è sempre precisa e si può impostare l'orologio del computer locale come si vuole:)

 

 

E sì, sono ancora disponibile ad essere assunto per trovare e risolvere altri bug;)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Fluke

Abbonato, bbp_partecipante, comunità, 43 risposte.

Visita il profilo

8 anni fa #133103

Mark, con questo nuovo fix hai corrotto il codice sorgente di mql4!!! Il back test su metatrader va fuori memoria!!! per favore riparalo velocemente

0

Matusiak Adrian

Cliente, bbp_partecipante, comunità, 300 risposte.

Visita il profilo

8 anni fa #133294

BTW,

 

Questo bug è già stato risolto?

L'ultimo aggiornamento stava distruggendo il codice mql ma il prossimo aggiornamento ha risolto il file corrotto + l'uscita di venerdì?

btn_viewmy_160x33.png

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

8 anni fa #133295

Sì, l'ho scritto in un altro thread. Il problema è stato risolto con l'ultimo aggiornamento automatico.

 

Aggiungo l'aggiornamento automatico anche qui, nel caso in cui non l'abbiate confermato. È sufficiente estrarre l'archivio ZIP nella cartella principale di EA Wizard.

Marchio
Architetto StrategyQuant

0

Stai visualizzando 3 risposte - dal 16 al 18 (di 18 totali)

1 2