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
Ho ragione?
Andrey l'ha spiegato molto bene.
Forum sul trading, sistemi di trading automatico e test di strategia
OnTradeTransaction
Andrey Khatimlianskii, 2019.12.17 08:24
No, le cose vanno peggio.
L'ordine al momento della trasformazione da pendente (o a mercato) a storico (eseguito o cancellato) per qualche tempo scompare del tutto dal terminale. Non appare né tra i mercati pendenti (o "iniziati"), né tra quelli storici.
Quindi non è una questione di esecuzione, ma di sincronizzazione di queste due tabelle. La risposta dal server è arrivata ("Ordine eseguito, generato transazione così e così"), viene rimossa da una tabella, ma non inserita nell'altra.
Il problema non è OrderSend. C'è stato BuyLimit per molto tempo. E improvvisamente e Buy-positions non si trovano più da nessuna parte. Questa è più o meno la stessa situazione che si verifica.
Andrei ha scritto bene.
Non si tratta di OrderSend. È stato BuyLimit per molto tempo. E all'improvviso non si trova più né la posizione di Buy. È all'incirca la stessa situazione che si verifica.
Non proprio.
Ho capito. Anche l'ordine di mercato è nella lista degli ordini correnti da un po' di tempo (ma sembra che non sia visualizzato nel terminale nella scheda di commercio?
Poi, quando l'ordine è stato eseguito e una transazione corrispondente dal server è stata ricevuta, il terminale esegue le seguenti azioni
1. cancellare l'ordine dalla corrente
2. scrivere l'ordine in storico
3. scrivere il mestiere alla lista
4. scrivere la posizione nella lista
e considerando che l'Expert Advisor e il terminale stesso lavorano in flussi paralleli indipendenti, il terminale non sarà ancora in grado di aprire una posizione se lo richiedete entro questo breve periodo di tempo.
posizione, non ci sarà ancora. Come ho scritto prima, se questo avvenisse secondo gli standard DBMS, non ci sarebbe una cosa del genere, perché tutte e 4 le operazioni sarebbero combinate in un'unica transazione, e non si potrebbe rimanere intrappolati in "stati intermedi".
Giusto? Ma in realtà sono interessato - se ci basiamo su OnTrade e OnTradeTransaction, allora non ci dovrebbe essere alcun ritardo in questi gestori, essi avvengono creando cambiamenti nelle tabelle corrispondenti, giusto?
O Terminal li invia semplicemente a Expert Advisor quando riceve eventi e cambia le tabelle allo stesso tempo? In quest'ultimo caso, ovviamente, è sbagliato e deve essere corretto, soprattutto se OnTradeTransaction, da cui si potrebbero ottenere le informazioni effettive, non è garantito.
Capito. Anche l'ordine di mercato è presente nella lista degli ordini correnti per un po' (solo che sembra che non sia visualizzato nella scheda di trading nel terminale?)
A volte lo si può anche vedere lì con i propri occhi nello stato di partenza. Ed è facile da seguire con un robot.
E considerando che l'Expert Advisor e il terminale stesso operano in flussi paralleli indipendenti, la situazione è la seguente: se si richiede una posizione entro questo breve periodo di tempo, essa non apparirà.
Non ci riferiamo alle posizioni ma solo agli ordini.
Abbiamo bisogno di molto meno tempo per aggiungere una voce alla tabella rispetto a quello che otteniamo a volte. E non sono serio, non c'è alcuna garanzia che avremo il giusto ambiente commerciale.
E in effetti mi chiedevo - se ci basiamo su OnTrade e OnTradeTransaction, allora questi gestori non dovrebbero avere lag, perché accadono quando i cambiamenti sono scritti nelle tabelle appropriate?
O Terminal li invia semplicemente a Expert Advisor quando riceve eventi e cambia le tabelle allo stesso tempo? In quest'ultimo caso, ovviamente, è sbagliato e deve essere corretto, soprattutto se OnTradeTransaction, da cui si potrebbero ottenere informazioni reali, non è garantito.
OnTrade nella sua forma pura non aiuta.
È possibile combinare anche l'attesa della sincronizzazione della tabella degli ordini, è una questione di gusti. Ma devi ancora aspettare.
Per quanto riguarda l'"ordine perso", che non è nella lista degli ordini attuali o storici: penso che non sia un bug, dobbiamo solo guardare attentamente le caratteristiche del Terminal-Server MT-Market (nel caso di esecuzione istantanea il mercato è fuori). Penso che il terminale invii un ordine di mercato, nel caso della funzione sincrona aspetta e riceve una risposta dal server. Se non c'è errore la risposta può essere solo TRADE_RETCODE_DONE (in caso di esecuzione istantanea ci sono requotes, ma finora è l'ordine di mercato) che in realtà significa che il server ha inviato l'ordine al mercato e aspetta una risposta. Lo stato dell'ordine in questo momento è ORDER_STATE_STARTED se non mi sbaglio e il suo biglietto è noto. Se l'ordine viene eseguito, il server invia OnTradeTransaction al terminale e lo stato dell'ordine cambia in ORDER_STATE_FILLED e la transazione e la posizione sono note. Solo in questo momento il terminale registra l'ordine nella storia.
Il mercato non c'entra niente.
Il server MetaTrader invia l'ordine all'ECN o da qualche altra parte, riceve la risposta e la invia al terminale. E nel terminale la tempistica è sbagliata.