Erros, bugs, perguntas - página 3034

 

Um erro apareceu hoje nas páginas de trabalhos freelance:

Navegador cromado. O que é que isto tem a ver?

 
Aleksey Vyazmikin:

Tenho razão em compreender que se um EA que trabalha com M1 utiliza um indicador no M1 (ou em qualquer outra TF?), que retira dados da TF superior, então no primeiro tick de uma nova barra não poderá devolver o valor real em qualquer caso, porque vai precisar de n ticks antes do cálculo da TF superior?


Na verdade, OnTick não está sincronizado com OnCalculate pelo mesmo símbolo. Teoricamente, a OnTick pode estar atrasada e pelo seu início todos os índices de todas as TFs serão calculados?

 
Slava:

Do outro período de tempo, serão tomados os dados que estão actualmente prontos. Ou seja, na saída, todos os dados estarão perfeitamente sincronizados.

Por que razão então o indicador não pode recebê-los ao primeiro pedido?

Como posso fazer um indicador normal multi-TF (e idealmente - multi-caracteres) sem usar um temporizador?

 
Andrey Khatimlianskii:

Então porque é que o indicador não pode recuperá-los no primeiro pedido?

Como se faz um indicador normal multi-TF (e idealmente multi-caracteres) sem usar um temporizador?

+

Preocupa-me que os atrasos na recepção do sinal por parte da EA sejam inevitáveis com a arquitectura actual, infelizmente

 
Olá

Aparece um erro durante a optimização utilizando Mql Cloud:

2021.05.31 18:24:57.348 MQL5 Cloud Europe passou 34 testado com erro "critical runtime error 0 in OnInit function (código de erro 0, módulo Experts\Advisors\123 expert.ex5, ficheiro 65535, linha 1, col 1)" em 0:00:00.001 (PR 274)


Por favor, informe qual poderá ser o problema.

Ao optimizar sem Mql Cloud, tudo funciona. O problema começou em 29/05. Antes disso, tudo estava bem.

Arquivos anexados:
 
Marat Bayburin:
Olá

Aparece um erro durante a optimização utilizando Mql Cloud:

2021.05.31 18:24:57.348 MQL5 Cloud Europe passou 34 testado com erro "critical runtime error 0 in OnInit function (código de erro 0, módulo Experts\Advisors\123 expert.ex5, ficheiro 65535, linha 1, col 1)" em 0:00:00.001 (PR 274)


Por favor, informe qual poderá ser o problema.

Ao optimizar sem Mql Cloud, tudo funciona. O problema começou em 29.05. Antes disso, tudo estava bem.

Penso que o problema é com a construção do compilador. Recebo os mesmos erros.
Isto é, compilámos com nova construção, mas os agentes ainda estão nos antigos, .... Assim.
 
Marat Baiburin:
Então é só esperar que os agentes se actualizem?

Se estes forem erros devidos a diferentes construções de agentes e do seu PC de secretária, então sim, espere. Os meus agentes, por exemplo, ainda são 2949, não actualizados para 2950.

 
Andrey Khatimlianskii:

Então porque é que o indicador não pode recuperá-los no primeiro pedido?

Como fazer um indicador normal multi-TF (e idealmente multi-caracteres) sem usar um temporizador?

No primeiro pedido, o indicador pode não receber os dados do seu símbolo, mas por outro período de tempo apenas por uma razão - as séries cronológicas desejadas não foram construídas ou já foram destruídas após algum tempo, quando não houve pedidos.

Após um pedido sem sucesso, basta enviar um comando para o seu gráfico para o actualizar e terminar o OnCalculate imediatamente. É garantido que a OnCalculate será chamada e as séries de tempos estarão prontas por esta altura

Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
  • www.mql5.com
ChartSetSymbolPeriod - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Slava:

No primeiro pedido, o indicador pode não receber dados do seu símbolo, mas outro período de tempo apenas por uma razão - as séries de tempos requeridas ainda não foram construídas ou já foram destruídas após algum tempo, quando não houve pedidos.

Após um pedido sem sucesso, basta enviar um comando para o seu gráfico para o actualizar e terminar o OnCalculate imediatamente.
É garantido que a OnCalculate será chamada e é garantido que as séries de tempos necessárias estarão preparadas até essa altura.


Na primeira chamada de indicador, o cálculo é feito em loop através de todos os dados.

//Расчёт количества просчитываемых баров
int limit = rates_total-prev_calculated;
   
//Если первый запуск
if(limit > 1)
{
   //какая нибудь инициализация
   
}

//================================================================
for(int i=limit; i>=0 && !IsStopped(); i--)
{
   ...  

Se neste loop houve um pedido falhado, o que deve ser devolvido em troca?
Limite+1 em que não foi bem sucedido?
Ou o quê? Não compreendo este ponto.

 
Roman:


Por favor, diga-me, a primeira vez que o indicador é chamado, por exemplo, o cálculo é executado num laço sobre todos os dados.

E se houve um pedido falhado neste ciclo, o que deve ser devolvido em troca?
Limite+1 em que não foi bem sucedido?
Ou o quê? Não compreendo este ponto.

Não pode verificá-lo você mesmo?