Tiki em tempo real - página 21

 
Aleksey Mavrin:

Essa é a imagem do dia. É claro que não verificamos se o OnBook correspondia ao Tick, mas apenas pegamos o próximo, esperando que se o OnTick estivesse à frente do OnBook, então o correspondente seria o mesmo ou um pouco mais tarde.

O máximo, é claro, sem verificações adicionais não é indicador, ou excesso ou realmente OnBook em algum lugar lento.


Mas este é alguém que pode explicar? Por que tantos OnTicks são implantados, e nem um único OnBook se encaixa entre eles?


Porque você mesmo escreveu"O código está torto, talvez esteja torto, vou olhar para os resultados". "

//+------------------------------------------------------------------+
//| 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 você não precisa de nenhum temporizador...

 
Mas me pergunto se o responsável está satisfeito com as respostas à sua pergunta.
 
prostotrader:

Porque você mesmo escreveu: "O código está torto, talvez esteja torto, vou olhar para os resultados". "

E você não precisa de nenhum temporizador...

Você não descobriu que a razão era por causa de erros no código. Ou você não entendeu a pergunta. Eu tenho uma marca nas funções On, sem temporizador, mas ainda há um monte de carrapatos entre os quais não há OnBooks.
 
Aleksey Mavrin:
Você não descobriu que a causa é devido a erros no código. Ou você não entendeu a pergunta. Eu também acabei de imprimir uma marca nas funções On, sem temporizador, ainda há uma multidão de carrapatos entre os quais não há OnBooks.

1. Não está nada claro para mim como você dirigiu a(s) EA(s)

2. Existem 2 códigos escritos por Andrei e por mim que

Eles secorroboram um ao outro. Então, por que se preocupar com o seu?

3. tanto Andrey e eu temos administrado EAs no mercado de Derivativos, e você no mercado de Ações.

Talvez o terminal tenha algumas falhas no Fundo (Nem sequer rodou o MT5 no mercado de ações).

Pessoalmente, no Fundo, eu negocio via Quick

 
prostotrader:

1. Não está nada claro para mim como você dirigiu a(s) EA(s)

2. Existem 2 códigos escritos por Andrei e por mim que

Eles se corroboram um ao outro. Então, por que se preocupar com o seu?

3. tanto Andrey e eu temos administrado EAs no mercado de Derivativos, e você no mercado de Ações.

Talvez o terminal tenha algumas falhas no Fundo (Nem sequer rodou o MT5 no mercado de ações).

Pessoalmente, no Fundo, eu negocio através do Quick

Ah, estou vendo. Tentarei amanhã nos futuros. Por que você não usa o mt5 no fundo? Há alguma desvantagem?
Z.s. O código lá é de 3 linhas) apenas fixa o tempo msk sem nenhuma verificação para que a fila não seja atrasada de forma alguma pelo manipulador, e no timer imprime e conta o atraso. Eu também não entendi bem seu código, o princípio geral de funcionamento já está claro a partir da saída.
 
Aleksey Mavrin:
1. Ah, estou vendo. Amanhã vou experimentá-lo em um futuro. Por que você não usa o MT5 no fundo? Você tem alguma desvantagem?
S.s. O código lá é de 3 linhas) apenas fixa o tempo msc sem nenhuma verificação para que a fila não seja atrasada de forma alguma pelo manipulador, e no timer imprime-o e conta o atraso. Eu também não entendi bem seu código, o princípio geral de funcionamento já está claro a partir da saída.

1. O segundo e seguintes terminais no corretor são pagos, e não tenho estratégias onde negocio somente ações(carteiras de ações).

2. Se você vai emitir aGetMicrosecondCount() acumulada, então

fazê-lo sem temporizador no OnDeinit(), quando a EA sair, tudo será impresso.

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

2. Se você vai emitir aGetMicrosecondCount() acumulada, então

fazê-lo sem temporizador no OnDeinit(), quando a EA sair, tudo será impresso.

Você também pode fazer isso dessa maneira, inicialmente eu fiz dessa maneira para manter o controle das coisas. Mas devido ao temporizador, OnTicks pode ser pulado, mas OnBooks não deve ser, pois eles são garantidos. Talvez eu não tenha levado algo em conta, talvez nem todos os Ticks iniciem uma mudança do copo, ou seja, OnBook?
 
Aleksey Mavrin:
Sim, você também pode fazer dessa maneira, eu o fiz originalmente para torná-lo mais claro. Mas por causa do temporizador OnTicks pode ser pulado, mas OnBooks não deve, eles são garantidos. Talvez eu não tenha levado algo em conta, talvez nem todos os Ticks iniciem uma mudança do copo, ou seja, OnBook?

Também.

Você precisa verificar os balcões:

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, ao declarar as matrizes, faça o seguinte

ulong TimeArrayBook[
INT_MAX];

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

	          
 
prostotrader:

Também.

Precisamos fazer um contra-cheque:

A, na inicialização o número deve ser65535 e não65536

Não, não é necessário. É deliberadamente feito dessa forma para não verificar nada. Eles são Ushort. O tamanho da matriz é excessivo, mas não afeta nada.
 
Aleksey Mavrin:

Quem pode explicar isto? Por que tantos OnTicks estão sendo desregistados e não há um único OnBook entre eles?

Veja a hora do registro. Tudo isso aconteceu em um ms, e ao lado dele (no mesmo ms) um monte de OnBooks.

Você pode contar todos os eventos por balcões, mas mesmo visualmente você pode ver que há mais OnBooks.

Razão: