![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Buon pomeriggio, Renat!
Potreste commentare la seguente situazione su FORTS (reale):
C'è un prezzo nel bicchiere con un volume di 8. Questo volume è stato fatto da due corrispondenti (4 con lo stesso prezzo)
Compro (vendo) questo volume (8)usando un ordinelimite.
Succede quanto segue:
1. Se l'ordine è completamente riempito, ottengo in OnTradeTransaction:
2. Se l'ordine è riempito con il volume del 2° corrispondente, ottengo quanto segue in OnTradeTransaction:
3. Se l'ordine viene riempito con il volume del 1° corrispondente, ottengo in OnTradeTransaction: 3:
Perché? Perché nel secondo e terzo caso l'ordine è stato eseguito parzialmente.
Ho fatto un controllo su questo ordine ed ecco il risultato:
Questo accadeva sulla build 1060 del terminale e sulla build 1035 del server.
Dopo la compensazione serale (principale) il terminale si è aggiornato a 1085, ma io
ha fermato il trading per scoprirne il motivo.
Sulla demo (1085 - 1085) non riesco a riprodurre l'errore (nessun cambiamento rapido nello stack)
"Tirato su" la storia di tutti i miei ordini.
L'errore esiste nelle build 1035, 1060 e 1085
Nel primo caso, l'ordine viene eseguito completamente in una sola operazione e il saldo non eseguito non viene rimosso, perché l'ordine è stato eseguito per l'intero volume. Nel registro, possiamo vedere una delle voci che avete menzionato:
Nel secondo caso, l'ordine viene eseguito parzialmente e il saldo non eseguito viene rimosso. Questo succede perché avete impostato la politica di esecuzione degli ordini - ORDER_FILLING_IOC:
Nel tuo caso l'ordine era per 8 lotti a 1222.1. Al momento dell'ordine, il volume dei contro-ordini a un prezzo non peggiore di 1222.1 era di 4 lotti. Di conseguenza, 4 lotti sono stati eseguiti come una sola operazione (perché 4 lotti erano rappresentati da un ordine opposto). Il resto dell'ordine è stato ritirato, cioè l'ordine è stato annullato.
Secondo i registri che avete fornito:
l'ordine è stato eseguito parzialmente:
Poi il resto è stato cancellato, cioè l'ordine è stato annullato:
Nel primo caso, l'ordine viene eseguito completamente in una sola operazione e il saldo non eseguito non viene rimosso, perché l'ordine è stato eseguito per l'intero volume. Nel registro, possiamo vedere una delle voci che avete menzionato:
Nel secondo caso, l'ordine viene eseguito parzialmente e il saldo non eseguito viene rimosso. Questo succede perché avete impostato la politica di esecuzione degli ordini - ORDER_FILLING_IOC:
Nel tuo caso, l'ordine era per 8 lotti a 1222.1. Al momento dell'ordine, c'erano 4 lotti ad un prezzo non peggiore di 1222.1. Di conseguenza, 4 lotti sono stati eseguiti come una sola operazione (perché 4 lotti erano rappresentati da un ordine opposto). Il resto dell'ordine è stato ritirato, cioè l'ordine è stato annullato.
Secondo i registri che avete fornito:
l'ordine è stato eseguito parzialmente:
Poi il saldo viene rimosso, cioè l'ordine viene cancellato:
Allora come interpretare la DOCUMENTAZIONE?
Il fatto è che onTradeTransaction non c'è nessun messaggio sul trade(TRADE_TRANSACTION_DEAL_ADD) quandoORDER_STATE_CANCELED !
Ma lo scambio è stato!
Allora come si deve interpretare la DOCUMENTAZIONE?
L'ordine è stato revocato. Il cliente può essere lasciato andare a casa.
Il fatto è che onTradeTransaction non c'è nessun messaggio di transazione(TRADE_TRANSACTION_DEAL_ADD) quandoORDER_STATE_CANCELED !
Ma la transazione è stata!
E dove hai visto PARZIALE (questo è un modo di fare)? Solo CANCELLATO!
E nella cronologia è memorizzato (vedi immagine) come CANCELLATO
Buon pomeriggio Renat!
Pensi che sia corretto che un ordine parzialmente eseguito debba essere memorizzato nella storia come un ordineORDER_STATE_CANCELED,
e in OnTradeTransaction non dovremmo avere una conferma dell'affare di un ordine parzialmente eseguito?
Ditemi, la logica attuale della piattaforma rimane così com'è o siete pronti a fare dei cambiamenti nel prossimo futuro?
Buon pomeriggio Renat!
Pensi che sia corretto che un ordine parzialmente eseguito debba essere memorizzato nella storia come un ordineORDER_STATE_CANCELED,
e in OnTradeTransaction non dovremmo avere una conferma dell'affare di un ordine parzialmente eseguito?
Ditemi, la logica attuale della piattaforma rimane così com'è o siete pronti a fare dei cambiamenti nel prossimo futuro?
Hai controllato tu stesso o hai solo reagito alle descrizioni incomplete di Mikalas? L'ordine era CIO, dopo tutto.
Ancora una volta abbiamo controllato il comportamento dalla nostra parte:
1. Installato un Expert Advisor dall'articolo Prescrizioni di MQL5 - Elaborazione degli eventi TradeTransaction.
2. Abbiamo piazzato un ordine IOC sullo strumento a bassa liquidità SILV-3.15. L'ordine è stato piazzato per vendere 11 lotti al prezzo di 16.48, mentre solo 1 lotto era disponibile a questo prezzo.
Abbiamo ottenuto quanto segue:
Nel terminale:
A parte il fatto che l'ordine è "cancellato", possiamo vedere che 1 lotto su 11 richiesti è stato eseguito, che è il comportamento corretto.
Nel registro di Expert Advisor:
Cioè la transazione sull'affare è arrivata in OnTradeTransaction(). Se la transazione non arrivasse, non la vedreste affatto nel terminale. Controlli per favore che la transazione TRADE_TRANSACTION_DEAL_ADD non sia arrivata. Confronta il comportamento del tuo EA con quello suggerito sopra dall'EA.
Buongiorno, Renat!
Non si garantisce l'arrivo dell'evento OnTradeTransaction, quindi non è arrivato (TRADE_TRANSACTION_DEAL_ADD)
E quando l'evento TRADE_TRANSACTION_HISTORY_ADD è arrivato, lo stato dell'ordine eraORDER_STATE_CANCELED
È lì che sono cresciute le "gambe".
Secondo me, se l'ordine (non importa come è stato eseguito) è stato eseguito parzialmente, allora il suo stato
dovrebbe essere registrato nella storia come ORDER_STATE_PARTIAL