Tavolo di tutti i mestieri. Accesso tramite MQL5 - pagina 5

 
prostotrader:

Qui nel mio codice c'è la prevenzione della duplicazione:

Bene allora :) c'è una perdita di tick nel tuo codice.
 
Yury Kulikov:
Allora :) c'è una perdita di tic nel tuo codice.

:) ma per qualche motivo sono ridondanti :)

Grazie mille Yuri, lo esaminerò ora.

 

Infatti, quando si passa a COPY_TICKS_TRADE - l'errore di miscelazione dei tick è scomparso, ma allo stesso tempo in modalità COPY_TICKS_TRADE i flag non possono essere ricevuti

  • TICK_FLAG_BUY - un tick si è verificato come risultato di un'operazione di acquisto
  • TICK_FLAG_SELL - il tick si è verificato come risultato di una vendita

 
Karputov Vladimir:

Infatti, quando si passa a COPY_TICKS_TRADE - l'errore di miscelazione dei tick è scomparso, ma allo stesso tempo in modalità COPY_TICKS_TRADE i flag non possono essere ricevuti

  • TICK_FLAG_BUY - un tick si è verificato come risultato di un'operazione di acquisto
  • TICK_FLAG_SELL - il tick si è verificato come risultato di una vendita

Le bandiere sono il risultato di uno scambio reale (le sto testando ora)
 
Yury Kulikov:
Bene, allora :) c'è una perdita di tick nel tuo codice.

Yuri, prova il mio indicatore (guarda bene)

Aspetto che le zecche appaiano, piuttosto che guardarle nella storia.

Copio ogni volta, prima che appaiano nuove zecche.

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_TRADE,start_time,0);

"0" è il numero di zecche riapparse.

Se copiato = 0, non ci sono nuovi tick.

Se rimuoviamo questo "supporto".

if(start_time==ulong(ticks[copied-1].time_msc)) return;

allora ci sarà sicuramente un duplicato.

Il compito non è quello di visualizzare la storia dei tick, ma di visualizzare il feed dei tick in tempo reale.

 
prostotrader:
Sul reale le bandiere arrivano (sto testando sul reale in questo momento)

Sì, proprio così. Mi sono confuso conCOPY_TICKS_INFO.

Aggiunto:

Tuttavia, in modalità COPY_TICKS_ALL le zecche, alcune, arrivano in un ordine disordinato.

 
prostotrader:

Yuri, prova il mio indicatore (guarda attentamente)

Il tuo codice ha troppe lettere :)

L'algoritmo è semplice. In OnCalculate() guarda il volume attuale, se è cambiato, poi carica gli ultimi tick, ricorda quanti tick erano all'ultimo momento (lo stesso valore time_msc), in modo che la prossima chiamata CopyTicks() per tagliare questi tick dal calcolo.

 
Yury Kulikov:

Ci sono troppe lettere nel tuo codice :)

L'algoritmo è semplice. In OnCalculate() guarda il volume reale, se è cambiato, allora carica gli ultimi tick, ricorda quanti tick erano all'ultimo momento del tempo (lo stesso valore time_msc), così la prossima chiamata CopyTicks() esclude questi tick dal calcolo.

Grazie, penso di sapere come risolvere il problema...
 
Yury Kulikov:

Ci sono troppe lettere nel tuo codice :)

L'algoritmo è semplice. In OnCalculate () guarda il volume attuale, se è cambiato, si scaricano gli ultimi tick, e si ricorda quanti tick erano all'ultimo momento (lo stesso valore time_msc), così la prossima chiamata CopyTicks () esclude questi tick dal calcolo.

Yuri, grazie ancora tanto per il consiglio competente.

Ho fatto tutto e funziona perfettamente, ma per più di 3 ore non c'è nessuna situazione che

Ho descritto :)

 

Beh, finalmente ha funzionato!

Tutto è corretto e le zecche non sono più duplicate o perse.

La demo è nel file ZIP, e se volete controllarla voi stessi, c'è una versione di debug nel seminterrato.

File: