Il grande e terribile MT4 per sempre (o come strategizzare una transizione) - pagina 12

 
Andrey Khatimlianskii:

Sarebbe bello aggirare questo punto a livello di MT4Orders.

I backup degli ordini stanno avvenendo ora, purtroppo. Molto probabilmente a causa di questo.

https://www.mql5.com/ru/forum/93352/page40#comment_13943845?

 
traveller00:

https://www.mql5.com/ru/forum/93352/page40#comment_13943845?

Sfortunatamente, il backtracking avviene anche con questa stampella.

Non so più da che parte fare il debug.

 
Andrey Khatimlianskii:

Sfortunatamente, il backtracking avviene anche con questa stampella.

Non so più da che parte fare il debug.

Ecco la ragione (non che non ce ne siano altre).

        // Открытие руками единственной позиции.

        1
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        2
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        3
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        4
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        5
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        6 // Полностью исчез открывающий позицию ордер - его нет ни в одной таблице. Позиции так и нет.
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        ----------------
        7 // Ордер появился в исторической таблице. Позиции так и нет.
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 58 
        ----------------
        8 // Появилась позиция и сделка.
        PositionsTotal() = 1 OrdersTotal() = 0 HistoryDealsTotal() = 58 HistoryOrdersTotal() = 58 
        #2249767032 2021.05.04 02:10:01.124 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22769 -0.02 0.00 -0.05 0
        ----------------

P.6 è il più sgradevole. Come aggirare questo bug di MT5 - non l'ho capito.

 
fxsaber:

Ecco la ragione (non che non ce ne siano altre).

P.6. è il più sgradevole. Come aggirare questo bug di MT5 - non l'ho capito.

Il controllo degli ordini "mancanti" funzionerebbe qui. Ma non funzionerebbe.

Devo aver sbagliato qualcosa.

 
Andrey Khatimlianskii:

Un controllo dell'ordine mancante funzionerebbe qui. Non funziona.

Anch'io devo aver fatto qualcosa di sbagliato.

Al punto 7. "L'ordine mancante appare, ma non c'è ancora una posizione.

 
fxsaber:

Al punto 7. Il "missing" viene trovato, ma la posizione è ancora mancante.

Significa che il ciclo su MT4Orders::OrdersTotal() non vedrà né l'ordine né la posizione?

Pensavo che questo punto fosse risolto: o l'ordine/posizione è nella lista, o l'ordine è "mancante". Come può accadere una terza cosa?

 
Andrey Khatimlianskii:

Questo significa che il ciclo MT4Orders::OrdersTotal() non vedrà né l'ordine né la posizione?

In tutti i punti, tranne il punto 6 e il punto 7, mostra che una posizione è visibile.

Pensavo che questo punto fosse appena risolto: o l'ordine/posizione è nella lista, o l'ordine è "mancante". Come può esserci un terzo?

Immaginate che il vostro EA raggiunga la posizione 6 senza sapere nulla del fatto che c'era un ordine. In questo caso non c'è modo per lui di sapere che la situazione corrisponde all'ordine mancante.

Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода)
Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода)
  • 2021.05.03
  • www.mql5.com
Хочу затронуть самую что ни на есть щекотливую тему терминалов МТ4 и МТ5. Их влияние и популярность среди пользователей и брокеров / ДЦ...
 
fxsaber:

Immaginate che il vostro EA arrivi al punto 6 senza sapere nulla dell'esistenza di un ordine. In questo caso non c'è modo per lui di sapere che la situazione corrisponde all'ordine mancante.

Non posso immaginare una tale situazione se i limiti sono utilizzati a una certa distanza dal prezzo (non nello spread).

Avrà sempre il tempo di vedere l'ordine del set nella lista. E successivamente l'ordine diventerà "mancante", o si trasformerà in una posizione.


Ammetto che una tale situazione è possibile se un altro EA ha lanciato un ordine al prezzo corrente e questo ha iniziato immediatamente a riempirsi (punto 6).

Ma questo ancora non spiega perché il primo EA smette di vedere il suo ordine (con il suo mago) nella lista di MT4Orders::OrdersTotal().

 

È stato sorprendentemente facile riprodurre la situazione su un EA live - nel momento in cui uno degli ordini è stato eseguito, l'EA ha perso di vista anche l'altro.

Ma quando si cerca di costruire un semplice esempio per la riproduzione, tutto funziona bene. Sembra che io abbia davvero creato un bug da qualche parte nei meandri del mio codice.

 

Ecco dalla documentazione:

"l'ordine in cui queste transazioni arrivano nel terminale non è garantito, quindi non potete basare il vostro algoritmo di trading sull'attesa che alcune transazioni commerciali arrivino dopo che altre sono arrivate. " https://www.mql5.com/ru/docs/event_handlers/ontradetransaction

E per esperienza, le transazioni TRADE_TRANSACTION_ORDER_DELETE, TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_HISTORY_ADD possono arrivare in qualsiasi ordine.

Quindi, abbiamo situazioni in cui non c'è ancora un accordo o un ordine nella storia, ma l'ordine esiste già. O viceversa, l'ordine è ancora lì, ma l'affare è già stato eseguito. Ma la situazione in cui l'ordine è contemporaneamente nell'attivo e nella storia è difficilmente possibile.

In realtà, questo è il motivo per cui abbiamo rifiutato di usare la classe CTrade- ha tutte queste insidie.

Il modo per combattere questo problema è che ogni EA tiene una lista dei suoi ordini e controlla il loro stato. Compresi gli stati "non standard" - "ordine inviato ma non ancora funzionante" (qui possono raddoppiare) o "ordine cancellato ma non ancora nella storia". Aiuta anche a lavorare sullo stesso simbolo allo stesso tempo quando si fa il netting.

Документация по MQL5: Обработка событий / OnTradeTransaction
Документация по MQL5: Обработка событий / OnTradeTransaction
  • www.mql5.com
OnTradeTransaction - Обработка событий - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Motivazione: