Tiki em tempo real - página 20

 
Roman:

Você fez uma bagunça de tudo.

Como escrevi anteriormente, as negociações e o nível2 são assinaturas de dados diferentes, portanto, são manipuladores de eventos diferentes.
É por isso que as negociações precisam ser chamadas da OnTick, e as gangues de volume da OnBook.
Você está tentando ligar para as negociações de eventos OnBook e gangues da OnTick. Pensando sempre que o OnBook será mais rápido para as negociações.
Não será mais rápido, eu acho que é uma ilusão comparar dois manipuladores de eventos destinados a cada um dos diferentes fios de dados.
Entendo que tudo isso é experimentação, mas sem entender a lógica dos soquetes você confundirá infinitamente esses manipuladores OnTick e OnBook.

Eu já escrevi, caso você não tenha visto, "para mim não há alternativa ao OnBookEvent()".

E todos os códigos, resultados, explicações - para deixar claro o porquê.

A julgar pelo seu posto - você não entende... :)

Talvez você esteja lendo a mensagem?

Posso obter todos os dados rápida e facilmente através do OnBookEvent() sem usar o OnTick().

mas não consigo obter todos os dados com OnTick(). Então por que eu deveria usar OnTick()?

 
prostotrader:

Eu já escrevi, caso você não tenha visto, "para mim não há alternativa ao OnBookEvent()".

E todos os códigos, resultados, explicações - para deixar claro o porquê.

A julgar pelo seu posto - não está claro para você... :)

Talvez você esteja lendo sobre o tema?

Sim, entendo que no seu caso não há alternativa, e com razão.
E eu entendo do que você está falando. Só queria enfatizar este ponto, que as trocas e o Level2 são fluxos de dados diferentes.
Temos que lembrar disso, e aqueles que não sabem sobre ele devem saber.
É por isso que se você precisar de ofícios, você deve chamar as funções necessárias para isso da OnTick,
Se você precisar de lances asc com volume, ou profundidade de um copo, então as funções apropriadas devem ser chamadas do OnBook.
Não é correto pegar eventos da OnBook e obter negócios, e tentar obter volumes ou profundidade dos eventos OnTick.
E assim entendo que você está apenas explicando aos outros e fazendo experiências ao longo do caminho.

 
Roman:



E assim entendi que você está apenas explicando aos outros, e fazendo experiências ao longo do caminho.

Você tem esse direito.

Acabei de fazer experiências semelhantes há 7 anos, escolhi OnbookEvent().

E agora decidi verificar se algo mudou... Não tem.

 
prostotrader:

O fato é que o Mercado de Derivativos (FORTS), mesmo em instrumentos "altamente líquidos", é muito fraco,

Isso significa que você pode comprar umnúmero muitolimitado de contratos ao preço certo, portanto, você não precisa apenas do preço,

O volume de contratos a este preço é muito importante.


E a SymbolInfo não dá o volume deste preço.

Portanto, precisamos usar oMarketBookGet() que fornece tanto o preço quanto o volume para o livro inteiro.

O que isso tem a ver com o assunto? Essa é a única razão pela qual estou preso. Não preciso do OnBook para receber carrapatos, porque o OnTick definitivamente não é mais lento.

E por que dizer 20 vezes cada uma delas sobre a indispensabilidade da OnBook? Há alguém duvidando disso?


prostotrader:

E eu não concordo que quando OnTck() é acionado, podemos receber carrapatos da história.

Lembrando o último tick time, quando OnTck() é acionado, podemos obter os ticks

um novo tick(s) veio em tempo real - OnTck() é acionado, nós o lemos imediatamente, ou seja, não é história.

Qualquer carrapato que entre no terminal já é passado.

Mas eu não estava falando sobre isso, mas sobre construir a fita sem lacunas(SymbolInfoTick não vai ajudar).

 
Aleksey Mavrin:

Queria colocar o código para testar primeiro

Mas eu não posso abrir a conta de abertura de demonstração para algo. O tempo provavelmente está fora de ordem, ou há mais complicações?

Tiki em tempo real

prostotrader, 2020.01.31 13:18

Conta : 1007932

Investidor FfiR87ty (leia somente a senha)
 
Andrey Khatimlianskii:

O que isso tem a ver com o tema? Essa é a única razão pela qual estou me metendo nisso, você não precisa do OnBook para receber carrapatos, pois o OnTick definitivamente não é mais lento.

E por que dizer 20 vezes cada uma delas sobre a indispensabilidade da OnBook? Há alguém duvidando disso?

Qualquer carrapato que entre no terminal é passado.

Mas não era disso que eu estava falando, eu estava falando em construir uma fita sem saltos (SymbolInfoTick não vai ajudar com isso).

Vocês parecem se entender mal :)))
Ele lhe fala sobre os melhores processos de licitação com volume, e você lhe fala sobre negócios e negócios :))
Tudo bem, acho que já esclarecemos tudo.

Bem, depende de como você olha para o próximo tique - isto é história.
Se para o servidor da troca, então sim é história, para o terminal não é assim.
Porque o terminal das lojas OnTick armazena os últimos 4096 registros em cache, para acesso quente a eles, e depois os descarrega no histórico para o disco.
Acontece então que ainda não é bem história )), ou seja, o desligamento de emergência não salvará o cache em disco.
E quando o terminal voltar a funcionar, os dados perdidos no cache serão baixados do servidor. Mas isto só se aplica aos dados da OnTick.
O OnBook provavelmente não irá carregar os dados.

 

Pensei que havia pelo menos um OnBook para cada OnTick. mas depois não entendi isso


 

Coloque este código na demonstração de abertura para calcular o atraso médio e máximo entre o OnTick e o próximo OnBook.

O código está em mãos, pode estar torto, vou dar uma olhada nos resultados.

//+------------------------------------------------------------------+
//|                                                   TestOnBook.mq5 |
//|                                           Copyright 2019, Allex@ |
//|                                                 alex-all@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, Allex@"
#property link      "alex-all@mail.ru"
#property version   "1.00"
//---
bool is_book;
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK        // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;
input int   SecForPrint =  300;
//---
ulong TimeArrayBook[65536];
ulong TimeArrayTick[65536];
ushort curBook,curTick;
ulong  DelaySum=0,DelayCount=0;
int delay,delayMax=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   curBook=0;
   curTick=0; 
   ArrayInitialize(TimeArrayBook,INT_MAX);
   ArrayInitialize(TimeArrayTick,INT_MAX);
  if(Mode == USE_BOOK) is_book = MarketBookAdd(Symbol());
  if (EventSetTimer(SecForPrint)) 
  return(INIT_SUCCEEDED);
  else return (INIT_FAILED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(Mode == USE_BOOK)
  {
    if(is_book == true) MarketBookRelease(Symbol());
  }  
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{ 
  TimeArrayBook[curBook++]=GetMicrosecondCount();
 }
void OnTick()
{
  TimeArrayTick[curTick++]=GetMicrosecondCount();
}
//+------------------------------------------------------------------+
void OnTimer()
  {
   string out=NULL;
   int total=MathMax(curBook,curTick);
   int i=0,k=0;
   while(i<total)
     {
      while(i<total && TimeArrayBook[i]<TimeArrayTick[k] )
        {
          Print("Book ",TimeArrayBook[i++]);
        }    
      if(k<curTick-1)
        {
        if(i<total)
          {
           delay=TimeArrayBook[i]-TimeArrayTick[k];
           if (delay>delayMax) 
            delayMax=delay;
           if (delay>0)
              {
                 DelaySum+=delay;
                 DelayCount++;
              }
          }
         Print("Tick ",TimeArrayTick[k++]);
        }       
        i++;
     }
     if (curTick>0)
     {
     Print("Tick ",TimeArrayTick[curTick-1], " last");
     string out="Count Event Book after Tick "+DelayCount+". Delay Average "+DoubleToString(DelaySum/DelayCount,2)+". Max "+delayMax;
     Print (out);
     Comment(out);
     }
     curBook=0;
     curTick=0;
  }
//---  
 
Andrey Khatimlianskii:

Qualquer carrapato que entre no terminal já é uma história.

Mas não era disso que eu estava falando, eu estava falando em construir uma fita sem saltos (SymbolInfoTick não vai ajudar com isso).

Ok. Seu ponto de vista sobre a história é bastante claro.

Mas ainda mantenho minha opinião, de que o método para obter os carrapatos dependerá

sua leitura (a partir da história ou em tempo real).

E eu não discordei de você sobre SymbolInfoTick e a fita sem pulos.

 

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 OnTickers estão sem funcionar, e não há um único OnBook entre eles?