Domanda sulla funzione OnTradeTransaction - pagina 6

 
Mikalas:

No, le transazioni non sono perse, solo che potrebbero non arrivare in una certa sequenza.

Solo TRADE_TRANSACTION_REQUEST viene sempre prima, altrimenti non si ottiene il biglietto d'ordine.

Leggete ATTENTAMENTE la documentazione.

Michael, scusa, ma mi è sembrato che tu abbia risposto solo all'ultimo post, ed è una conseguenza di tutto ciò che è stato descritto nel primo di questa pagina.

Ed è strano sentirti raccomandare di leggere la documentazione. L'ho letto, riletto e riletto ancora.

Cosa intendi per "biglietto di garanzia"? Non lo vedo nella documentazione.

 
AlexeyVik:

Michael, mi dispiace, ma mi è sembrato che tu abbia risposto solo all'ultimo post, ed è stato come conseguenza di tutto quello descritto nel primo di questa pagina.

E sembra strano sentire la tua raccomandazione di leggere la documentazione. L'ho letto, riletto e riletto ancora.

Cosa intendi per "biglietto d'ordine"? Non l'ho visto nella documentazione.

Un biglietto ulong è un numero unico che viene assegnato a un ordine.

Questo numero non cambierà per tutta la durata dell'ordine così come nella storia.

Otteniamo informazioni sull'ordine usando tikcet.

 
Mikalas:

Un biglietto ulong è un numero unico che viene assegnato a un ordine effettuato.

Questo numero non cambia per tutta la durata dell'ordine, così come nella storia.

Otteniamo informazioni sull'ordine usando tikcet.

Grazie Mikhail. In realtà, ho pensato che tu intendessi il biglietto dell'ordine. Ma avrebbe dovuto essere più preciso.


Ma comunque, il comportamento dei biglietti è abbastanza strano.

Esempio: biglietti e volumi da eseguire nel tester.

Apriamo una posizione in Buy 0,1 lotto, Ticket 2. Viene piazzato il SellStop 0.78 Ticket 3.

Quando il SellStop è attivato, la posizione è lasciata a 0.68; l'ordine 3 con il volume 0.78 e il profitto negativo appare nella storia.

Allo stesso tempo c'è una posizione con il biglietto 4

E non è assolutamente chiaro dove sia sparita la perdita della posizione con il biglietto 2.


In generale, non possiamo sempre credere a ciò che è scritto. Perché non è completamente scritto.

Se una posizione si apre con un ordine pendente, il ticket rimane, ma se l'ordine ne chiude un altro, viene creato quello nuovo.

 

La stessa cosa succede con il ticket se la posizione e l'ordine pendente sono nella stessa direzione. Il biglietto cambia.


 
AlexeyVik:

A quanto pare questa è la perdita delle transazioni... e, prima di tutto, (ritaglio dalla documentazione)

Vasily, è un tester o una demo? Ho dei campioni dal tester. Mi chiedo se c'è una differenza tra l'attivazione di OnTradeTransaction nel tester e sul conto? Lo controllerò di tanto in tanto.

Questo è un demo. Forse il modello degli eventi è diverso nel tester e in tempo reale.

 

Ho diversi bot in MT5 su Forti. Compresi diversi sullo stesso strumento. Io uso per determinare quanti contratti ha il "robot", facendo jogging attraverso la storia degli scambi. In pratica funziona tutto. Ho deciso di provare a usareOnTradeTransaction. L'idea di come implementarla è semplice - quando arriva un affare, guardiamo quanti contratti sono comprati o venduti e quale bot ha fatto l'affare (usando un commento speciale all'affare o Magic Number) e salviamo queste informazioni in un file. La domanda è questa. Se abbiamo OnTradeTransaction in ogni EA, come sarà chiamato in sequenza o in parallelo? Supponiamo, per esempio, che un affare sia stato eseguito - si sono verificati molti eventi e OnTradeTransaction sarà chiamato coerentemente in ogni bot per ogni evento? Cioè, è più facile fare un gestore OnTradeTransaction che sarà responsabile per tutti i bot? Semmai non sono un programmatore, anche se ho già programmato molte cose. Il codice può essere scadente, ma riesco sempre a farlo funzionare come dovrebbe.

 
votor:

Ho diversi bot in MT5 su Forti. Compresi diversi sullo stesso strumento. Io uso per determinare quanti contratti ha il "robot", facendo jogging attraverso la storia degli scambi. In pratica funziona tutto. Ho deciso di provare a usareOnTradeTransaction. L'idea di come implementarla è semplice - quando arriva un affare, guardiamo quanti contratti sono comprati o venduti e quale bot ha fatto l'affare (usando un commento speciale all'affare o Magic Number) e salviamo queste informazioni in un file. La domanda è questa. Se abbiamo OnTradeTransaction in ogni EA, come sarà chiamato in sequenza o in parallelo? Supponiamo, per esempio, che un affare sia stato eseguito - si sono verificati molti eventi e OnTradeTransaction sarà chiamato coerentemente in ogni bot per ogni evento? Cioè, è più facile fare un gestore OnTradeTransaction che sarà responsabile per tutti i bot? Semmai non sono un programmatore, anche se ho già programmato molte cose. Il codice può essere scadente, ma lo faccio sempre funzionare correttamente.

Sì, OnTradeTransaction funziona in ogni EA. Dovrebbero essere filtrati per simbolo e se c'è più di un Expert Advisor su un simbolo, allora per magia.

 

Grazie per la vostra risposta. Ho già controllato e vedo che funziona in tutti gli EA. La domanda è (forse è una domanda stupida) se tutte questeOnTradeTransactions sono elaborate in tutti gli EA in serie, prima in un EA, poi in quello successivo, ecc., piuttosto che in parallelo, giusto? Voglio dire, poiché la loro elaborazione è sequenziale(?), sarebbe meglio creare un gestore per tutti i bot e filtrare ciò di cui abbiamo bisogno in esso.

 
votor:

Grazie per la vostra risposta. Ho già controllato e vedo che funziona in tutti gli EA. La domanda è (forse è una domanda stupida) se tutti questi postOnTradeTransaction in tutti gli EA funzionano in modo sequenziale, prima in un EA, poi in quello successivo, ecc, piuttosto che in parallelo, giusto? Voglio dire, dato che la loro elaborazione è sequenziale(?), sarebbe meglio creare un gestore per tutti i bot e filtrare ciò di cui abbiamo bisogno in esso.

Non ho controllato, ma non sembra esserci una regolarità. È come chi si è alzato per primo, non lascia nulla di intentato. Ed è possibile che se ci si alza alla stessa ora, allora ognuna delle pantofole.

Finora mi sembra la migliore opzione per filtrare per simbolo e mago. Sulla cui posizione scrive informazioni.

 

Qualcosa che non sono bravo a spiegare, a quanto pare. Ecco un esempio di vita reale. Ecco il codice:

void OnTradeTransaction(const MqlTradeTransaction& trans,

const MqlTradeRequest& request,

const MqlTradeResult& result)

{

Conta++;

Print("Ontrade_test = ",Count);

}

Il gestore è implementato in due Expert Advisors, quindi viene eseguito più volte in due Expert Advisors quando viene eseguito un trade. Il codice produce:

18:31:06.495 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 1

18:31:06.495 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 1

18:31:06.497 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 2

18:31:06.497 ontrade_trans_functions2 (MXI-12.17,M5) Ontrade_test = 2

18:31:06.498 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 3

18:31:06.498 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 3

18:31:06.500 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 4

18:31:06.500 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 4 ...

e così via.

Puoi vedere che il tempo di risposta di OnTradeTransaction nei due Expert Advisors è lo stesso in millisecondi. Quindi, ho una domanda: l'evento commerciale arriva prima a un OnTradeTransaction in un EA e poi a quello successivo in un altro EA o in qualche modo arriva a tutti i gestori di tutti gli EA contemporaneamente? Beh, è come un'operazione parallela multi-thread o come si chiama nella programmazione. Sono sicuro che tutto avviene in modo sequenziale, è solo elaborato in un millisecondo, ma ho chiesto per sicurezza.