Il grande e terribile MT4 per sempre (o come strategizzare una transizione) - pagina 11

 
secret:
L'ordine è stato effettuato in anticipo. Il prezzo lo tocca, ma viene eseguito più tardi, a un prezzo peggiore.

No, se il limite si è comportato peggio, allora si fotta il broker o se ne faccia una ragione.

E se si fermano, va bene, per così dire. 20-30 ms è abbastanza accettabile, se l'ordine è emesso da qualche altra parte e non solo controllato da un plugin.

E quante zecche c'erano - non importa affatto.

 
Andrei Trukhanovich:

a cosa serve se la commissione è contata in dollari dal volume in dollari?

Stranamente, la valuta del conto è interessata. A quanto pare, non è il tasso di cambio attuale, ma un tasso fisso. Più l'arrotondamento, se il lotto è piccolo.

 

Ho dovuto scoprire qualcosa da solo ed è nato un esempio molto facile da riprodurre, che mostra quanto sia facile lavorare con gli ordini.


Quindi, immaginiamo di eseguire un EA che funziona nella classica modalità OnTick. Poiché OnTick può verificarsi in qualsiasi momento durante lo stato dell'ambiente del terminale, sarà interessante vedere cosa può vedere l'EA. Pertanto, gli stati che possono essere incontrati dall'Expert Advisor onTick sono scelti come segue.

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnTradeTransaction( const MqlTradeTransaction&, const MqlTradeRequest&, const MqlTradeResult& )
{
  static int i = 0;
  
  Print(i++);
  
  if (HistorySelect(0, INT_MAX))
    Print(TOSTRING(PositionsTotal()) + TOSTRING(OrdersTotal()) + TOSTRING(HistoryDealsTotal()) + TOSTRING(HistoryOrdersTotal()));
        
  Print("----------------");
}

Questo codice stampa semplicemente quante posizioni/ordini correnti e quanti affari/ordini chiusi ci sono.


Lo eseguiamo e apriamo manualmente una posizione e la chiudiamo. Non c'è altro. Ho il seguente tabulato (può cambiare da un'esecuzione all'altra).

        // Открываем позицию руками.

        0
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        1
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        2
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        3
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        4
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        5 // Открывающий позицию ордер исчез полностью - нет среди живых и мертвых.
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 25 
        ----------------
        6 // Открылась позиция, но нет соответствующей ей сделки.
        PositionsTotal() = 1 OrdersTotal() = 0 HistoryDealsTotal() = 25 HistoryOrdersTotal() = 26 
        ----------------
        7
        PositionsTotal() = 1 OrdersTotal() = 0 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------

        // Закрываем позицию руками.
        8 // Позиция и закрывающий ее ордер.
        PositionsTotal() = 1 OrdersTotal() = 1 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------
        9
        PositionsTotal() = 1 OrdersTotal() = 1 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------
        10
        PositionsTotal() = 1 OrdersTotal() = 1 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------
        11
        PositionsTotal() = 1 OrdersTotal() = 1 HistoryDealsTotal() = 26 HistoryOrdersTotal() = 26 
        ----------------
        12 // Позиция закрыта, но закрывающий ее ордер продолжает висеть.
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 27 HistoryOrdersTotal() = 26 
        ----------------
        13 // Закрывающий позицию ордер полностью исчез - нет среди мертвых/живых.
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 27 HistoryOrdersTotal() = 26 
        ----------------
        14
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 27 HistoryOrdersTotal() = 26 
        ----------------
        15
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 27 HistoryOrdersTotal() = 27 
        ----------------

Così, l'Expert Advisor OnTick può incontrare una qualsiasi di queste 16 situazioni, alcune interessanti che ho commentato sopra.

Non ho preso un esempio di proposito. L'ho appena eseguito e ho pubblicato il risultato. I lanci possono dare anche altre varianti interessanti.


Ho potuto commentare i risultati perché sapevo esattamente cosa stavo facendo (ho aperto una sola posizione e l'ho chiusa a mano).

Cosa prova un Expert Advisor che non lo sa? Immaginiamo che ci siano diversi Expert Advisors che lavorano in parallelo sul conto. La facilità di analisi del pasticcio risultante dalla simbiosi delle situazioni di cui sopra è, credo, ovvia.


Un codice conciso è allegato, chiunque può riprodurlo.

 
fxsaber:

Ho dovuto scoprire qualcosa da solo ed è nato un esempio molto facile da riprodurre, che mostra quanto sia facile lavorare con gli ordini.


Quindi, immaginiamo di eseguire un EA che funziona nella classica modalità OnTick. Poiché OnTick può verificarsi in qualsiasi momento durante lo stato dell'ambiente del terminale, sarà interessante vedere cosa può vedere l'EA. Pertanto, gli stati che possono essere incontrati dall'Expert Advisor onTick sono scelti come segue.

Questo codice stampa semplicemente quante posizioni/ordini correnti e quanti affari/ordini chiusi ci sono.


Lo eseguiamo e apriamo manualmente una posizione e la chiudiamo. Non c'è altro. Ho il seguente tabulato (può cambiare da un'esecuzione all'altra).

Così, l'Expert Advisor OnTick può incontrare una qualsiasi di queste 16 situazioni, alcune interessanti che ho commentato sopra.

Non ho preso un esempio di proposito. L'ho appena eseguito e ho postato il risultato. I lanci possono dare anche altre varianti interessanti.


Ho potuto commentare i risultati perché sapevo esattamente cosa stavo facendo (ho aperto una sola posizione e l'ho chiusa a mano).

Cosa prova un Expert Advisor che non lo sa? Immaginiamo che ci siano diversi Expert Advisors che lavorano in parallelo sul conto. La facilità di analisi del pasticcio risultante dalla simbiosi delle situazioni di cui sopra è, credo, ovvia.


Il breve codice è allegato, tutti possono riprodurlo.

Forum sul trading, sistemi di trading automatico e test di strategia

Il grande e potente MT4 per sempre (o come creare una strategia di migrazione intelligente)

fxsaber, 2021.04.28 21:43

Non ci può essere alcuna discussione. Un livello troppo diverso di conoscenza del materiale.


Dovete capire quante volte OnTradeTransaction viene chiamato e cosa potete ottenere in quale momento.

AGGIUNGERE UN ORDINE DI TRANSAZIONE

Aggiunta di un nuovo ordine aperto.

AGGIORNAMENTO DELL'ORDINE DI TRANSAZIONE

Modifica di un ordine aperto. Questi cambiamenti includono non solo i cambiamenti espliciti sul terminale del cliente o sul lato del server commerciale, ma anche i cambiamenti dello stato di immissione dell'ordine (ad esempio da ORDER_STATE_STARTED a ORDER_STATE_PLACED o da ORDER_STATE_PLACED a ORDER_STATE_PARTIAL ecc.)

ELIMINARE ORDINE DI TRANSAZIONE

Elimina l'ordine dalla lista degli ordini aperti. Un ordine può essere cancellato dalla lista degli ordini aperti come risultato di una richiesta di compravendita o come risultato dell'esecuzione (fill) e del trasferimento allo storico.

AGGIUNGI UNA TRANSAZIONE COMMERCIALE

Aggiungere uno scambio alla storia. Questo viene eseguito come risultato dell'esecuzione dell'ordine o come risultato delle operazioni di saldo del conto.

AGGIORNAMENTO TRANSAZIONE COMMERCIALE

Cambiamento di un accordo nella storia. Sono possibili situazioni in cui un affare precedentemente eseguito viene cambiato sul server. Per esempio, la transazione è stata cambiata nel sistema di trading esterno (borsa), dove è stata rimossa dal broker.

TRADE_TRANSACTION_DEAL_DELETE

Cancellazione della transazione dalla cronologia. Ci possono essere situazioni in cui una compravendita precedentemente eseguita viene cancellata sul server. Per esempio, il trade è stato cancellato nel sistema di trading esterno (borsa) dove è stato rimosso dal broker.

AGGIUNGERE LA STORIA DELLA TRANSAZIONE

Aggiungere un ordine alla storia come risultato dell'esecuzione o della cancellazione.

AGGIORNAMENTO DELLA STORIA DELLE TRANSAZIONI COMMERCIALI

Modifica di un ordine inserito nella cronologia degli ordini. Questo tipo è destinato ad aumentare la funzionalità dal lato del server commerciale.

TRADE_TRANSACTION_HISTORY_DELETE

Cancellazione di un ordine dalla cronologia degli ordini. Questo tipo è destinato all'espansione delle funzionalità dal lato del server commerciale.

POSIZIONE_DI_TRANSAZIONE

Cambiamento di una posizione non legato all'esecuzione della negoziazione. Questo tipo di transazione indica che la posizione è stata cambiata dal lato del server commerciale. Il volume della posizione, il prezzo di apertura e i livelli di Stop Loss e Take Profit possono essere cambiati. Le informazioni sui cambiamenti vengono passate alla struttura MqlTradeTransaction attraverso il gestore OnTradeTransaction. Un cambiamento di posizione (aggiunta, modifica o eliminazione) come risultato di una negoziazione non causa l'occorrenza della transazione TRADE_TRANSACTION_POSITION.

RICHIESTA DI TRANSAZIONE COMMERCIALE

Una notifica che una richiesta di compravendita è stata elaborata dal server e il suo risultato è stato ricevuto. Per le transazioni di questo tipo è necessario analizzare solo un campo - type (tipo di transazione) nella struttura MqlTradeTransaction. Il secondo e il terzo parametro della funzione OnTradeTransaction (richiesta e risultato) devono essere analizzati per ottenere ulteriori informazioni.

 
Alexey Viktorov:

Devi capire quante volte OnTradeTransaction viene chiamato e cosa puoi ottenere in quale punto.

Penso di essere stato il più chiaro possibile.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Il grande e terribile MT4 per sempre (o come costruire una strategia di migrazione)

fxsaber, 2021.05.03 12:48

Quindi, OnTick EA può incorrere in una qualsiasi di queste 16 situazioni, interessanti quelle che ho commentato sopra.

 
fxsaber:
Penso di essere stato il più chiaro possibile.

Cosa c'entra OnTick() se si gestisce tutto in OnTradeTransaction

Ottenere il motivo della chiamata a OnTradeTransaction ed elaborare di conseguenza ciò che è disponibile in questa chiamata.
 
Alexey Viktorov:

Cosa c'entra OnTick() se elaborate tutto in OnTradeTransaction

Ottenere il motivo della chiamata a OnTradeTransaction ed elaborare di conseguenza ciò che è disponibile a questa chiamata.

Forse uno dei membri del forum lo spiegherà. Non funziona per me.

 
Alexey Viktorov:

Cosa c'entra OnTick() se si elabora tutto in OnTradeTransaction

Ottenere il motivo della chiamata a OnTradeTransaction e gestire di conseguenza ciò che è disponibile a quella chiamata.

InOnTick, assolutamente tutte queste stranezze sono al loro posto. È solodifficile fare un esempio facilmente riproducibile con OnTick.OnTradeTransaction è stato scelto come esempio, ma non cambia l'essenza.

 
traveller00:

OnTick ha assolutamente tutte queste stranezze. È solodifficile fare un esempio facilmente riproducibile conOnTick.OnTradeTransaction è stato scelto come esempio, ma non cambia il punto.

Continua a imitare Don Chisciotte...

 
fxsaber:

нет среди живых и мертвых

Sarebbe bello aggirare questo punto a livello di MT4Orders.

I backup degli ordini stanno avvenendo ora, purtroppo. Molto probabilmente per questo motivo.

Motivazione: