Elaborazione OnTradeTransaction - pagina 2

 
fxsaber:

Possiamo avere >=2 ordini take e stop allo stesso tempo?

Sì, è vero, abbiamo fatto una prima entrata e impostato un TP e un ordine di stop. Poi, qualche tempo dopo, potremmo aver aggiunto altre entrate e impostato altri TP e stop.

 

In caso di evento perso, ricordo gli ordini effettuati, il biglietto dell'ultima transazione contabilizzata, il tempo dell'ultimo record (cambiamento) di stato, e periodicamente, così come durante l'initing, sincronizzo la lista degli ordini e controllo le transazioni non contabilizzate.

Il verificarsi di eventi a caso è la norma, l'assenza di ordini (temporanei) sia negli ordini che nella storia non è rara e può verificarsi sia prima che dopo che un affare si è verificato.

Una posizione al netting riceve un biglietto del primo ordine e a ulteriori trade (cambiamenti) lo salva fino a quando non viene chiuso (cioè, diventa 0,0).

Beh, a seconda del volume dell'ordine, può generare diversi scambi.
 
Илья Ребенок:


Condividete le vostre esperienze e idee per favore.

Non lo stai facendo bene fin dall'inizio.

Perché i maghi e tutti i tipi di controlli?

Il biglietto di un ordine è un identificatore unico.

Se si invia un ordine sincrono, si riceverà un biglietto come risultato della funzione.

Se si invia un ordine asincrono, riceviamo il biglietto in OnTradeTransaction.

Aggiunto

E quihttps://www.mql5.com/ru/forum/67298/page2#comment_2089220

è una buona funzione per controllare l'ordine

ФОРТС: В помощь начинающим
ФОРТС: В помощь начинающим
  • 2015.11.25
  • www.mql5.com
Установка отложенного ордера командой OrderSend().
 
Илья Ребенок:

Sì, è vero, abbiamo fatto una prima entrata e impostato un TP e un ordine di stop. Poi, dopo un po' di tempo, potremmo fare un top-up e piazzare un altro ordine TP e stop.

Gli ordini limite che richiedono TP/SL potrebbero essere eseguiti parzialmente. Allo stesso tempo, i TP sotto forma di ordini Limit saranno eseguiti allo stesso modo. Per esempio, il TP viene eseguito di un terzo del volume - lo SL dovrebbe essere diminuito della stessa quantità.

Tutto sommato, una logica abbastanza sgradevole per catturare tutti i trucchi.


Il compito dovrebbe essere implementato in OnTrade. Non dovrebbe essere difficile da implementare.

 
prostotrader:

Stai sbagliando tutto dall'inizio.

Perché i maghi e tutti i tipi di controlli?

Il biglietto di un ordine è un identificatore unico.

Se state inviando un ordine sincrono, allora il biglietto viene ricevuto come risultato della funzione.

Se si invia un ordine asincrono, riceviamo il biglietto in OnTradeTransaction.

Aggiunto

E quihttps://www.mql5.com/ru/forum/67298/page2#comment_2089220

è una buona funzione per controllare l'ordine

Grazie, lo leggerò.
JRandomTrader:

In caso di perdita di un evento, ricordo gli ordini piazzati, il biglietto dell'ultima transazione contabilizzata, il tempo dell'ultima entrata (cambiamento) di stato, e periodicamente, così come quando succede, sincronizzo l'elenco degli ordini e controllo le operazioni non registrate.

Il verificarsi di eventi in modo casuale è la norma, l'assenza di ordine (temporaneo) sia negli ordini che nella storia non è infrequente e può verificarsi sia prima che dopo che un affare sia avvenuto.

La posizione al netting riceve un biglietto del primo ordine e su ulteriori trade (cambiamenti) lo salva fino a che non si chiude (cioè, diventa 0,0).

Beh, a seconda del volume dell'ordine, può generare più scambi.

Uno degli obiettivi del robot era quello di sbarazzarsi della dipendenza locale. In altre parole, riceve solo dati dal mercato senza essere legato alle variabili del terminale o di un PC. Questo significa che in caso di necessità urgente devo passare a un altro PC e il robot prenderà tutto.

Ora ho visto un altro bug interessante. Ho ricevuto 2 transazioni TRADE_TRANSACTION_DEAL_ADD identiche. Scusa, che diavolo è questo?). Il robot ha finito per mettere 2 stop su 1 transazione.

2019.02.08 10:55:29 [INFO]: ( PChBreak_RTS-3.19_22 ) TRADE_TRANSACTION_DEAL_ADD
AGGIUNGI UNA TRANSAZIONE COMMERCIALE
Simbolo: RTS-3.19
Biglietto d'affari: 12674810
Tipo di affare: DEAL_TYPE_BUY
Biglietto d'ordine: 82646001
Tipo di ordine: ORDER_TYPE_BUY
Stato dell'ordine: ORDER_STATE_STARTED
Tipo di tempo dell'ordine: ORDER_TIME_GTC
Scadenza ordine: 1970.01.01 00:00
Prezzo: 119700
Prezzo di attivazione: 0
Stop Loss: 0
Prendere profitto: 0
Volume: 1
Posizione: 82646001
Posizione da: 0

2019.02.08 10:55:32 [INFO]: ( PChBreak_RTS-3.19_22 ) TRADE_TRANSACTION_DEAL_ADD
AGGIUNGERE UNA TRANSAZIONE COMMERCIALE
Simbolo: RTS-3.19
Biglietto d'affari: 12674810
Tipo di affare: DEAL_TYPE_BUY
Biglietto d'ordine: 82646001
Tipo di ordine: ORDER_TYPE_BUY
Stato dell'ordine: ORDER_STATE_STARTED
Tipo di tempo dell'ordine: ORDER_TIME_GTC
Scadenza ordine: 1970.01.01 00:00
Prezzo: 119700
Prezzo di attivazione: 0
Stop Loss: 0
Prendere profitto: 0
Volume: 1
Posizione: 82646001
Posizione da: 0

 

Gli eventi di transazione(TRADE_TRANSACTION_DEAL_ADD) arrivano più volte regolarmente.

Per fortuna, solo il più recente si ripete (almeno non ho preso quelli più vecchi).

Per filtrare è sufficiente controllare se il biglietto della transazione è lo stesso di quello precedente.

 
Ilya Baranov:

Gli eventi di transazione(TRADE_TRANSACTION_DEAL_ADD) arrivano più volte regolarmente.

Per fortuna, solo il più recente si ripete (almeno non ho preso quelli più vecchi).

Per filtrarlo, è sufficiente controllare se il biglietto della transazione è lo stesso di quello precedente.

Non più volte, ma per il numero di EAs che lavorano attualmente nel terminale.

Pertanto, ogni EA dovrebbe elaborare il proprio ordine

case TRADE_TRANSACTION_DEAL_ADD:
      if((BuyOrder.ticket > 0) && (trans.order == BuyOrder.ticket))  // Buy order
      {
        //Сделка этого советника
      }
break;
 
prostotrader:

Non più volte, ma per il numero di EAs che lavorano attualmente nel terminale.

Pertanto, ogni EA deve elaborare il proprio ordine

Il tuo codice protegge dal fatto che era un trade di questo EA.

Io e TS stiamo parlando di casi in cui OnTradeTransaction con il tipoTRADE_TRANSACTION_DEAL_ADD viene chiamata più volte per una sola operazione, cioè gli altri campi di MqlTradeTransaction contengono esattamente gli stessi dati.

Significa che nel vostro caso il codice di elaborazione può essere eseguito più volte.

Forse, questo non è il caso di tutti i broker. Ma succede regolarmente in tutti gli agenti di cambio con cui ho lavorato.

 
Ilya Baranov:

Il tuo codice protegge dal fatto che sia stato il trade di questo EA.

Io e TS stiamo parlando di casi in cui OnTradeTransaction con il tipoTRADE_TRANSACTION_DEAL_ADD viene chiamato più volte per una transazione, cioè gli altri campi di MqlTradeTransaction hanno esattamente gli stessi dati.

Significa che nel vostro caso il codice di elaborazione può essere eseguito più volte.

Forse, questo non è il caso di tutti i broker. Ma succede regolarmente con tutti i broker con cui ho lavorato.

Faccio trading su Otkryvashka in reale e lo provo in demo ma non ho trigger multipli.

Pubblica il tuo pezzo di codice perTRADE_TRANSACTION_DEAL_ADD

 
Ilya Baranov:

Gli eventi di transazione(TRADE_TRANSACTION_DEAL_ADD) arrivano più volte regolarmente.

Per fortuna, solo il più recente si ripete (almeno non ho preso quelli più vecchi).

Per filtrare, è sufficiente controllare se il biglietto della transazione è lo stesso di quello precedente.

Sì, grazie! L'ho appena fatto dopo quello che ho visto.

Per quanto riguarda il problema originale, ho messo uno slittamento per avere il tempo di pompare la transazione di cancellare un ordine e aggiungerlo alla storia. Osservato.

L'imperfezione della piattaforma in questo senso è molto triste. Le cose che dovrebbero essere raggruppate insieme ne fanno di separate.

prostotrader:

Non diverse volte, ma dal numero di EAs che lavorano nel terminale al momento.

Ecco perché ogni EA deve elaborare il proprio ordine

In questo caso, ho ancora bisogno di memorizzare il biglietto dell'ordine dal richiedente da qualche parte per confrontarlo con il biglietto del commercio. E voglio solo sbarazzarmi di tutte le memorie nelle variabili locali e ottenere informazioni solo dal mercato/terminale per livellare i rischi dell'infrastruttura locale.
Motivazione: