Tiki in tempo reale - pagina 21

 
Aleksey Mavrin:

Questa è l'immagine del giorno. Naturalmente non abbiamo controllato se OnBook corrispondeva a Tick, ma abbiamo semplicemente preso il successivo, sperando che se OnTick era più avanti di OnBook, allora il corrispondente sarebbe stato lo stesso o leggermente più tardi.

Massimo naturalmente senza controlli aggiuntivi è nessun indicatore, o overshoot o davvero OnBook da qualche parte lento.


Ma questo è qualcuno che può spiegare? Perché vengono distribuiti così tanti OnTick e non c'è un solo OnBook tra loro?


Perché tu stesso hai scritto"Il codice è a gomito, forse è storto, guarderò i risultati. "

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{ 
  if((Mode != USE_BOOK) || (symbol != Symbol())) return;
  TimeArrayBook[curBook]=GetMicrosecondCount();
  curBook++
 }
void OnTick()
{
  if(Mode != USE_TICK) return;
  TimeArrayTick[curTick]=GetMicrosecondCount();
  curTick++
}

E non hai affatto bisogno di un timer...

 
Ma mi chiedo se il responsabile sia soddisfatto delle risposte alla sua domanda.
 
prostotrader:

Perché tu stesso hai scritto: "Il codice è a gomito, forse è storto, guarderò i risultati. "

E non hai affatto bisogno di un timer...

Non avete scoperto che la ragione era dovuta a errori nel codice. O non hai capito la domanda. Ho emesso un segno nelle funzioni On, senza timer, ma ancora c'è una folla di tick tra i quali non ci sono OnBooks.
 
Aleksey Mavrin:
Non avete trovato che la causa è dovuta a errori nel codice. O non hai capito la domanda. Ho anche appena stampato un segno nelle funzioni On, senza timer, ancora c'è una folla di tick tra i quali non ci sono OnBooks.

1. Non mi è affatto chiaro come hai eseguito l'EA(s)

2. Ci sono 2 codici scritti da Andrei e da me che

Sicorroborano a vicenda. Allora perché preoccuparsi del tuo?

3. Sia io che Andrey abbiamo eseguito EAs sul mercato dei derivati, e tu sul mercato azionario.

Forse il terminale ha qualche difetto sul fondo (non ha nemmeno fatto funzionare MT5 sul mercato azionario).

Personalmente, sul fondo, faccio trading tramite Quick

 
prostotrader:

1. Non mi è affatto chiaro come hai eseguito l'EA(s)

2. Ci sono 2 codici scritti da Andrei e da me che

Si corroborano a vicenda. Allora perché preoccuparsi del tuo?

3. Sia io che Andrey abbiamo eseguito EAs sul mercato dei derivati, e tu sul mercato azionario.

Forse il terminale ha qualche difetto sul fondo (non ha nemmeno fatto funzionare MT5 sul mercato azionario).

Personalmente, sul fondo, faccio trading attraverso Quick

Oh, capisco. Lo proverò domani sui futures. Perché non usate mt5 sul fondo? Ci sono degli svantaggi?
Z.s. Il codice lì è di 3 righe) fissa solo il tempo di msk senza alcun controllo in modo che la coda non sia rallentata in alcun modo dal gestore, e sul timer stampa e conta il ritardo. Nemmeno io ho capito bene il tuo codice, il principio generale di funzionamento è già chiaro dall'output.
 
Aleksey Mavrin:
1. Ah, capisco. Domani lo proverò su un futuro. Perché non usate MT5 sul fondo? Ha qualche svantaggio?
S.s. Il codice lì è di 3 righe) fissa solo il tempo msc senza alcun controllo in modo che la coda non sia rallentata in alcun modo dal gestore, e sul timer lo stampa e conta il ritardo. Neanche io ho capito bene il tuo codice, il principio generale di funzionamento è già chiaro dall'output.

1. Il secondo e i successivi terminali del broker sono pagati, e non ho strategie in cui commercio solo azioni(portafogli azionari).

2. Se avete intenzione di emettere ilGetMicrosecondCount() accumulato, allora

farlo senza timer in OnDeinit(), quando l'EA esce, tutto verrà stampato.

void OnDeinit(const int reason)
{
  if(Mode == USE_BOOK)
  {
    if(is_book == true) MarketBookRelease(Symbol());
  } 
  if(reason == REASON_REMOVE)
  {
   //Распечатываем данные
  } 
}
 
prostotrader:

2. Se avete intenzione di emettere ilGetMicrosecondCount() accumulato, allora

farlo senza timer in OnDeinit(), quando EA esce, tutto verrà stampato.

Si può fare anche in questo modo, all'inizio l'ho fatto così per tenere traccia delle cose. Ma a causa del timer, OnTicks può essere saltato, ma OnBooks non dovrebbe esserlo, dato che sono garantiti. Forse non ho preso in considerazione qualcosa, forse non tutti i Tick avviano un cambiamento della tazza, cioè OnBook?
 
Aleksey Mavrin:
Sì, si può fare anche così, all'inizio l'ho fatto così per renderlo più chiaro. Ma a causa del timer OnTicks può essere saltato, ma OnBooks non dovrebbe, sono garantiti. Forse non ho tenuto conto di qualcosa, forse non tutti i Tick avviano un cambiamento del vetro, cioè OnBook?

Anche.

È necessario controllare i contatori:

void OnBookEvent(const string &symbol)
{ 
  if(curBook >= 65534) return;
  if((Mode != USE_BOOK) || (symbol != Symbol())) return;
  TimeArrayBook[curBook]=GetMicrosecondCount();
  curBook++
 }
void OnTick()
{
  if(curTick >= 65534) return;
  if(Mode != USE_TICK) return;
  TimeArrayTick[curTick]=GetMicrosecondCount();
  curTick++
}

A, quando si dichiarano gli array, fare quanto segue

ulong TimeArrayBook[
INT_MAX];

а инициализировать так
ArrayInitialize(TimeArrayBook, 0);

	          
 
prostotrader:

Anche.

Dobbiamo fare una controprova:

A, all'inizializzazione il numero dovrebbe essere65535 non65536

No, non è necessario. È fatto deliberatamente così per non controllare nulla. Sono Ushort. La dimensione dell'array è eccessiva, ma non influisce su nulla.
 
Aleksey Mavrin:

Chi può spiegare questo? Perché ci sono così tanti OnTick che vengono deregistrati e non un solo OnBook tra di loro?

Guarda l'ora del registro. Tutto questo è successo in un ms, e accanto ad esso (nello stesso ms) un mucchio di OnBooks.

Puoi contare tutti gli eventi con i contatori, ma anche visivamente puoi vedere che ci sono più OnBooks.