Pergunta sobre citações de FORTS - página 3

 

É aconselhável manter o tempo do computador preciso, para que haja menos chances de errar os registros.

Obrigado pelo roteiro: aqui estão os resultados deste roteiro em 1 minuto 17:36

CollectTicks (ED-12.14,M1)      2014.11.10 17:36:06; Bid = 1.2474; Ask = 1.2475; Last = 1.2476; Vol = 3
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:06; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 3
 CollectTicks (ED-12.14,M1)      2014.11.10 17:36:12; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:26; Bid = 1.2474; Ask = 1.2475; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:28; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:29; Bid = 1.2474; Ask = 1.2476; Last = 1.2474; Vol = 8
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:29; Bid = 1.2473; Ask = 1.2475; Last = 1.2474; Vol = 8
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:30; Bid = 1.2473; Ask = 1.2474; Last = 1.2473; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:30; Bid = 1.2472; Ask = 1.2474; Last = 1.2473; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:43; Bid = 1.2472; Ask = 1.2474; Last = 1.2474; Vol = 2

A peculiaridade da OnTick é que ela reage tanto às mudanças Bid/Ask (fluxo de informações) quanto Last (fluxo comercial).

Como resultado, o número de chamadas OnTick para instrumentos negociados em bolsa é intencionalmente maior do que o número de transações comerciais.

Por que isso é feito dessa maneira?

  1. você não pode sufocar um Expert Advisor somente com transações comerciais e não lhe dar informações sobre mudanças no mercado (uma coisa é chamá-lo 5 vezes, e outra coisa é chamá-lo 15 vezes)
  2. é impossível dar zero último e último_volume na revisão do mercado ao vivo, porque alguns comerciantes vão explodir


Há outra coisa com o fato de que nas atualizações de lote, quando dois ou mais ticks em um instrumento chegam ao mesmo tempo, o OnTick é chamado uma vez. Isto nos permite não retardar o fluxo das cotações recebidas e não fazer uma fila enorme de carrapatos para os Expert Advisors lentos.

Em breve habilitaremos o fluxo de Tempo e Vendas, o que nos permitirá analisar com precisão a alimentação do comércio.

 
Renat:

É aconselhável manter o tempo do computador preciso, para que haja menos chances de errar os registros.

Obrigado pelo roteiro: aqui estão os resultados deste roteiro em 1 minuto 17:36

A peculiaridade da OnTick é que ela reage tanto às mudanças Bid/Ask (fluxo de informações) quanto Last (fluxo comercial).

Como resultado, o número de chamadas OnTick para instrumentos negociados em bolsa é intencionalmente maior do que o número de transações comerciais.

Por que isso é feito dessa maneira?

  1. você não pode sufocar um Expert Advisor somente com transações comerciais e não lhe dar informações sobre mudanças no mercado (uma coisa é chamá-lo 5 vezes, e outra coisa é chamá-lo 15 vezes)
  2. é impossível dar zero último e último_volume na revisão do mercado ao vivo, porque alguns comerciantes vão explodir


Há outra coisa com o fato de que nas atualizações de lote, quando dois ou mais tiquetaques por ferramenta chegam ao mesmo tempo, então o OnTick é chamado uma vez. Isto permite que você não atrase o fluxo de entrada de cotações e não faça uma fila enorme de carrapatos para diminuir a velocidade dos EAs.

Em breve incluiremos um fluxo de Tempo & Vendas, que nos dará a capacidade de analisar com precisão a fita adesiva dos ofícios.

Tudo isso é ótimo, é claro, mas para FORTS, onde há pilhas, uma bandeira de citação deveria ter sido adicionada à estrutura do MqlTick.

A "multiplicação" de ofícios não é terrível - o pior é que os verdadeiros ofícios estão perdidos.

P.S. Meu BAN está relacionado ao meu endereço IP, por favor, remova-o, caso contrário, terei que reinstalar meu navegador toda vez que responder a você.

 

Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.

Esta abordagem resulta no seguinte:

Como deve ser:

Papel Tempo(mcs) Preço Qtd.

317922.000000 RTS-12.14 [FORTALEZAS] 18:44:54 199000.000000 104140.000000 1.000000

317923.000000 RTS-12.14 [FORTALEZAS] 18:44:54 261000.000000 104130.000000 1.000000
317924.000000 RTS-12.14 [FORTALEZAS] 18:44:54 587000.000000 104140.000000 1.000000
317925.000000 RTS-12.14 [FORTALEZAS] 18:44:54 589000.000000 104140.000000 1.000000
317926.000000 RTS-12.14 [FORTALEZAS] 18:44:54 691000.000000 104140.000000 1.000000
317927.000000 RTS-12.14 [FORTALEZAS] 18:44:54 691000.000000 104140.000000 1.000000
317928.000000 RTS-12.14 [FORTALEZAS] 18:44:54 842000.000000 104130.000000 2.000000
317929.000000 RTS-12.14 [FORTALEZAS] 18:44:54 919000.000000 104150.000000 1.000000
317930.000000 RTS-12.14 [FORTALEZAS] 18:44:55 337000.000000 104150.000000 1.000000
317931.000000 RTS-12.14 [FORTALEZAS] 18:44:55 337000.000000 104150.000000 1.000000
317932.000000 RTS-12.14 [FORTALEZAS] 18:44:55 337000.000000 104160.000000 1.000000
317933.000000 RTS-12.14 [FORTALEZAS] 18:44:55 337000.000000 104160.000000 1.000000
317934.000000 RTS-12.14 [FORTALEZAS] 18:44:55 337000.000000 104160.000000 3.000000
317935.000000 RTS-12.14 [FORTALEZAS] 18:44:55 375000.000000 104140.000000 1.000000
317936.000000 RTS-12.14 [FORTALEZAS] 18:44:55 375000.000000 104130.000000 5.000000
317937.000000 RTS-12.14 [FORTALEZAS] 18:44:55 796000.000000 104130.000000 1.000000
317938.000000 RTS-12.14 [FORTALEZAS] 18:44:55 799000.000000 104130.000000 2.000000
317939.000000 RTS-12.14 [FORTALEZAS] 18:44:56 54000.000000 104160.000000 1.000000
317940.000000 RTS-12.14 [FORTALEZAS] 18:44:57 235000.000000 104160.000000 1.000000
317941.000000 RTS-12.14 [FORTALEZAS] 18:44:57 451000.000000 104140.000000 2.000000
317942.000000 RTS-12.14 [FORTALEZAS] 18:44:57 487000.000000 104140.000000 6.000000
317943.000000 RTS-12.14 [FORTALEZAS] 18:44:57 521000.000000 104160.000000 1.000000
317944.000000 RTS-12.14 [FORTALEZAS] 18:44:57 621000.000000 104160.000000 1.000000
317945.000000 RTS-12.14 [FORTALEZAS] 18:44:58 38000.000000 104160.000000 3.000000
317946.000000 RTS-12.14 [FORTS] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12.14 [FORTALEZAS] 18:44:58 883000.000000 104140.000000 2.000000

317948.000000 RTS-12.14 [FORTALEZAS] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 RTS-12.14 [FORTALEZAS] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 RTS-12.14 [FORTS] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 RTS-12.14 [FORTS] 18:44:58 996000.000000 104160.000000 1.000000
317953.000000 RTS-12.14 [FORTALEZAS] 18:44:59 56000.000000 104160.000000 1.000000
317954.000000 RTS-12.14 [FORTALEZAS] 18:44:59 560000.000000 104140.000000 1.000000
317955.000000 RTS-12.14 [FORTALEZAS] 18:44:59 604000.000000 104140.000000 1.000000
317956.000000 RTS-12.14 [FORTALEZAS] 18:44:59 647000.000000 104160.000000 1.000000


À medida que entramos no MT5:

NE 0 18:44:54.483 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:54 Bid = 104130 Ask = 104150 Last = 104140 Vol = 1
ES 0 18:44:54.639 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:54 Bid = 104130 Ask = 104150 Last = 104130 Vol = 2
OU 0 18:44:54.720 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:54 Bid = 104130 Ask = 104150 Last = 104150 Vol = 1
NQ 0 18:44:54.983 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104140 Ask = 104150 Last = 104150 Vol = 1
FP 0 18:44:55.139 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104140 Ask = 104160 Last = 104160 Vol = 3
JO 0 18:44:55.174 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104140 Ask = 104160 Last = 104130 Vol = 5
GN 0 18:44:55.206 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 5
RM 0 18:44:55.592 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 2
IL 0 18:44:55.891 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:56 Bid = 104130 Ask = 104160 Last = 104160 Vol = 1
HJ 0 18:44:55.921 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:56 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
RI 0 18:44:57.032 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
PH 0 18:44:57.242 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 2
FG 0 18:44:57.297 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 6
PF 0 18:44:57.328 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
JE 0 18:44:57.436 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
PD 0 18:44:57.838 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:58 Licitação = 104140 Pedir = 104160 Último = 104160 Vol = 3
DP 0 18:44:58.514 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 13
RR 0 18:44:58693 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:58 Bid = 104140 Ask = 104160 Last = 104140 Vol = 2
JP 0 18:44:58795 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
CO 0 18:44:58.852 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
GN 0 18:44:59.358 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
MM 0 18:44:59.406 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
IL 0 18:44:59.453 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
CK 0 18:50:31.437 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:50:24 Bid = 0 Ask = 0 Last = 104160 Vol = 1
KH 0 18:50:33.357 FORTSTicksAction (RTS-12.14,M1) Tempo = 18:50:24 Licitação = 104080 Perguntar = 104180 Último = 104160 Vol = 1


Todos estes são os últimos pouco antes do encerramento da sessão (ou seja, não há aspas mais baixas até o final da limpeza).

Como ponto de partida, vamos tomar as três linhas marcadas em preto. Há duas perguntas:

1. Para onde foram os destacados em vermelho?

2.de onde veio o destaque em azul?


Outra pergunta (opcional) - que intervalo de tempo significa "chegada simultânea"?

 
Dima_S:

Esta abordagem resulta no seguinte:

317945.000000 RTS-12.14 [FORTALEZAS] 18:44:58 38000.000000 104160.000000 3.000000
317946.000000 RTS-12.14 [FORTS] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12.14 [FORTALEZAS] 18:44:58 883000.000000 104140.000000 2.000000

317948.000000 RTS-12.14 [FORTALEZAS] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 RTS-12.14 [FORTALEZAS] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 RTS-12.14 [FORTS] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 RTS-12.14 [FORTS] 18:44:58 996000.000000 104160.000000 1.000000



Estas são todas as últimas pouco antes do encerramento da sessão (ou seja, sem aspas mais baixas até o final da limpeza).

Tomemos como ponto de partida as três linhas destacadas em preto. Há duas perguntas:

1. Para onde foram os destacados em vermelho?

Eles vieram em um pacote de rede muito provavelmente e foram chamados como um OnTick. Houve 8 ticks em um segundo, três deles foram chamadas individuais, e os últimos 5 provavelmente vieram em um pacote com a última cotação mostrada como Último.


2.de onde veio o destaque azul?

Isto é pós-mercado. Também damos a capacidade de capturar eventos pós-mercado. É aí que a retirada das propostas geralmente só funciona.


Outra pergunta (opcional) - que intervalo de tempo significa "chegada simultânea"?

Não é um intervalo, mas sim um pacote físico de rede. Um pacote chega em 2-3-4 ticks, todos eles são sobrepostos na base, mas a chamada OnTick vai uma vez.

Há também uma chance de que o Expert Advisor possa ser retardado (ocupado) e uma nova cotação seja adicionada ao banco de dados, mas o OnTick não é chamado, uma vez que o Expert Advisor está trabalhando. Se não houvesse tal mecanismo, facilmente transbordaríamos as filas de entrada de cotações para o Consultor Especialista e começaríamos a enviar as cotações antigas para ele.

 

Renat!

Muito obrigado pela explicação detalhada, mas...

Parece-me que tal abordagem é inaceitável para os FORTS.

Deve ser: Citação - volume, e nada mais.

Havia 11 citações, portanto, deveria haver 11 delas no OnTick.

Não é assim?

 

Errado.

Não confunda a questão de entregar fluxos de dados corretos e precisos ao terminal com a de chamar/notificar especialistas.

Todos os dados são entregues de forma precisa e correta no terminal, sua base. Basta comparar os gráficos.

Por outro lado, o início do Expert Advisor é uma notificação independente e assíncrona. Os pacotes de dados recebidos não podem esperar por alguns especialistas lentos, mas devem ser aplicados instantaneamente ao ambiente do mercado e somente opcionalmente (se o especialista tiver terminado a chamada anterior) executar especialista.

Pense na situação: um fluxo de cotações 2 por segundo e um Expert Advisor funcional, que está freando, faz negócios, mas exige que as novas cotações de espera na fila não sejam impostas no ambiente de mercado do terminal, até que a EA termine seu trabalho.

Você pode ver aonde isso levaria? O terminal inteiro começará a atrasar todos os processos por causa da idéia tola de manter uma visão de mercado sobre o estado da cotação que está sendo processada. E se você pensar em outros instrumentos, basta atirar em você mesmo.

É por isso que a sobreposição de atualizações de mercado é sempre uma prioridade, instantânea e independente de outros processos. Todos os outros devem acompanhar o mercado de forma assíncrona.

 
Renat:

Errado.

Não confundir a questão de entregar fluxos de dados corretos e precisos ao terminal com a de chamar/notificar especialistas.

Todos os dados são entregues de forma precisa e correta no terminal, sua base. Basta comparar os gráficos.

Por outro lado, o início do Expert Advisor é uma notificação independente e assíncrona. Os pacotes de dados recebidos não podem esperar por alguns especialistas lentos, mas devem ser aplicados instantaneamente ao ambiente do mercado e somente opcionalmente (se o especialista tiver terminado a chamada anterior) executar especialista.

Pense na situação: um fluxo de cotações 2 por segundo e o trabalho do Expert Advisor, que abranda, faz negócios, mas exige que as novas cotações de espera na fila não sejam impostas no ambiente de mercado do terminal, até que a EA termine seu trabalho.

Você pode ver aonde isso levaria? O terminal inteiro começará a atrasar todos os processos por causa da idéia tola de manter uma visão de mercado sobre o estado da cotação que está sendo processada. E se você pensar em outros instrumentos, basta atirar em você mesmo.

É por isso que a sobreposição de atualizações de mercado é sempre uma prioridade, instantânea e independente de outros processos. Todos os outros devem acompanhar o mercado de forma assíncrona.

Discorda.

Digamos que eu não uso o copo (lance e pergunte estão no carrapato)

Que idéia sobre a situação do mercado FORTS eu (um especialista) terei sem conhecer a cotação

e volume?

De fato, para FORTS, não podemos passar na licitação e perguntar (eles estão no ticker).

As mudanças no código são mínimas - lance e peça não são passadas para o mercado.

 
Mikalas:

Eu discordo.

Releia minha explicação várias vezes, por favor.

Digamos que eu não uso um livro de tarifas (lance e pergunte estão no carrapato)

Que visão do mercado FORTS I (o especialista) terá com uma cotação que não é clara

Com a atual cotação atualizada de forma assíncrona e nenhuma outra.

Se você foi chamado, é isso - apenas a cotação que você tem no pacote está na sua frente. Se houver 2 cotações no lote, você verá apenas a última. Pois ninguém passará a primeira citação ao Expert Advisor e esperará até que o Expert Advisor termine a operação. A velha citação desapareceu e, se você não a pegou a tempo de resolver o problema, significa que o trem já passou. Usando essa velha citação, você não poderá executar nada. E a atual/última também é duvidosa para ser executada, pois o mercado pode ter mudado no momento do envio da ordem.

Nenhum "não traduza bid/ask" vai ajudar. Os carrapatos obsoletos são carrapatos obsoletos - ninguém congelará o mercado e não deixará você trabalhar com carrapatos velhos.

Se você quiser, você pode:

  1. colocar o terminal em colocação mais próximo do corretor em um computador de alta velocidade e pegar cada vez mais
  2. loop the EA, constantemente escanear o mercado e observar o mercado para obter tudo com mais freqüência.
  3. analisar o gráfico, analisar o mercado

Juntamente com o Time & Sales, pensaremos em fornecer acesso direto ao último tick price stream, para que você possa acessar ticks consecutivos. Na análise do mercado, nós o coletamos em sessão. Isto dará mais oportunidades para os escalpadores.

 

Renat:

Junto com o Time & Sales, consideraremos a possibilidade de fornecer acesso direto ao último tick price stream, para que tiquetaques consistentes possam ser acessados. Em Market Watch, coletamos em sessão. Isto dará mais oportunidades para os escalpadores.

É a única solução aceitável. Espera-se que haja filas de fila para determinados símbolos. Isto resolverá outro problema, insolúvel dentro deste modelo de evento, de obter citações sem perdas para outros símbolos que não o símbolo EA.
 

Eu ainda tenho minhas dúvidas.

Vou colocar isto em ação:

//+------------------------------------------------------------------+
//|                                                    Kotirovki.mq5 |
//|                                                   Copyright 2014 |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Mikalas"
#property link      "http://www.mql5.com"
#property version   "1.02"
//
MqlTick curr_tick;
double  start_last   = 0;
double  start_bid    = 0;
double  start_ask    = 0; 
ulong   start_volume = 0;  
//  
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit( const int reason )
{

}
//+------------------------------------------------------------------+
//| Expert On Tick event function                                    |
//+------------------------------------------------------------------+  
void OnTick()
{
  if ( SymbolInfoTick( _Symbol, curr_tick ) )
  {
    if ( start_last == curr_tick.last )
    {
      if ( start_volume == curr_tick.volume )
      {
        if ( ( start_ask == curr_tick.ask ) &&
             ( start_bid == curr_tick.bid )  )
        {
          Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                                 "; Ask = ", curr_tick.ask,
                                 "; Last = ", curr_tick.last,
                                 "; Vol = ", curr_tick.volume, "; Новая котировка(Всё одинаковое)" );
        }
        else
        {
          start_ask = curr_tick.ask;
          start_bid = curr_tick.bid;
          Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                                 "; Ask = ", curr_tick.ask,
                                 "; Last = ", curr_tick.last,
                                 "; Vol = ", curr_tick.volume, "; Изменение ask или bid? Или же новая котировка?" );
        }
      }
      else
      {
        start_last = curr_tick.last;
        start_volume = curr_tick.volume;
        start_ask = curr_tick.ask;
        start_bid = curr_tick.bid;
        Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                               "; Ask = ", curr_tick.ask,
                               "; Last = ", curr_tick.last,
                               "; Vol = ", curr_tick.volume, "Новая котировка (Изменён объём)!" );
      }
    }
    else
    {
      start_last = curr_tick.last;
      start_volume = curr_tick.volume;
      start_ask = curr_tick.ask;
      start_bid = curr_tick.bid;
      Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                             "; Ask = ", curr_tick.ask,
                             "; Last = ", curr_tick.last,
                             "; Vol = ", curr_tick.volume, "Новая котировка! (Изменена котировка)" );
    }
  }
}

E amanhã veremos o que acontece...

Arquivos anexados:
Kotirovki.ex5  5 kb