Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 70

Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Come identificare una sostituzione della carta?
fxsaber, 2018.02.08 12:39
Il parametro di input ChartID zero in alcune funzioni non causa il ricalcolo dei valori. Se volete i dati reali del grafico corrente, dovete usare l'ID completo.
Forum sul trading, sistemi di trading automatico e test di strategia
POSIZIONE_TICKET != POSIZIONE_IDENTIFICATORE
fxsaber, 2018.02.12 20:14
Conclusioni
Se assumiamo che questo sia un comportamento normale di MT5 e non una peculiarità dell'hack del broker, allora
Punti di debolezza
ZZY Ipotesi pienamente confermata.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
POSIZIONE_TICKET != POSIZIONE_IDENTIFICATORE
Pavel Kolchin, 2018.02.12 13:31
(non sono sicuro, difficile da controllare, simile alla chiusura parziale della posizione)
Tutto funziona così:
1) ordine pendente attivato parzialmente - la posizione con Position_ID = Order_Ticket1 è aperta
2) il resto dell'ordine è formato in un nuovo ordine Order_Ticket2 ed è in attesa della sua esecuzione; il nuovo Order_Ticket2 != Order_Ticket1 perché non ci possono essere due ordini nella storia con lo stesso Order_Ticket
3) l'ordine rimanente è stato eseguito - viene aperta una posizione con Position_ID = Order_Ticket2
ci sono due ordini nella storia, due posizioni nel terminale, tutto corrisponde
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Discussione su "LifeHack per trader: mescolare ForEach sulle definizioni (#define)"
fxsaber, 2018.02.14 10:54
Misurazione delle prestazioni
Risultato
Mi sbagliavo completamente! SymbolInfoDouble è due volte più lento di SymbolInfoTick.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Discussione su "LifeHack per trader: mescolare ForEach sulle definizioni (#define)"
fxsaber, 2018.02.14 11:58
Incompetente. Risultato in Tester.
Dove la performance è necessaria (Optimizer), è meglio usare SymbolInfoDouble. Nel mondo reale non fa alcuna differenza.
ZZY La misurazione della velocità della funzione deve essere misurata in un ambiente in cui le prestazioni sono importanti - Tester.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Bug, bug, domande
fxsaber, 2018.02.12 23:10
Aprire la posizione BUY a mano su due server demo di trading
RoboForex-MetaTrader 5
FXOpen-MT5
Le linee dello stesso colore indicano la stessa cosa. Tuttavia, si vede chiaramente che sono in ordine diverso. Per Robo, il messaggio sull'esecuzione dell'ordine arriva dopo l'esecuzione del trade. In aperto viene PRIMA! Per questo motivo OrderSend restituisce fortuna ma nessuna transazione ancora. Cioè otteniamo OrderSend non sincronizzato con la storia
Codice per FXOpen-MT5
Risultato
Questa situazione ha la seguente spiegazione
Forum sul trading, sistemi di trading automatico e test di strategia
Bug, bug, domande
Rashid Umarov, 2018.02.15 06:25
Se un ordine viene inviato a un sistema di trading esterno, il server di trading MetaTrader 5 non aspetta una risposta da esso e restituisce immediatamente il risultato della richiesta come "ordine piazzato". Per questo motivo, OrderSend restituirà sempre deal=0, dato che non ci sono ancora informazioni sulla transazione eseguita. Prendilo in OnTrade o OnTradeTransaction.
Un esempio di ascoltatore di eventi commerciali è dato nell'articolo Dove iniziare quando si crea un robot di trading per MOEX - TradeTransactionListener.mq5
OrderSend - invia un ordine per eseguire una compravendita sul mercato. L'ordine viene piazzato- dobbiamo leggere Result.order. Ma nessuno aspetta l'affare o gli affari - ce ne possono essere molti e il tempo totale della loro esecuzione non è definito.
Dipende dall'implementazione specifica dell'uscita dal lato del broker. Nel caso generale non è definito.
Quindi, consiglio vivamente di utilizzare il conto demo su FXOpen-MT5 come test per il vostro codice, perché si distingue dalle altre demo.
Per esempio, suggerisco di provare a scrivere uno script in MQL5 con questa logica di trading (stile MQL4 solo per una rapida visualizzazione del senso)
Non è affatto facile. Raccomando anche il server demo menzionato per lavorare sull'esecuzione parziale.
Cancellato un post che dava una spiegazione di uno degli errori più comuni su MT5.
Il post era grande. Non mi aspettavo di essere cancellato. Mi piacerebbe sentire il motivo della rimozione. Perché è masochistico farsi cancellare di nuovo.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Organizzare un ciclo di ordini
fxsaber, 2018.02.16 09:40
Non va tutto bene in MT5. Esempio che mostra il problema
Pensate che se eseguite questo script su un simbolo senza posizioni, cosa succederà?
La risposta corretta è che una o due posizioni saranno aperte.
Il motivo per cui questo accade. Dopo il primo OrderSend, appare un ordine a mercato e se un nuovo tick arriva prima del momento della sua esecuzione, non c'è ancora una posizione e viene effettuato il secondo OrderSend.
A causa di questo, un modello MT5 apparentemente normalenon funzionerà correttamente e, di conseguenza, la maggior parte degli Expert Advisors MT5 in codobase. Allo stesso tempo il modello MT4 quasi identico continuerà a funzionare senza problemi.
L'idea apparentemente buona di PositionsTotal è in qualche modo oscurata dalla necessità in MT5 di analizzare anche OrdersTotal per gli ordini a mercato.
Fate attenzione!
A causa di questo, un modello MT5 apparentemente normalenon funzionerà correttamente e, di conseguenza, la maggior parte degli EA MT5 in kodobase.
Come prova di questa affermazione possiamo prendere quasi ogni Expert Advisor nel kodobase MT5. Non scegliamo qualcosa ma prendiamo l'ultimo Expert Advisor del momento. È un bene che sia stato scritto da un autore con una grande esperienza nella pubblicazione di MT5 in QB.
Il codice sorgente ha le seguenti stringhe (i miei commenti sono evidenziati)
Abbiamo una situazione identica a quella descritta sopra.
Forum sul trading, sistemi di trading automatico e test di strategia
Peculiarità del linguaggio mql5, consigli e trucchi
fxsaber, 2018.02.16 19:52
Dopo il primo OrderSend appare un ordine a mercato e se un nuovo tick arriva prima della sua esecuzione allora non c'è ancora una posizione e viene fatto un secondo OrderSend.
L'idea apparentemente buona di PositionsTotal è in qualche modo oscurata dalla necessità in MT5 di analizzare anche OrdersTotal per gli ordini a mercato.
Significa che nel caso generale, invece di una posizione l'Expert Advisor ne aprirà due, tre, ecc. A seconda della frequenza di ricezione dei tick e della durata di esecuzione degli ordini di mercato.
Poiché quasi tutti gli EA MT5 in kodobase sono scritti con la stessa logica del modello MT5, hanno anche lo stesso bug che è contenuto in esso. Questo è vero per quasi tutti gli EA MT5 in KB, purtroppo.
Su un netting ci può essere una posizione aperta e diversi ordini di mercato di entrambe le direzioni sullo stesso simbolo allo stesso tempo. Per esempio, una posizione BUY e un ordine BUY. È vero, non sono riuscito a trovare un tale conto demo, perché c'era una regola con asincronia ovunque
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Bug, bug, domande
fxsaber, 2018.02.14 08:58
L'intera sequenza di eventi OnTradeTransaction viene dopo il completamento di OrderSend.
EA
Inviare manualmente un ordine di compravendita.
Log
2018.02.14 09:41:46.671 '8854170': instant sell 1.00 EURUSD at 1.23673 2018.02.14 09:41:46.853 '8854170': accepted instant sell 1.00 EURUSD at 1.23673 2018.02.14 09:41:46.853 '8854170': deal #192088422 sell 1.00 EURUSD at 1.23673 done (based on order #208541700) 2018.02.14 09:41:46.853 '8854170': order #208541700 sell 1.00 / 1.00 EURUSD at 1.23673 done in 190.608 ms
Risultato di Expert Advisor
Possiamo vedere perfettamente dalla colonna del tempo e dai dati numerici dell'EA che la durata dell'esecuzione dell'ordine di compravendita non ha alcun effetto sulla sequenza degli eventi OnTradeTransaction. Tutta l'asincronia va all'inferno! Sono riusciti a rovinare tutto così male. Costruire 1755.
Per esempio, quando l'ordine a mercato OrderSendAsync viene piazzato nel terminale, l'ordine a mercato non apparirà nemmeno per un momento. Forse gli sviluppatori hanno deciso di farlo per accelerare un po' le cose.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Discussione dell'articolo "Visualizzare l'ottimizzazione della strategia commerciale in MetaTrader 5"
fxsaber, 2018.02.22 08:39
In modalità frame, OnInit, OnDeinit, OnTick, OnTrade, OnTradeTransaction e OnTimer sono ignorati. Solo OnChartEvent funziona.
Naturalmente, a causa dell'eccezione OnChartEvent, richiede un controllo obbligatorio per il flag frame-mode.