Um minuto e meio de diferença entre a hora local e a hora do novo tick. O que fazer. - página 3

 
pivomoe:

TimeCurrent() - O tempo do último tick em um personagem será menor do que o tempo de atraso, para que ele possa ser usado. Usar a hora local na primeira versão não foi uma boa idéia.

Whoa... bem, a versão atual também parece ser mal sucedida.

Vamos ler a definição de TimeCurrent():

TimeCurrent

Retorna a última hora conhecida do servidor, hora de chegada da última cotação por um dos símbolos selecionados em "Market Watch".

Um deles significa que o tempo mais freqüente (por simplicidade, o mais líquido) é exibido. E isto não é o que você quer. O que você precisa é SymbolInfoInteger( blah-blah, SYMBOL_TIME ). É o que parece.

 
Alexey Kozitsyn:

Whoa... dac, a versão atual parece estar falhando também.

Leia a definição de TimeCurrent():

Por um, significa que ele exibe o tempo das mudanças mais freqüentes (por simplicidade, o mais líquido). E isto não é o que você precisa. O que você precisa é SymbolInfoInteger( blah-blah, SYMBOL_TIME ). Eu acho que sim.

Foi assim que eu tentei que o prostotrader carregasse o que eu vejo o problema. Na última versão eu passo por todos os símbolos e tomo o tempo máximo do último tick recebido.

   for(int i=0; i<KolichestvoSimvolov; i++)     
   if( InformaziaOPoslednemTike[i].LastTick.time_msc > VremaySamogoSvegegoTikaPoVsemSimvolam ) VremaySamogoSvegegoTikaPoVsemSimvolam= InformaziaOPoslednemTike[i].LastTick.time_msc;
Alexey Kozitsyn:

Se alguém recebeu informações sobre um tick às 17:59:01, e eu não recebi nem mesmo às 18:00 - isso é um grande problema.

E aqui está a questão. Qual é o problema (e existe um)? No servidor do corretor, que não dá o tique (para todos) por muito tempo, ou no MT5, que não o recebe por muito tempo.

Por um lado, o tempo médio entre o "TimeCurrent" e o tempo de chegada do último tick é de 5 milissegundos, por outro lado há ticks que vêm com dezenas de segundos de queda. Por exemplo, de 18 a 25. Eu peguei um tique com um atraso de 45 segundos. E isso em algumas dezenas de símbolos não-líquidos.


+ a isto o termo problema pode ser exacerbado usando o CopyTicks para obter o último tick.
if(CopyTicks(Symbol(),ticks,COPY_TICKS_TRADE,0,1)==1) 

Não só é mais lento por vezes, mas pode ser executado no local por um segundo e meio.

Também entendi que o OnBookEvent é adequado apenas para o comércio com um símbolo.

 
pivomoe:

Foi assim que eu tentei que o prostotrader carregasse o que eu vejo como um problema. Na última versão eu passo por todos os símbolos e tomo o tempo máximo do último tick recebido.

Por um lado, o tempo médio entre o "TimeCurrent" e o tempo de chegada do último tick é de 5 milissegundos, por outro lado há ticks que vêm com uma queda em dezenas de segundos. Por exemplo, de 18 a 25. Eu peguei um tique com um atraso de 45 segundos. E isso em algumas dezenas de símbolos não-líquidos.


+ a isto o termo problema pode ser exacerbado usando o CopyTicks para obter o último tick.

Não só é mais lento por vezes, mas pode ser executado de forma plana por um segundo e meio.

Também entendi que o OnBookEvent é adequado apenas para o comércio com um símbolo.

Aqui estamos nós. Acontece que você acabou de entender que o vidro de mercado é formado para cada par de moedas separadamente, portanto, não é possível negociar em seus dados para pares diferentes.

Espero que você logo perceba que perseguir dados de vários gráficos em uma determinada seqüência, dada por você, não corresponde à seqüência de entrada de dados sobre novos tiquetaques em gráficos de diferentes pares de moedas.

Portanto, se EURUSD é verificado primeiro, e BTCUSD é verificado por último, e há dezenas de símbolos entre eles, o tempo de recebimento de carrapatos pode parecer com o seguinte

18:50:00.000; 18:48:59.018; 18:51:00.001; 18:47:59.000 poço e assim por diante. Sem nenhuma teoria de conspiração, MT's ou falhas do corretor. O que eles programaram é o que eles conseguiram.

 
Алексей Тарабанов:

Aqui estamos nós. Acontece que você acabou de perceber que o vidro é formado para cada par de moedas separadamente, de modo que não é possível negociar em seus dados para pares diferentes.

Espero que você logo perceba que perseguir dados de vários gráficos em uma determinada seqüência, dada por você, não corresponde à seqüência de entrada de dados sobre novos tiquetaques em gráficos de diferentes pares de moedas.

Portanto, se EURUSD é verificado primeiro, e BTCUSD é verificado por último, e há dezenas de símbolos entre eles, o tempo de recebimento de carrapatos pode parecer com o seguinte

18:50:00.000; 18:48:59.018; 18:51:00.001; 18:47:59.000 poço e assim por diante. Sem nenhuma teoria de conspiração, MT's ou falhas do corretor. O que nós programamos é o que temos.

Para pegar novos carrapatos via OnBookEvent eu me inspirei noprostotrade, que escreveu que "é mais correto". Eu não uso o tick em si, apenas subscrevo sua atualização para todos os símbolos no relatório de mercado.OnBookEven na verdade, eu o uso apenas para identificar o símbolo, pelo qual o tick foi atualizado. Depois é verificado se há um novo tick e então procuro se a EA definiu novos registros anti-registros. Essa éna verdade toda a função:

void OnBookEvent(const string &symbol)
  {   
   if( MestoPoluchenieTikov == ON_TIMER ) return;
//--- Ищем индекс символа для которого полученно событие OnBookEvent
   int IndeksSimvola= -1;
   for(  int i=0;  i < KolichestvoSimvolov; i++ )
   if(  symbol == GCInformaziaOPoslednemTike[i].Simvol  ) { IndeksSimvola= i; break; }
   
   if( IndeksSimvola== -1 ){Print(__FUNCTION__,"Не удалось найти символ по которому полученно событие OnBookEvent ");ExpertRemove();return;}
   
   bool PoluchiliNoviiTick= false;
          
    //--- Получаем тик заданным в настройках способом.
   if( SposobPoluchenieTikov == SYMBOL_INFO_TICK  ) PoluchiliNoviiTick= PolychaemNoviiTickSymbolInfoTick(GCInformaziaOPoslednemTike[IndeksSimvola]);
   if( SposobPoluchenieTikov == COPY_TICKS       )  PoluchiliNoviiTick= PolychaemNoviiTickCopyTicks(GCInformaziaOPoslednemTike[IndeksSimvola]);    
       
     //--- Смотрим не установлены ли новые рекорды.  
   if(  PoluchiliNoviiTick ) PitaemsayObnovitRekordi( GCInformaziaOPoslednemTike, IndeksSimvola );                 
   
   ObnovlaemInformacyyNaGrafikeEslePora();
 
  }   
Alexei Tarabanov:

Espero que você entenda que perseguir dados de diferentes vidros em uma determinada seqüência, dada por você, não corresponde à seqüência de entrada de dados sobre novos carrapatos em vidros de diferentes pares de moedas.

Pelo que entendi, se eu não receber um copo usando MarketBookGet, então eu não procuro nada. Talvez você simplesmente não tenha olhado meu código da segunda página.

 
pivomoe:

Tive a idéia de pegar novos carrapatos via OnBookEvent doprostotrade, que escreveu que é "mais correto". Eu não uso o tick em si, apenas subscrevo suas atualizações para todos os símbolos no relatório de mercado.OnBookEven Eu basicamente o uso apenas para identificar o símbolo no qual o tick foi atualizado. Depois é verificado se há um novo tick e então procuro se a EA definiu novos registros anti-registros. Essa éna verdade toda a função:

Pelo que entendi, se eu não conseguir o copo usando o MarketBookGet, então eu não verifico nada. Você provavelmente não olhou meu código a partir da segunda página.

O sinal MT não é processado até que o sinal anterior seja processado.

 
pivomoe:

Tive a idéia de pegar novos carrapatos via OnBookEvent doprostotrade, que escreveu que é "mais correto". Eu não uso o tick em si, apenas subscrevo suas atualizações para todos os símbolos no relatório de mercado.OnBookEven Eu basicamente o uso apenas para identificar o símbolo no qual o tick foi atualizado. Depois é verificado se há um novo tick e então procuro se a EA definiu novos registros anti-registros. Essa éna verdade toda a função:

Pelo que entendi, se eu não conseguir o copo usando o MarketBookGet, então eu não verifico nada. Você provavelmente não olhou meu código a partir da segunda página.

Eu não tenho.

 
pivomoe:

Sua lógica está bem, não dê ouvidos àqueles que passam por aqui.

1. Tente manter 3-5 instrumentos (um dos quais é ilíquido). Será que vai tocar?

2. Execute-o em uma máquina limpa, sem nenhum outro software usando a Internet. Será que isso vai se repetir?

3. Tente separar a captura de latência em diferentes EAs (1 por ferramenta).

Se o problema não está nos recursos (havia alguma limitação no número de fios alocados a um terminal), então o bug deve ser consertado.

 
Andrey Khatimlianskii:

Sua lógica está bem, não dê ouvidos àqueles que passam por aqui.

1. Tente manter 3-5 instrumentos (um dos quais é ilíquido). Será que vai tocar?

2. Execute-o em uma máquina limpa, sem nenhum outro software usando a Internet. Será que vai se repetir?

3. Tente separar a captura de latência em diferentes EAs (1 por ferramenta).

Se o problema não for com recursos (havia alguma limitação no número de fios alocados a um terminal), então o bug deve ser consertado.

Obrigado pela resposta. Hoje eu fiz um pequeno progresso na solução deste problema. É tratado com o comando Sleep() entre chamadas SymbolInfo(). Antes, eu apenas percorria toda a visão geral do mercado sem fazer uma pausa. Testei-o em 40 símbolos à noite. Se Dormir(5) então eu pego "novo tique", que deveria ter sido há dois segundos. Mas o Sleep(10) mostra um atraso de 400 milissegundos (devido ao Sleep(10) ( 40 símbolos *10 ). Tentei testá-lo em 4 dos símbolos mais líquidos nas Vésperas. Com Sleep(1) no delay at all.... tudo é perfeito. Aqui eu não entendo como pode ser, se o símbolo na revisão for pequeno SymbolInfo pode ser usado sem nenhuma pausa. E se o símbolo for uma grande necessidade de usar pausas.

Agora as respostas:

1) Em líquido à noite não é jogado.

2) Com 40 caracteres, ele se repete mesmo com o software desativado.

3) Eu não entendo o que você sugere. Pegar carrapatos novos de uma só vez de dois EAs em um terminal ?

ZZZ Agora estou cavando na direção da viabilidade de chamar a SymbolInfo. Por exemplo, consegui descobrir que mesmo um símbolo na visão geral do mercado não é capaz de enviar novos carrapatos com mais de 3,5 milissegundos de diferença (foi à noite, no entanto).

 
pivomoe:

1) Nas líquidas, não se reproduz nas vésperas.

2) Em 40 caracteres ele se repete mesmo com o software desativado.

3) Eu não entendo o que você está sugerindo. Pegar carrapatos novos de uma só vez de dois EAs em um terminal ?

ZZZ Agora estou cavando na direção da viabilidade de chamar a SymbolInfo. Por exemplo, consegui descobrir que mesmo um símbolo na visão geral do mercado não é capaz de dar carrapatos novos mais de 3,5 milissegundos (era à noite, no entanto).

1. Tente adicionar um ilíquido

3. Apanhar falhas para um instrumento de um EA. E executar 40 EAs.

 
pivomoe:

Obrigado por sua resposta. Hoje, fomos um pouco mais longe na solução deste problema. É tratado com o comando Sleep() entre chamadas SymbolInfo(). Anteriormente, eu apenas percorria toda a visão geral do mercado sem fazer uma pausa. Testei-o em 40 símbolos à noite. Se Dormir(5) então eu pego "novo tique", que deveria ter sido há dois segundos. Mas o Sleep(10) mostra um atraso de 400 milissegundos (devido ao Sleep(10) ( 40 símbolos *10 ). Tentei testá-lo em 4 símbolos mais líquidos nas Vésperas. Com Sleep(1) no delay at all.... tudo é perfeito. Aqui eu não entendo como pode ser, se o símbolo na revisão for pequeno SymbolInfo pode ser usado sem nenhuma pausa. E se você tem muitos personagens, você tem que usar pausas.

Por favor, me forneça um pedaço de código que apanhe atrasos. Aqui mesmo, através do botão de inserção de código.