OnTradeTransaction - pagina 9

 
Aleksey Mavrin:

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.

 
fxsaber:

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.


Artyom Trishkin:
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.

 
Aleksey Mavrin:

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.


Aleksey Mavrin:

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.


Aleksey Mavrin:

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.

 
Aleksey Mavrin:

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.