Elaborazione OnTradeTransaction - pagina 6

 

Buon pomeriggio.

Nessuno è intimidito da nessuno.

prostotrader:

Non avete switch(trans.type)

Beh, ovviamente il caso dato è in switch(trans.type). Dato che c'era un altro caso, non ho voluto mostrare tutto il codice per non sovraccaricarlo di informazioni inutili.

fxsaber , grazie per l'esempio!

Alexey, è esattamente la stessa cosa. Sto usando 2 robot diversi per fare trading sullo stesso simbolo in modalità netting. I 2 post che hai citato si completano a vicenda.

È interessante risolvere il problema partendo dal trigger primario di cambiamento - onTradeTransaction.

Totale dei problemi attuali incontrati:

1. deal_add si innesca, ma nessuna posa. Nessun pensiero finora.

2. deal_add è attivato, ma l'ordine è nella terza dimensione. Mettere uno slip, l'ultimo paio di giorni sembra aiutare. L'ordine riesce ad arrivare alla storia in 1 secondo. Non ho robot di trading ad alta frequenza e non uso ordini di mercato, quindi questa soluzione sarebbe appropriata.

3. deal_add è attivato 2 volte, cioè uno stesso deal_add è attivato 2 volte. Questo può essere risolto controllando il biglietto di un affare precedente e confrontandolo con quello attuale.

C'è ancora il punto 1. Spiegazioni per questo.

Ieri ho impostato sell_limit, ha funzionato, deal_add è arrivato, ma la posizione non è apparsa e abbiamo aperto un ordine stop per niente. Ho iniziato a guardare la descrizione della transazione e ho visto che il tipo di affare è DEAL_TYPE_SELL ma il tipo di ordine è ORDER_TYPE_BUY. Allo stesso tempo, il biglietto d'ordine è nostro. Non sembrava del tutto logico. Ho deciso di controllare che il tipo di ordine e il tipo di trade siano gli stessi in OnTradeTransaction, che il tipo di ordine e il tipo di trade siano gli stessi.

Ho attivato l'Expert Advisor sulla demo e ho ottenuto un'altra transazione simile ma questa volta la posizione è cambiata. Ma a causa del nostro controllo l'ordine di stop non è stato eseguito. Cosa sta succedendo?

2019.02.08 16:05:14 [INFO]: ( FrTrend_2_Si-3.19_33) TRADE_TRANSACTION_DEAL_ADD
TRADE_TRANSACTION_DEAL_ADD
Symbol: Si-3.19
Deal ticket: 12677775
Deal type: DEAL_TYPE_SELL
Order ticket: 82675535
Order type: ORDER_TYPE_BUY
Order state: ORDER_STATE_STARTED
Order time type: ORDER_TIME_GTC
Order expiration: 1970.01.01 00:00
Price: 66287
Price trigger: 0
Stop Loss: 0
Take Profit: 0
Volume: 1
Position: 82675534
Position by: 0

Ve lo dico subito, questo è quello che arriva nel terminale. Senza che io lo inventi.

 
Илья Ребенок:

Ieri ho piazzato sell_limit, si è attivato, deal_add è arrivato, ma non è apparsa nessuna posizione e abbiamo aperto ordini stop per niente. Ho iniziato a guardare la descrizione della transazione e ho visto che il tipo di affare è DEAL_TYPE_SELL e il tipo di ordine è ORDER_TYPE_BUY. Allo stesso tempo, il biglietto d'ordine è nostro. Non sembrava del tutto logico. Ho deciso di controllare che il tipo di ordine e il tipo di transazione debbano coincidere in OnTradeTransaction sulla transazione deal_add.

Ma qui vale la pena di rileggere l'aiuto"Trade transaction structure" - in termini di quali campi sono compilati per il tipo deal_add.

E prendere le proprietà dell'ordine non dalla transazione (dove non sono compilate, ma gli zeri corrispondono anche ad alcuni valori in enum-type), ma dall'ordine stesso, se è disponibile al momento (e non nel processo di transizione dagli ordini alla storia).

 

Questo rende più facile analizzare come stanno andando le cose.


Si può aggiungere che insieme alle transazioni si può registrare lo stato delle posizioni, gli ordini correnti e la storia del trading. Allora l'intero quadro sarà disponibile.

 
JRandomTrader:

È qui che vale la pena di rileggere l'aiuto"Struttura di una transazione commerciale" - in termini di quali campi sono compilati per il tipo deal_add.

E prendere le proprietà dell'ordine non dalla transazione (dove non sono compilate, ma gli zeri corrispondono anche ad alcuni valori nell'enum-type), ma dall'ordine stesso, se è attualmente disponibile (e non in fase di transizione dagli ordini alla storia).

Sono d'accordo, ne ero consapevole, ma non ho prestato attenzione. Grazie per avermelo ricordato.

Tuttavia, il problema con una posizione che non appare in un caso e appare in un altro rimane e non è chiaro.

 

Илья Ребенок:

Tuttavia, il problema della posizione che non appare in un caso e appare nell'altro rimane e non è chiaro.

La posizione è stata registrata nella transazione deal_add, ma la posizione non esisteva prima e non è apparsa? Questo deve essere risolto.

 
JRandomTrader:

La posizione è stata registrata nella transazione deal_add, ma la posizione non c'era prima e non è apparsa? Questo deve essere risolto.

la posizione non c'era prima

 
Илья Ребенок:

la posizione non c'era prima

C'era un biglietto di posizione nella transazione?

 
JRandomTrader:

C'era un biglietto di posizione nella transazione?

Nel post sopra devo aver fatto un po' di confusione. C'era una posizione, poi è stata chiusa da ordini di stop. Cioè, il numero di posizioni è diventato 0. Poi è stato attivato un trade, ma la posizione non è apparsa.

Credo che questo sia ciò che intende. La transazione conteneva informazioni sul biglietto della posizione, ma questo biglietto = biglietto dell'ordine precedente. Come dovrebbe essere in modalità rete, se ho capito bene.

Position: 82675534
 
Илья Ребенок:

Nel post sopra devo aver fatto un po' di confusione. C'era una posizione, poi è stata chiusa da ordini di stop. Cioè, il numero di posizioni è diventato 0. Poi è stato attivato un trade, ma la posizione non è apparsa.

Credo che questo sia ciò che intende. La transazione conteneva informazioni sul biglietto della posizione, ma questo biglietto = biglietto dell'ordine precedente. Come in generale dovrebbe essere in modalità rete, se ho capito bene.

Se la posizione sul simbolo (cumulativa, tutti i robot e le operazioni manuali insieme) è diventata 0,0, allora la prossima transazione aprirà (DEAL_ENTRY_IN) una nuova posizione, con un nuovo ticket (==ticket dell'ordine).

In realtà, mi sembra che quando si fa il netting, non c'è bisogno di guardare la posizione a tutti - ogni robot deve tenere conto del "suo" - come i risultati delle negoziazioni sui suoi ordini.

 

La presenza delle posizioni e dei flag DEAL_ENTRY non dovrebbe essere coinvolta in alcun modo nella logica.

Dobbiamo solo guardare la magia e il commento dei nuovi scambi e degli ordini attuali come identificatori di proprio/straniero.


Il codice di lavoro ha mostrato. È esattamente la stessa cosa.

Cercare di risolvere il problema tramite OnTradeTransaction è una cattiva idea per il numero di insidie. Che in un compito particolare a volte può ancora essere aggirato. Ma se si cambia un po' il compito, l'intera logica viene interrotta durante l'implementazione di OnTradeTransaction.

Gli sviluppatori hanno creato un modello di commercio guidato dagli eventi, ma non hanno fornito un singolo esempio funzionante. Perché è un completo stronzo quello che il codice versa e quanto dipende da ogni esempio.

Pertanto, consiglierei di guardare le operazioni di trading sincrone e la funzione OnTrade. Tutto è molto più facile lì e la logica è molto flessibile per i cambiamenti. Inoltre, è più affidabile.


Il passaggio ad Async+Transactions è paragonabile al passaggio dal linguaggio di alto livello all'assembler. Cioè dovrebbe essere fatto all'ultimo stadio della creazione del TS, quando è COMPLETAMENTE studiato, pronto per il REALE e l'ultima cosa è velocizzare le operazioni di trading SENZA cambiare la logica di trading.

Motivazione: