O que atualiza o RefreshRates() - página 7

 
Mikhail Nazarenko:

Obrigada, isso é muito bom. O terminal realmente dá um erro 4066 depois de acessar uma série de tempos não atualizada através do iTime? Eu encontrei o iClose dando informações não atualizadas em vez de zero.

Esse é o problema, esse é o ponto chave que está causando seu engate.

Erro 4066 - quando não há histórico para este TF, ele não está pronto, você precisa entrar em contato com o servidor.

E quando você já o tem, mas ele só é atualizado quando você o acessa, ou seja, não dá um erro, apenas lhe dá o que é agora, e simultaneamente com o pedido começa a atualizar a série temporal.

Se você acessa de forma pouco freqüente e irregular, às vezes você fica com coisas velhas. Se você solicitar cada TF necessária regularmente, até cada tique - então tudo está bem.

Se o gráfico desta TF estiver aberto, ele é atualizado regularmente no gráfico. A propósito, provavelmente é possível abrir gráficos de todas as TFs necessárias das EAs, se o acesso não for regular, mas não for confiável, pois elas podem fechar/mudar as TFs manualmente.

 
Evgeniy Chumakov:


Por que adicionar 0 a [i + 0] ?

em vez de zero eu substituí 1 e 2, 1 ou 2. Eu deixei 0, ou seja, 1 barra. Eu não limpei o código, não é importante para a lógica.

 
Aleksey Mavrin:

Essa é a questão, é o ponto chave que está fazendo com que você fique preso.

O erro 4066 é quando não há histórico para este TF, ele não está pronto, você precisa entrar em contato com o servidor.

E quando você já o tem, mas ele só é atualizado quando você o acessa, ou seja, não dá um erro, apenas lhe dá o que é agora, e simultaneamente com o pedido começa a atualizar a série temporal.

Se você acessa de forma pouco freqüente e irregular, às vezes você recebe porcarias. Se você solicitar cada TF necessária regularmente, até cada tique - então tudo está bem.

Se o gráfico desta TF estiver aberto, ele é atualizado regularmente no gráfico. A propósito, provavelmente é possível abrir gráficos de todas as TFs necessárias das EAs, se o acesso não for regular, mas não for confiável, pois elas podem fechar/mudar as TFs manualmente.

Quando deve haver um erro, ele devolve os dados antigos, ótimo. Esta é uma das razões pelas quais os corretores adoram o MT4 e não mudam para o MT5)).

Isto é, pedir o tempo correto a cada tique ou sono, até o erro 4066. Eu acertei?

 
Mikhail Nazarenko:

Quando deve haver um erro, ele devolve os dados antigos, ótimo. Esta é uma das razões pelas quais corretores como o MT4 e não mudam para o MT5)).

Isto é, pedir o tempo correto a cada tique ou sono, até o erro 4066. Será que acertei?

Quase. Aqui está uma função pronta:

bool IsTFDataReady(ENUM_TIMEFRAMES eTF)
{
   ResetLastError();
   iTime(NULL, eTF, 1);
   return GetLastError() == ERR_NO_ERROR;
}
Insira-o no OnTick() e, se ele retornar verdadeiro, o prazo eTF pode ser acessado, os dados são válidos.
 
Mikhail Nazarenko:

Quando deve haver um erro, ele devolve os dados antigos, ótimo. Esta é uma das razões pelas quais corretores como o MT4 e não mudam para o MT5)).

Isto é, pedir o tempo correto a cada tique ou sono, até o erro 4066. Eu acertei?

É claro que é melhor usar o sono somente no OnInit, e é necessário somente em indicadores. Em outros casos, OnTick, como Igor mencionou acima, é suficiente.

Dependendo da tarefa, você pode manobrar seu caminho para a melhor opção. Normalmente, ao verificar se há uma nova barra, o iTime já é acessado a cada tique para todos os prazos usados, o que é suficiente para mantê-los atualizados.

s.w. E se você usar a função de Igor não em cada carrapato, mas em algumas raras condições, também haverá um atraso.
Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
В чем различия между тремя режимами тестирования в MetaTrader 5 и на что обратить внимание? Как происходит тестирование эксперта, торгующего одновременно на нескольких инструментах? Когда и как вычисляются значения индикаторов при тестировании и как обрабатываются события? Как синхронизировать бары с разных инструментов при тестировании в режиме "Только цены открытия"? Статья призвана дать ответы на эти и многие другие вопросы.
 
Aleksey Mavrin:

O sono é melhor utilizado apenas no OnInit, é claro, e é necessário apenas nos indicadores. Em outros casos, é suficiente usar o OnTick, como Igor mencionou acima.

Dependendo da tarefa, você pode manobrar seu caminho para a melhor opção. Normalmente, quando verificamos se há uma nova barra, acessamos o iTime a cada tique para todos os prazos usados, o que é suficiente para mantê-los atualizados.

s.e. E se a função do Igor não for usada em cada tic, mas em algumas condições raras, também estará dessincronizada.

Dormir não funciona em indicadores

 
Ihor Herasko:

Quase. Aqui está uma função pronta para uso:

Insira-o no OnTick() e se ele retornar verdadeiro, você pode acessar o cronograma do eTF, os dados são válidos.

É brilhantemente simples. Obrigado. Por que os desenvolvedores não descrevem isso no manual sobre funções iClose etc.?Ou corrigem a lógica das atualizações de citações do MT4 para não criar teorias conspiratórias.

 
Mikhail Nazarenko:

Quando deve haver um erro, ele devolve os dados antigos, ótimo. Esta é uma das razões pelas quais corretores como o MT4 e não mudam para o MT5)).

Isto é, pedir o tempo correto a cada tique ou sono, até o erro 4066. Eu acertei?

Em MT5 é muito mais difícil.

Em F4 é suficiente solicitar o iTime de todos os TFs usados a cada 2 minutos, e todos os dados serão reais.

 
Mikhail Nazarenko:

Tudo é brilhantemente simples. Obrigado. Por que os desenvolvedores não descrevem isso no manual sobre funções iClose e assim por diante?Ou corrigem a lógica das atualizações de citações do MT4 para não criar teorias conspiratórias.

Porque quase todos os EAs verificam as condições certas em cada tic e tudo se atualiza por si só.

 
Vitaly Muzichenko:

Dormir não funciona em indicadores

Funciona se você realmente precisar :)

void SleepA(int msec)
 {
   uint now=GetTickCount();
   while (GetTickCount()<(now+msec))
      {
      for(int i=0;i<10000;i++)
         {
          double f=1;
          f*=f;
          f+=f;
         }
       }
   return;
 }  
Andrey Khatimlianskii:

Em MT5, é muito mais complicado.

Em 4 é suficiente solicitar o iTime de todos os TFs usados a cada 2 minutos, e todos os dados serão reais.

Exatamente

Razão: