Dalla teoria alla pratica - pagina 227

 
Maxim Dmitrievsky:

perché dovete controllare prima il risultato dell'esecuzione dell'operazione, e poi controllare il totale dell'ordine

L'autore ha diversi EA identici che lavorano in modo asincrono, ognuno sul grafico della propria coppia e, apparentemente, non comunicano tra loro. Pertanto, può accadere che un EA abbia inviato un ordine per aprire una posizione e la risposta non è ancora arrivata, cioè, la posizione non è ancora aperta (OrdersTotal()==0). Poi anche un altro EA (forse più di uno) invia una richiesta di trading, e come risultato, 2 o più posizioni si aprono contemporaneamente. L'idea è che per evitare tali sovrapposizioni, dovremmo impostare una bandiera (una variabile globale del terminale) e leggerla quando si invia il primo ordine di trading da altri Expert Advisors.

Ma tali situazioni possono verificarsi abbastanza frequentemente, soprattutto nelle notizie in cui molte coppie fanno salti bruschi quasi sincronicamente.

 
Alexander Sevastyanov:

L'autore ha diversi EAs dello stesso tipo, ognuno è sul grafico della propria coppia, e apparentemente, non comunicano tra loro. Pertanto, ci possono essere momenti in cui un EA ha inviato un ordine di trading per aprire una posizione e l'ordine è in fase di elaborazione o la risposta non è ancora arrivata, cioè, la posizione non è ancora aperta (OrdersTotal()==0). Poi un altro EA (e forse più di uno) invia anche una richiesta di trade, e come risultato, 2 o più posizioni si aprono contemporaneamente. L'idea è che per evitare tali sovrapposizioni, dovremmo impostare una bandiera (una variabile globale del terminale) e leggerla quando si invia il primo ordine di trading da altri Expert Advisors.

Queste situazioni possono accadere di nuovo, specialmente nelle notizie quando molte coppie stanno facendo salti bruschi.

Non ho visto specificato che ci deve essere solo 1 scambio alla volta, ho pensato che ci devono essere diverse aperture per 1 simbolo

 
Alexander Sevastyanov:

L'autore ha diversi EA dello stesso tipo, ognuno è sul grafico della propria coppia, e apparentemente, non comunicano tra loro. Pertanto, ci possono essere momenti in cui un EA ha inviato un ordine di trading per aprire una posizione e l'ordine è in fase di elaborazione o la risposta non è ancora arrivata, cioè, la posizione non è ancora aperta (OrdersTotal()==0). Poi un altro EA (e forse più di uno) invia anche una richiesta di trade, e come risultato, 2 o più posizioni si aprono contemporaneamente. L'idea è che per evitare tali problemi, dovremmo impostare una bandiera (una variabile globale del terminale) e leggerla quando si invia il primo ordine di trading da altri Expert Advisors.

È esattamente quello che è, Alexander.

Ora sto leggendo attentamente il ramo e tutte le raccomandazioni per risolvere questo problema. Perché sono terrorizzato da quello che succederà se si aprono i trade contemporaneamente su tutte le 32 coppie... Certo, non dovrebbe essere così.

 
Alexander_K2:

...leggendo ora il thread e tutte le raccomandazioni per risolvere questo problema. Perché ho paura di pensare a cosa accadrà se si aprono scambi su tutte le 32 coppie contemporaneamente... Certo, non dovrebbe essere così.

Se avete bisogno di aiuto, non esitate a contattarmi.

A proposito, il ritardo nell'apertura di una posizione è costituito principalmente dal doppio ping (avanti e indietro) e dal tempo di elaborazione di un ordine di trading da parte del server. I buoni broker che non sovraccaricano i server reali e hanno un buon canale di comunicazione con i fornitori di liquidità hanno un tempo di elaborazione degli ordini di trading di unità di millisecondi. Il ping può essere significativamente ridotto da centinaia di millisecondi a unità ospitando l'Expert Advisor su un server VPS. Potete vedere il tempo totale impiegato per inviare un ordine di compravendita, elaborarlo e ottenere una risposta dal server nel log di MT4.

 
Alexander Sevastyanov:

Se avete bisogno di aiuto, non esitate a contattarci.

Oh, a proposito, il ritardo nell'aprire una posizione è composto principalmente dal doppio ping (andata e ritorno) e dal tempo di elaborazione del server. I buoni broker che non sovraccaricano i server reali e hanno un buon canale di connessione con i fornitori di liquidità hanno tempi di elaborazione degli ordini di trading di unità di millisecondi. Il ping può essere significativamente ridotto da centinaia di millisecondi a unità ospitando l'Expert Advisor su un server VPS. Potete vedere il tempo totale impiegato per inviare un ordine di compravendita, elaborarlo e ottenere una risposta dal server nel log di MT4.

non ci sono broker come questo nel forex, decine di millisecondi minimo, media 200, con zero ping

 
Maxim Dmitrievsky:

Non ho visto specificato che ci deve essere solo 1 commercio alla volta, ho pensato che ci devono essere diverse aperture per 1 strumento

Questo bug può verificarsi anche in un simbolo se il thread precedente non ha finito l'esecuzione ed è arrivato un nuovo tick - allora c'è una situazione indefinita di lettura e scrittura di dati reali...
 
Andrei:
Questo bug può verificarsi anche per un singolo strumento se il thread precedente non ha finito l'esecuzione e arriva un nuovo tick - allora c'è una situazione indefinita di scrittura e lettura di dati reali...

No, non c'è una situazione del genere, salta i tick fino a quando tutta la logica viene elaborata

 
Maxim Dmitrievsky:

No, non ci sono situazioni del genere, l'ontica salta i tick fino a quando tutta la logica è stata elaborata

È quello che ho pensato anch'io...

 
Andrei:

Stavo pensando la stessa cosa...

Non lo so, non è mai successo, ho fatto trading con un sacco di broker di scalping su mt4 e mt5

 
Maxim Dmitrievsky:

Non lo so, non l'ho mai fatto, ho fatto trading con un mucchio di broker di scalping su mt4 e mt5

Come avete controllato? Ho controllato solo su mt4...