Testando 'CopyTicks'. - página 43

 
fxsaber:
Diante de um bug quando CopyTicksRange devolve todos os ticks solicitados corretamente, mas com LastError == ERR_HISTORY_TIMEOUT(4403).


Não é um bug, é uma característica. É o mesmo com o CopyTicks, às vezes. Eu ainda não descobri como usar esta "coisa".

na descrição da função CopyTicksRange:

ERR_HISTORY_TIMEOUT – время ожидание синхронизации тиков вышло, функция отдала всё что было.

Naturalmente, gostaria que os desenvolvedores explicassem o que este erro significa quando um tick é recebido com a função CopyTicks. Como lidar com este erro. ps: Eu o chamo em um indicador

 

Por favor, informe quais dados precisam ser fornecidos para resolver este problema o mais rápido possível.

void OnStart()
{
  MqlTick Ticks[];

  Print(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:29' * 1000, (ulong)D'2020.04.11' * 1000)); // 8192
  Print(_LastError); // 4407

  ResetLastError();

  MqlTick Ticks2[];

  Print(CopyTicksRange(_Symbol, Ticks2, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:30' * 1000)); // 131066
  Print(_LastError); // 0
}


O Tiki não está copiando, dando um erro.

Constante

Valor

Descrição

ERR_HISTORY_SMALL_BUFFER

4407

Recebendo matriz muito pequena para conter todos os dados solicitados


É impossível trabalhar corretamente com tais surpresas!


Através da GUI (CTRL+U) os carrapatos são levados sem nenhum problema.

Cadeia de busca: Oshibka 007.
 
fxsaber:

Por favor, informe quais dados precisam ser fornecidos para resolver este problema o mais rápido possível.

O Tiki não está copiando, dando um erro.

Constante

Valor

Descrição

ERR_HISTORY_SMALL_BUFFER

4407

Recebendo matriz muito pequena para conter todos os dados solicitados

Testado localmente de várias maneiras - até agora sem reprodução. Precisa de mais detalhes:

1. Qual versão do terminal?

2. Com que servidor você está trabalhando?

3) Em qual personagem o roteiro é chamado?

4. Se não for chamado com COPY_TICKS_INFO mas com COPY_TICKS_ALL é o erro ERR_HISTORY_SMALL_BUFFER também definido?

Obrigado!

 
Anton:

Testado localmente de várias maneiras - até agora sem reprodução. Precisa de detalhes:

1. Qual versão do terminal?

2. Com que servidor você está trabalhando?

3) Em qual personagem o roteiro é chamado?

4. Se você não o chamar com COPY_TICKS_INFO mas com COPY_TICKS_ALL, o erro ERR_HISTORY_SMALL_BUFFER também será levantado?

Obrigado!

  1. 2380.
  2. Qualquer servidor - ver ponto 3.
  3. Símbolo personalizado.
  4. A bandeira não muda o comportamento.

ZS No trailer é personalizado. Criar símbolo da json, importar carrapatos, executar script no gráfico deste símbolo. Por favor, escreva se reproduziu ou não.

Arquivos anexados:
EURUSD.zip  896 kb
 
fxsaber:

Por favor, escreva se tocou ou não.

Sim, ele foi reproduzido em 2380.

Muito obrigado! Classificando.

 
fxsaber:

  1. 2380.
  2. Qualquer servidor - ver ponto 3.
  3. Símbolo personalizado.
  4. A bandeira não muda o comportamento.

ZY O trailer é personalizado. Criar símbolo da json, importar carrapatos, executar script neste gráfico de símbolos. Por favor, escreva se reproduziu ou não.


Mais uma vez, obrigado.

Sim, em 2380 o problema foi introduzido acidentalmente e depois foi rapidamente resolvido. Mas conseguiu entrar na construção 2380.

Infelizmente, desde então, novas construções foram feitas onde todas as construções ainda não estavam fixadas em MetaQuotes-Demo.

Você pode voltar para qualquer construção anterior ou esperar pela próxima construção em MetaQuotes-Demo.
 
Anton:
Você pode voltar para qualquer construção anterior ou esperar pela próxima construção em MetaQuotes-Demo.

Obrigado, por enquanto a construção anterior é de verdade. O 2380 tem feito muito...

 

MT5 último release build 2361. Em anexo está um símbolo personalizado. Criar um símbolo da json, importar carrapatos, executar um teste no gráfico deste símbolo.

EA

void OnTick()
{
  MqlTick Tick={0};
  if(SymbolInfoTick(_Symbol,Tick))
  {
    MqlTick OldTicks[];
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
    Print(GetLastError());
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
    Print(GetLastError());
  }
  ExpertRemove();
}

Parâmetros

[Tester]
Expert=test.ex5
Symbol=AUDNZD.RannForex
Period=M1
Optimization=0
Model=4
FromDate=2020.04.08
ToDate=2020.04.09
ForwardMode=0
Deposit=10000000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
Visual=0

1. Conta de compensação.

1.1. Com as datas dadas a produção é semelhante à verdadeira: 2000 0 2000 0.

1.2. Quando as datas são alteradas para 07.04.2020-08.04.2020 a produção se torna estranha: -1 4004 1 0.

Primeiramente, por que o erro aparece no primeiro caso? Em segundo lugar, por que o segundo caso leva apenas 1 carrapato? A data do pedido do carrapato não foi alterada.

2. Conta de hedge.

2.1. Com as datas dadas, a produção torna-se estranha: 2000 0 1 0.

Por que o segundo caso leva apenas 1 carrapato? A data do pedido do carrapato não foi alterada.

2.2. Quando as datas mudaram para 07.04.2020-08.04.2020 a produção parará estranhamente, mas o mesmo: 2000 0 1 0.


Daí as perguntas: por que CopyTicks com parâmetros fixos depende não apenas das datas dos testes, mas também do tipo de conta? Ou eu não entendo algo e estou fazendo algo errado?

Isto torna muito difícil o trabalho, por favor, corrija se possível. Você já conseguiu reproduzi-la? Precisa de mais alguma coisa de mim para reproduzir? Obrigado.

Arquivos anexados:
AUDNZD.zip  2448 kb
 
traveller00:

Daí as perguntas: por que o CopyTicks com parâmetros fixos depende não apenas das datas dos testes, mas também do tipo de conta? Ou estou entendendo mal alguma coisa e fazendo algo errado?

Dependência do tipo de conta - você pode imaginar as razões. Eu não diria que é correto. Trocar símbolos com a última história - os desenvolvedores precisam pensar bem uma vez lá, o que fazer com eles na sebe, etc.

Eu mesmo não uso o CopyTicks no Testador. As primeiras 24 horas não são importantes. Se você realmente precisa de sinais comerciais claros, então não negocie no primeiro dia.

 
traveller00:

MT5 último release build 2361. Em anexo está um símbolo personalizado. Criar um símbolo da json, importar carrapatos, executar a EA em um gráfico deste símbolo.

EA

Parâmetros

1. Conta de compensação.

1.1. Com as datas indicadas a produção é semelhante à verdadeira: 2000 0 2000 0.

1.2. Quando as datas são alteradas para 07.04.2020-08.04.2020 a produção torna-se estranha: -1 4004 1 0.

Primeiramente, por que o erro aparece no primeiro caso? Em segundo lugar, por que o segundo caso leva apenas 1 carrapato? A data do pedido do carrapato não foi alterada.

2. Conta de hedge.

2.1. Com as datas dadas, a produção torna-se estranha: 2000 0 1 0.

Por que o segundo caso leva apenas 1 carrapato? A data do pedido do carrapato não foi alterada.

2.2. Quando as datas mudarem para 07.04.2020-08.04.2020 a produção parará de forma estranha, mas a mesma: 2000 0 1 0.


Daí as perguntas: por que CopyTicks com parâmetros fixos depende não apenas das datas dos testes, mas também do tipo de conta? Ou eu não entendo algo e estou fazendo algo errado?

Isto torna muito difícil o trabalho, por favor, corrija se possível. Você já conseguiu reproduzi-la? Precisa de mais alguma coisa de mim para reproduzir? Obrigado.

A primeira corrida. Olhando os logs do testador.

2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol to be synchronized
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol synchronized, 3720 bytes of symbol info received
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 23 Kb of history data to synchronize in 0:00:00.009
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 567 Kb of tick data to synchronize in 0:00:00.031
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.08 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   -1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   4004
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   0
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 10:53:10.573 Core 01 removed itself within OnTick

O testador sincronizou os carrapatos por apenas um dia, para 8 de abril. Ou seja, não há carrapatos antes de 8 de abril.

No início, tivemos erro 4004 (memória insuficiente para os carrapatos solicitados). Esta é uma mensagem inválida, vamos investigar isso. Parece ser porque o pedido com parâmetros padrão está no limite dos carrapatos existentes

A próxima consulta lhe deu, com toda a razão, 1 tique. Porque a partir de 2020.04.06 00:00:00 até o atual testador, quando o primeiro tick chegou, só existe um tick.

Vamos ajustar um pouco o EA

void OnTick()
  {
   MqlTick Tick= {0};
   if(SymbolInfoTick(_Symbol,Tick))
     {
      MqlTick OldTicks[];
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
      if(GetLastError()!=0)
         return;
      Print(GetLastError());
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
      Print(GetLastError());
     }
   ExpertRemove();
  }

e vemos que, a partir do segundo tique, os carrapatos começaram a ser pegos. Em ambos os casos, são 2 carrapatos.

2020.04.21 11:14:13.256 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:11   -1
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   ExpertRemove() function called

Ou seja, a suposição sobre o erro de solicitação no limite do carrapato provou ser correta.

Vamos mudar a data de início para 7 de abril.

2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3486 bars and contains 1429 bars from 2020.04.06 00:05 to 2020.04.06 23:59
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.07 00:00 to 2020.04.09 00:00 started
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   -1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   4004
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   0
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   ExpertRemove() function called
2020.04.21 11:18:17.775 Core 01 removed itself within OnTick

Mesmo assim, exceto pelo fato de que os carrapatos já estão sincronizados por 2 dias - o banco de dados do testador contém carrapatos para 7 e 8 de abril.

Fixamos a data de início em 8 de abril. E vemos o resultado esperado

2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 47 bytes of history data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 54 bytes of tick data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 11:20:51.257 Core 01 removed itself within OnTick

Porque há mais carrapatos no testador do que na primeira corrida. E não tem nada a ver com hedging e netting.

Razão: