Errori, bug, domande - pagina 2107

 
Vladislav Andruschenko:

Sono d'accordo, dobbiamo cambiarlo.

C'è un ramo su questa regola.

Организация цикла перебора ордеров
Организация цикла перебора ордеров
  • 2017.09.16
  • www.mql5.com
MQL4 и MetaTrader 4: Организация цикла перебора ордеров
 
fxsaber:

C'è un ramo su questa regola.


sì, ho letto frammenti sulla funzione di accesso alla storia solo quando l'ambiente è cambiato, e ho visto i tuoi link in altri thread.

proprio al punto, l'errore è apparso dopo aver letto la vostra opzione.

 
fxsaber:

Questa è una logica sbagliata. Dopo che OrderSend fallisce e OrderSend ha successo, l'attuale ambiente di trading deve essere letto di nuovo completamente. Questa regola dovrebbe essere sempre in vigore.

Riguardo ai codici di ritorno. Non li analizzo nei miei EA. Penso che la logica del trading non dovrebbe dipendere da loro.

Teoricamente, un timeout può verificarsi durante una perdita di connessione con il server del broker.

In questo caso, è meglio non fare nulla fino a quando non viene ripristinato e l'ambiente di trading è completamente sincronizzato con il server.

Come si può evitare di trovarsi in una situazione simile senza analizzare il codice di ritorno?

 

Errore di compilazione.


File Test.mqh.

int Tmp = 1;


Codice principale

#include "Test.mqh"

void OnStart()
{
  Print(Tmp);
  Print(Tmp2); // 'Tmp2' - undeclared identifier
}

#define  Tmp Tmp2
#include "Test.mqh"


Si scopre che gli inludi ripetuti vengono ignorati. Ma è sbagliato in questa situazione!

Abbiamo bisogno di un tale costrutto per il seguente scopo. Un Expert Advisor è contenuto in un file .mqh. Ma ho bisogno di poterlo eseguire su un account reale (primo incloud) e nel mio tester (secondo incloud).

 
Andrey Khatimlianskii:

Teoricamente, un timeout può avvenire durante una perdita di comunicazione con il server del broker.

In questo caso, è meglio non fare nulla fino a quando non viene ripristinato e l'ambiente di trading è completamente sincronizzato con il server.

Come si può evitare di trovarsi in una situazione simile senza analizzare il codice di ritorno?

Abbiamo inviato un OrderSend e non abbiamo aspettato una risposta dal server, ottenendo un timeout nel log e _LastError. Ignoriamo _LastError e riceviamo solo false.

Dopodiché, se abbiamo una connessione, ricomponiamo l'ambiente di trading e prendiamo una decisione.

Naturalmente, è sempre auspicabile controllare l'ambiente selezionato prima di raccogliere le informazioni.

 
fxsaber:

Ha inviato OrderSend e non ha aspettato una risposta dal server, ottenendo un timeout nel log e _LastError. Ignoriamo _LastError e riceviamo solo false.

Dopodiché, se abbiamo una connessione, ricomponiamo l'ambiente di trading e prendiamo una decisione.

Naturalmente, è sempre auspicabile controllare l'ambiente selezionato prima di raccogliere informazioni.

Questo è possibile se stiamo lavorando con OnTick. E se non fosse così?

Come controllare la connessione?

 
Andrey Khatimlianskii:

Questo funziona se si lavora in OnTick. E se non fosse così?

Come si controlla la connessione?

TerminalInfoInteger(TERMINAL_CONNECTED);
 
fxsaber:
TerminalInfoInteger(TERMINAL_CONNECTED);

Storicamente, non mi fido. Dovrò testarlo in 5...

 

Il problema dei timeout non è che non c'è connessione, ma che la richiesta ha ricevuto un timeout.

Da un lato, la vedo così: c'è un segnale per aprire un trade, facciamo una richiesta, otteniamo un timeout - ma il trade viene aperto.

anche se l'Expert Advisor ha ricevuto un errore.

controllare l'ambiente di trading - vediamo un accordo aperto.

ma come capire che l'affare è stato aperto da questo segnale? se ci fossero ad esempio 10 segnali?

cioè controllare se un nuovo affare è apparso nella storia (nel terminale).


Non ho ancora capito l'idea

@A100

quale soluzione vede?

 
fxsaber:

Si scopre che il re-incode viene ignorato. Ma questo è sbagliato in questa situazione!

Ho bisogno di un tale costrutto per il seguente. Un Expert Advisor è contenuto in un file mqh. Ma ho bisogno di poterlo eseguire su un account reale (primo incloud) e nel mio tester (secondo incloud).

Tutto è corretto ed è correttamente ignorato.

Gli hack di Cish non passano.