Cancellazione nel tester - pagina 4

 
Roman Shiredchenko #:

Le cancellazioni durante la compensazione possono essere ignorate.

Esempio. Tu apri un trade di acquisto a 50, all'inizio della compensazione il prezzo è diciamo 70. Durante la compensazione il tuo trade sarà cancellato e riceverai 20 tugrik, dopo la compensazione il tuo trade sarà aperto a 70.

Se lo chiudi a 100, il terminale mostrerà un trade con un profitto di 50 tugriks.

Il problema di solito si verifica quando si scrive un trawl o un CU. Supponiamo di voler mettere un CUE di +5 quando lo scambio è 15+.

Quindi, se prendiamo i numeri dall'esempio, risulta che prima di cancellare il nostro stop loss sarà di +5 punti e dopo averlo cancellato sarà di -5 punti. Ma se un trade sarà chiuso sullo stop, otterremo ancora un profitto di 5 giri.

Pertanto, la compensazione può essere trascurata nel tester.

 
Aleksandr Slavskii #:

Davvero semplice e soprattutto affidabile.


Perdonerò l'autore per l'off-topic, ma avete una ricetta per determinare quando la pulizia è finita?

Il problema è questo: broker opener, durante il clearing cancella gli ordini pendenti, e il campo di clearing non li rimette in piedi.

Non so per i futures, ma sulle azioni la compensazione finisce in momenti diversi.

Quindi, non sono stato in grado di determinare il momento in cui la compensazione finisce per un titolo specifico.

Uso semplicemente il timer per inviare l'ordine fino all'apertura.

Non mi piace questo approccio e non ne ho un altro.

Va bene - discutete e dibattete insieme - l'argomento è aperto a tutti!!!!!
 
Aleksandr Slavskii #:

Le cancellazioni durante la compensazione possono essere ignorate.

Esempio. Tu apri un trade di acquisto a 50, al momento della compensazione il prezzo è di 70. Durante la compensazione il tuo trade sarà cancellato e riceverai 20 tugrik, dopo la compensazione il tuo trade sarà aperto a 70.

Se lo chiudi a 100, il terminale mostrerà un trade con un profitto di 50 tugriks.

Il problema di solito si verifica quando si scrive un trawl o un CU. Supponiamo di voler mettere un CUE di +5 quando lo scambio è 15+.

Quindi, se prendiamo i numeri dall'esempio, risulta che prima di cancellare il nostro stop loss sarà di +5 punti e dopo averlo cancellato sarà di -5 punti. Ma se un trade sarà chiuso sullo stop, otterremo ancora un profitto di 5 giri.

Ecco perché possiamo ignorare la compensazione nel tester.

Oh! Che interessante... dovrà approfondire e provare! :-)

ha scritto (preso dall'articolo) f-i-tion esattamente fuori conteggio da scambi sulla storia, sul fatto (è chi ha posizione in più) - conteggio consecutivo meno e visualizzarlo sullo schermo - sorta di compensazione ACCOUNT, non può certo abbastanza sarà tutto corretto quando il commercio - solo guardando ora ...

Quindi per chiudere accuratamente la posizione, per esempio, tenendo conto della compensazione precedente, se era meno - allora dovremmo confrontare i valori del profitto chiuso e della perdita precedente sulla compensazione.

//+------------------------------------------------------------------+
//|                 УЧЕТ КЛИРИНГА
//+------------------------------------------------------------------+
double Calc_Clearing() // вычисление лота
  {
   bool ord;
   double TotalLot=0;
    for(int i=HistoryDealsTotal()-1; i>=0; i--)
     {
      ulong ticket=HistoryDealGetTicket(i);
      ord=HistoryDealSelect(ticket);
      if(ord && HistoryDealGetString(ticket,DEAL_SYMBOL) == _Symbol
       //  && HistoryDealGetInteger(ticket,DEAL_MAGIC) == MagicC
         && HistoryDealGetInteger(ticket,DEAL_ENTRY) == DEAL_ENTRY_OUT)
        {
         if(HistoryDealGetDouble(ticket,DEAL_PROFIT) <= 0)
           {
            TotalLot+=HistoryDealGetDouble(ticket,DEAL_VOLUME);
           }
         else
           {
            break;
           }
        }
     }
   return TotalLot == 0 ? TotalLot: TotalLot;
  }

trovato un errore - correggilo:

TotalLot+=HistoryDealGetDouble(ticket,DEAL_PROFIT);

come risultato questa è l'immagine sullo schermo sopra prima di questo inserimento:

   Comment(" SPREAD текущий по символу ", _Symbol, " составляет: ", SymbolInfoInteger(_Symbol,SYMBOL_SPREAD),
    "      СВЕРКА по клирингу:  ", NormalizeDouble(Calc_Clearing(),0));

riconciliazione di compensazione

perché non c'era ancora nessuna perdita di compensazione:

09.11.2021: tutto "fuori" è nel plus:


 
Roman Shiredchenko #:

Terribile! Ci sono troppe cose sbagliate da commentare.

Mettiamola in un altro modo.

Perché avete bisogno della cronologia delle transazioni se siete interessati alla posizione?

Imho, è sufficiente scrivere il prezzo dell'ultima posizione in una variabile per ogni nuovo trade, e quando arriva la compensazione, aggiustare il CU della differenza tra il prezzo scritto nella variabile e il prezzo dell'ultimo tick prima della compensazione.

Esempio:

lotto = 1;

doppio end_position=0;

prima operazione al prezzo 30, end_position = 30;

secondo trade al prezzo di 60, end_position = 45;

terzo trade al prezzo 90, end_position = 60;


Cioè, avete una posizione a 60 con un volume di 3.

Supponiamo che la compensazione sia arrivata al prezzo di 70, il profitto è pari a 30 tugriks.

double clearing_price = 70;

Dopo la compensazione, la posizione si è aperta al prezzo 70, ma dobbiamo ricordare che il prezzo effettivo di questa posizione èend_position == 60; quindi, questo è il prezzo da cui calcolare il trawl o CUE.

Di conseguenza, durante la compensazione, compilate la variabile

doppio correttore = 0;

correttore =clearing_price-end_position;

Supponiamo che abbiate un inizio di CU quando il commercio è +20 pips, rispettivamente, aggiungete alla funzione CU che l'inizio di CU è: 20 -correttore;

E anche il CU è mettere alcuni punti in più, devono anche essere corretti dal valore correttore.

Dopo la chiusura di qualsiasi correttore di posizione = 0;


Ma questo funzionerà solo se non ci sono chiusure parziali o riempimenti dopo la compensazione. Se ci sono, dobbiamo farlo in modo diverso.

 
Aleksandr Slavskii #:

Davvero semplice e soprattutto affidabile.


Perdonerò l'autore per l'off-topic, ma avete una ricetta per determinare quando la pulizia è finita?

Il problema è questo: broker opener, durante il clearing cancella gli ordini pendenti, e il campo di clearing non li rimette in piedi.

Non so per i futures, ma sulle azioni la compensazione finisce in momenti diversi.

Quindi, non sono stato in grado di determinare il momento in cui la compensazione finisce per un titolo specifico.

Uso semplicemente il timer per inviare l'ordine fino all'apertura.

Non mi piace questo approccio e non ne ho altri.

Ho anche un apritore, ma su futures. Ho lo stesso problema con la fine della compensazione, non so come determinarlo, prendo solo 19:05.

Cioè, potete mettere i rinvii fino alla data, non solo per oggi. Almeno nei futures.

 
Aleksandr Slavskii #:

1. L'orrore! Ci sono troppe cose sbagliate da commentare.

Mettiamola in un altro modo.

Perché avete bisogno della cronologia delle transazioni se siete interessati alla posizione?

Imho, è sufficiente scrivere il prezzo dell'ultima posizione in una variabile per ogni nuovo trade, e quando arriva la compensazione, aggiustare il CU della differenza tra il prezzo scritto nella variabile e il prezzo dell'ultimo tick prima della compensazione.

Esempio:

lotto = 1;

doppio end_position=0;

prima operazione al prezzo 30, end_position = 30;

secondo trade al prezzo di 60, end_position = 45;

terzo trade al prezzo 90, end_position = 60;


Cioè, avete una posizione a 60 con un volume di 3.

Supponiamo che la compensazione sia arrivata al prezzo di 70, il profitto è pari a 30 tugriks.

double clearing_price = 70;

Dopo la compensazione, la posizione si è aperta al prezzo 70, ma dobbiamo ricordare che il prezzo effettivo di questa posizione èend_position == 60; quindi, questo è il prezzo da cui calcolare il trawl o CUE.

Di conseguenza, durante la compensazione, compilate la variabile

doppio correttore = 0;

correttore =clearing_price-end_position;

Supponiamo che tu abbia un inizio di CU quando il commercio è +20 pip, rispettivamente, aggiungi alla funzione CU che l'inizio di CU è: 20 -correttore;

E anche il CU è mettere alcuni punti in più, devono anche essere corretti dal valore correttore.

Dopo la chiusura di qualsiasi correttore di posizione = 0;


2. Ma questo funzionerà solo se non ci sono chiusure parziali o riempimenti dopo la compensazione. Se ci sono, dovremmo fare diversamente.

1. Grazie per il programma. Voglio guardare senza correttore per ora, dato che ho ricariche e strascico con boo + ad esempio 30p, inoltre dopo lo strascico impostato ci possono essere chiusure parziali secondo la logica di funzionamento del robot. Cioè, dopo aver aperto una posizione iniziale, memorizzo il prezzo aperto, dopo le aggiunte - la media - di nuovo memorizzo il NUOVO prezzo aperto della posizione. E in sostanza, la compensazione e l'impostazione di un nuovo prezzo di apertura da parte del broker non avrà importanza.

Ho capito bene, che questo approccio può avvenire anche secondo la logica di trading di cui sopra scritta qui in questo mio post...

Inoltre, se il prezzo corrente dell'asset lo permette, il trasferimento di SL a BU + 30 pips dal prezzo di posizione cumulativo precedentemente memorizzato.

E chi se ne frega del prezzo attuale della posizione aperta per i futures, fissato dal vostro broker?


2.

"Ma questo funziona solo se non ci sono chiusure parziali o riempimenti dopo la compensazione. Se ci sono, deve essere fatto in modo diverso. "

Ho riempimenti... prima e dopo - fino a quando si trasferisce a BU + 30 pips - è davvero necessario leggere il prezzo medio attuale di tutti gli ordini di mercato tramite array, perché avremo bisogno di

...avremmo bisogno del prezzo di apertura di un ordine a mercato e il numero e il volume dei contratti per ogni ordine... per visualizzare il prezzo medio per loro in totale - dove significa il trasferimento a un CU - per calcolare...


Un prezzo medio = ((OPEN_1 * VOLUME_1) + (OPEN_2 * VOLUME_2) + (OPEN_3 * VOLUME_3)+n) / (VOL_1 + VOL_2 + VOL_3 + n), qui risulta che non ho tradotto SL in BU + 30 pips su tutte le posizioni aggregate - è necessario scrivere tutti questi valori in array o cosa? Se apriamo la N-esima fetta di ordine di mercato, dobbiamo alzare tutta questa catena per calcolare la media di tutti?

O potremmo giocarci in qualche modo:

HistoryOrderSelect ()
HistoryOrderGetTicket ()

Ma lì si pone la questione di come prendere l'inizio e la fine del ciclo degli ordini di mercato EFFETTIVI che partecipano alla formazione della posizione aggregata EFFETTIVA?

 
Roman Shiredchenko #:

VOLUME_Price = ((OPEN_1 * VOLUME_1) + (OPEN_2 * VOLUME_2) + (OPEN_3 * VOLUME_3)+n) / (VOL_1+VOL_2 + VOL_3 + n), quindi risulta che non ho ancora tradotto SL in BU + 30 pips su tutte le posizioni aggregate - devo scrivere tutti questi valori in array? Se apriamo l'ordine di mercato N-esimo, dobbiamo portare su tutta la catena per calcolare la media di tutti?

Ahimè, questo è esattamente il caso.

 

Roman Shiredchenko #:

Average_Price = ((OPEN_1 * VOLUME_1) + (OPEN_2 * VOLUME_2) + (OPEN_3 * VOLUME_3)+n) / (VOL_1 + VOL_2 + VOL_3 + n), quindi risulta che non ho tradotto SL in BU + 30 pips su tutte le posizioni aggregate - devo scrivere tutti questi valori in array o cosa? Se apriamo la N-esima fetta di ordine di mercato, dobbiamo alzare tutta questa catena per calcolare la media di tutti?

O potremmo giocarci in qualche modo:

Ma lì sorge la domanda: come prendere l'inizio e la fine del ciclo degli ordini di mercato EFFETTIVI che partecipano alla formazione della posizione totale EFFETTIVA?

È sufficiente memorizzare l'ultimo prezzo medio.

 
JRandomTrader #:

È sufficiente mantenere l'ultimo prezzo medio.

Ok, ma se riempio, per esempio, con un volume qualsiasi - come lo conto EFFETTIVAMENTE?
 
Roman Shiredchenko #:
OK, ma se sto aggiungendo, per esempio, un qualsiasi volume - come calcolare il suo EFFETTIVO?

Prendi quest'ultimo prezzo medio e il volume della posizione, il prezzo del nuovo trade e il suo volume. Tutto sarà calcolato correttamente.