OnTradeTransaction - pagina 7

 
Aleksey Mavrin:

Forse OnTrade, da quanto ho capito viene generato nel terminale stesso in base alle transazioni.

O stai dicendo che una nuova posizione aperta può non essere rilevata nel gestore OnTrade quando viene attivato un ordine pendente?

In qualsiasi funzione On. In questo senso, c'è un buco in MT5. È improbabile che lo rattoppino.

 
fxsaber:

In qualsiasi funzione On. In questo senso, c'è un buco nella MT5. È improbabile che lo rattoppino.

Se è così, è un peccato. Si perde praticamente il senso di OnTrade. Dovremo controllare. Idealmente, OnTrade dovrebbe essere chiamato circa quante volte quando l'ordine viene attivato:

per le fermate:

- viene creato e inviato un ordine di mercato

- l'ordine in sospeso è stato spostato nella cronologia

- l'ordine è stato eseguito, un affare è stato registrato

- l'ordine di mercato è stato spostato nella storia

- posizione creata

per l'ordine Limit:

- ordine limite attivato transazione scritta

- l'ordine in sospeso è stato spostato nella storia

- la posizione è stata creata

Supponendo quest'ultima, dovrebbe esserci già una posizione e non le precedenti, è logico che non ci sia, eh?

Ho chiamato delle funzioni per controllare tutti gli stati di trading - compravendite, posizioni e ordini - in OnTrade. Finora tutto sembra funzionare bene, ma non ho avuto scambi troppo complessi.

 
fxsaber:

Perché sono venuto nel forum, ci sono così tanti problemi irrisolti))

Grazie, darò un'occhiata. Pur avendo letto quello evidenziato, penso che non sia un problema ma una caratteristica. Nei database, e in generale, il concetto di transazione e significa che TUTTI

necessario per eseguire una query e mantenere la correttezza del database è fatto, e dopo la transazione può lavorare con il database, non ci saranno errori.

Se una qualsiasi azione (e anche per scrivere una riga in una qualsiasi tabella a volte è necessario farne più di una e assicurarsi che le precedenti siano state fatte con successo)

Le modifiche vengono annullate e la transazione viene respinta. Dove sto andando con questo, probabilmente, non ci si dovrebbe aspettare da MT il livello di DBMS :)

Qui tutte le operazioni intermedie devono essere guardate e controllate, di nuovo da qualche parte dà più flessibilità.

Ma tutto mi sembra bello - prima, il server dice che l'ordine è fatto e il terminale lo cancella nell'archivio, poi (più tardi) il server dice che ha aperto una posizione e potrebbe non aprirsi a causa di qualche errore, allora dovrebbe essere zero-zero.

Lo controllerò e riporterò i risultati in dettaglio.

 
Aleksey Mavrin:

Ma tutto ha senso per me - il server prima segnala che l'ordine è stato eseguito, il terminale lo cancella nell'archivio, poi (più tardi) il server segnala che ha aperto una posizione

L'ordine non è nella storia e non è tra quelli attuali. E non c'è nessuna posizione. In altre parole, non c'è niente.

 
Aleksey Mavrin:

Ma tutto ha senso per me - il server prima segnala che l'ordine è stato eseguito, il terminale lo cancella nell'archivio, poi (più tardi) il server segnala che ha aperto una posizione, ma potrebbe non aprirsi a causa di qualche errore, allora dovrebbe essere zero-zero.

Non posso dire su questo forum o altrove ho letto i post di admin Renat (probabilmente Quick forum), ma sembra che abbia scritto che l'unico controllo che l'ordine passa sul server è quello di fornire i requisiti di margine, poi l'ordine "vola" attraverso il connettore alla borsa, quindi l'incertezza di esecuzione dell'ordine, in linea di principio e possibile, il server non sa a che prezzo l'ordine è stato eseguito

 
Oltre all'esempio dato da fxsaber, in pratica c'è anche un caso in cui c'è un ticket sia tra gli ordini che tra le posizioni aperte. la situazione dura anche per diversi millisecondi (non controllato nelle ultime build, però). il meccanismo di controllo deve essere diverso, quindi preparatevi in anticipo :)
 
Igor Zakharov:
A parte l'esempio dato da fxsaber, in pratica c'è un caso in cui c'è un ticket sia tra gli ordini che tra le posizioni aperte. anche questa situazione dura diversi millisecondi (non controllato nelle ultime build, però). il meccanismo di controllo dovrebbe essere diverso, quindi preparatevi in anticipo :)

Questa situazione è gestita in modo tale che per gli EA MT4 tutto rimane lo stesso in MT5 come in MT4. Ma con gli ordini fantasma - dobbiamo scriverlo.

 

Sui robot "normali", il caso che ho descritto, non ci ho fatto caso per niente; ma in un caso mi è stato chiesto di fare un sistema di sicurezza: la condizione era che le posizioni fossero sempre bloccate (o con posizioni reali o con un ordine pendente), cioè il numero di lotti di acquisto è uguale al numero di lotti di vendita. Questo è il caso che mi ha introdotto alle sfumature dell'ordine/posizione/conteggio delle transazioni in un fiver.

La differenza, come mi sono spiegato :) è che il quattro, quando riceve una risposta dal broker, prima sincronizza le sue "tabelle" con gli ordini aperti e lo storico, e poi informa l'utente della risposta del broker. Il cinque trasmette immediatamente questa risposta a noi, e allo stesso tempo corregge le sue "tabelle" (e tutti i programmi mql leggono i dati da queste "tabelle"). Questo è il momento che prendiamo sul timer dei millisecondi. Ma allora, perché non lo prendiamo nel tester?

In generale, l'ho sopportato...

 
Igor Zakharov:

Sui robot "normali", il caso che ho descritto, non ci ho fatto caso per niente; ma in un caso mi è stato chiesto di fare un sistema di sicurezza: la condizione era che le posizioni fossero sempre bloccate (o con posizioni reali o con un ordine pendente), cioè il numero di lotti di acquisto è uguale al numero di lotti di vendita. Questo è il caso che mi ha introdotto alle sfumature dell'ordine/posizione/conteggio delle transazioni in un fiver.

La differenza, come mi sono spiegato :) è che il quattro, quando riceve una risposta dal broker, prima sincronizza le sue "tabelle" con gli ordini aperti e lo storico, e poi informa l'utente della risposta del broker. Il cinque trasmette immediatamente questa risposta a noi, e allo stesso tempo corregge le sue "tabelle" (e tutti i programmi mql leggono i dati da queste "tabelle"). Questo è il momento che prendiamo sul timer dei millisecondi. Ma allora, perché non lo prendiamo nel tester?

In generale, ho fatto la mia pace mentale...

No, le cose vanno peggio.

L'ordine al momento della trasformazione da pendente (o a mercato) in un ordine storico (eseguito o cancellato) scompare dal terminale per un certo tempo. 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 viene inserita nell'altra.

Motivazione: