Eseguire più di un EA alla volta - pagina 2

 

Per prima cosa, assicuratevi di aver inizializzato tutte le variabili con alcuni valori predefiniti significativi. Per esempio, state usando BuyTicket prima che sia inizializzato, quindi può essere qualsiasi valore alla prima esecuzione .

Estratto dal file di riferimento MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables):

If a variable is not initialized explicitly, the value stored in this variable can be any. Implicit initialization is not used.

Quindi, nella parte seguente aggiungete i default alle variabili:

//Global Variables
int BuyTicket;
int SellTicket;
double InternalStopLoss;
double CalcDigits;
double CalcPoint;
bool MABuyFanning;
bool MASellFanning;
int SelectedOrder;
bool Closed;
int ErrorCode;
string ErrLog;
double BuyStopLoss;
double SellStopLoss;
bool NewBar;
double ThisBarOpen;
double SmallMA;
double MediumMA;
double LargeMA; 
 

E sì, MQL4 ha bug e stranezze, ma la maggior parte degli errori potrebbe essere evitata semplicemente leggendo le basi nel manuale di riferimento.

Inoltre, c'è un articolo sui bug comuni nei programmi MQL4. Controlla in cima al forum, troverai il link.

 
drazen64:

Per prima cosa, assicuratevi di aver inizializzato tutte le variabili con alcuni valori predefiniti significativi. Per esempio, state usando BuyTicket prima che sia inizializzato, quindi può essere qualsiasi valore alla prima esecuzione .

Estratto dal file di riferimento MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables):

Quindi, nella parte seguente aggiungete i default alle variabili:



Questo è vero, tuttavia, dipende dall'uso. A volte vuoi solo dichiararlo perché sai da dove verrà preso il valore, e a volte hai bisogno di inizializzarlo con qualcosa perché potrebbe non funzionare correttamente se non viene inizializzato con valori predefiniti specifici.
 
deysmacro:

Questo è vero, tuttavia, dipende dall'uso. A volte si vuole solo dichiararla perché si sa da dove verrà preso il valore, e a volte è necessario inizializzarla con qualcosa perché potrebbe non funzionare correttamente se non viene inizializzata con specifici valori di default.


Non ha bisogno di inizializzare le variabili al posto della definizione, ma dovrebbe sicuramente inizializzare le variabili a qualche valore prima di usarle.

Se le usa prima dell'inizializzazione, il valore è imprevedibile. Così come i suoi errori. Prima di qualsiasi analisi più profonda del codice dovrebbe occuparsi di questo problema.

I compilatori moderni sollevano errori se si cerca di utilizzare variabili non inizializzate. MQL4 purtroppo non lo fa, quindi il codificatore deve essere sicuro che tutto sia correttamente inizializzato.

 
Potreste fargli notare 1 cosa che usa la var senza inizializzazioni adeguate.
 
deysmacro:
Potresti fargli notare 1 cosa che usa la var senza inizializzazioni appropriate.


Leggi la seconda frase nella prima riga di https://www.mql5.com/en/forum/151167/page2#954612

Potresti leggere la risposta prima di criticarla.

BTW, come stai aiutando qui? Le osservazioni "intelligenti" non aiutano molto.

 
for(Counter = 0; Counter <=OrdersTotal()-1; Counter++)
               {
               SelectedOrder = OrderSelect(Counter,SELECT_BY_POS);
               if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
                  {
                 // while(IsTradeContextBusy()) Sleep(10);
                  Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red);
                  if(Closed == true) BuyTicket = 0;
                  else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine");                  
                  }
            Counter--;               
                }
 

Ho letto prima di postare il mio. Voglio dire, mostragli una cosa che si riferisce alla var e quella var non è inizializzata correttamente.


Hehe. GumRai lo batte. XD

 

Se ho capito bene, stai dicendo che il fatto che usa variabili non inizializzate non è qualcosa di cui preoccuparsi solo perché non ho indicato esattamente cosa potrebbe succedere perché BuyTicket e alcune altre variabili contengono alcuni valori sconosciuti all'avvio del programma?

Bene, così sia. Lasciategli usare le variabili non inizializzate. Cosa potrebbe andare storto?

 
Ho inizializzato tutte le variabili come suggerito e ho rimosso "==true" dai booleani. Inoltre ho rimosso tutti gli spazi bancari dall'interno delle linee di codice. L'ho testato usando il debugger su due diversi simboli - uno sul portatile e uno sul PC per circa 2 ore ed entrambi hanno funzionato bene, vendendo, comprando e chiudendo al momento giusto senza alcun errore. Tuttavia poi ho aggiunto l'EA agli altri 3 simboli sia sul PC che sul portatile in modo che tutti e 4 funzionassero su entrambi i terminali e tutti hanno cominciato a perdere entrate e uscite da allora in poi. Alla fine del test, su un terminale ho rimosso gli EA prima di chiudere le posizioni aperte e sull'altro terminale ho rimosso gli EA dopo aver chiuso le posizioni aperte. Il terminale che aveva ancora posizioni aperte ha impiegato molto tempo per rimuovere gli EAs ma il terminale senza posizioni aperte ha rimosso tutti e 4 gli EAs immediatamente. Il codice rivisto è postato separatamente qui sotto.