Uma divisão por erro zero apareceu em um indicador - página 8

 
Aleksey Vyazmikin:

Suponha que temos

Sabemos queo horário de início deve ser2018.04.28 23:00

Então, acontece que o tempo está errado aqui?

Alexey, dê uma olhada no meu exemplo. Eu mostrei linha por linha como a hora que você passa é convertida para a hora mais próxima da barra atual.

 
Não consegui encontrar uma declaração do tipo de limite variável. Minha visão é fraca.
 
Алексей Тарабанов:
Não foi possível encontrar uma declaração do limite do tipo variável. Minha visão é fraca.

Post 50, procedimento OnCalculate

 
Sergey Savinkin:

Post 50, Procedimento OnCalculate

Obrigado, mas qual deles tem 50? Você pode me ajudar com um link?

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

Obrigado, mas qual deles é o 50? Você pode me ajudar com um link?

https://www.mql5.com/ru/forum/262864/page5

O link é apenas para a página. Diz o número 50 no título do cargo. Seu #74 ))

В одном индикаторе появилась ошибка деления на ноль
В одном индикаторе появилась ошибка деления на ноль
  • 2018.07.04
  • www.mql5.com
Общее обсуждение: В одном индикаторе появилась ошибка деления на ноль
 
Obrigado
 
Sergey Savinkin:
Você temlimit=start_index-stop_index+1 escrito primeiro, ou seja,limit===1, e depois onde a divisão por 2 élimit=(int)(stop_time-start_time)/PeriodSeconds(_Period). Um não é adicionado. Zero é dividido pelo período.

Certo,limit=start_index-stop_index+1é para i>0, ou seja, para cálculo do histórico, e limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) é para cálculo na barra atual.

E a questão é, de fato, por que nosso tempo é tão torto - se temos um prazo de uma hora, as datas devem ser redondas, tanto no início quanto no final - este é o verdadeiro problema, que a hora do bar na data de início é de alguma forma errada!!!

Talvez haja aqui um problema.

start_index=ArrayBsearch(Time,start_time);

Como a hora_de_início vem correta neste momento

datetime start_time=rates[i].time;
 
Alexei, não há "no final". É apenas uma quantificação. Exatamente às 18h00, o bar abriu, mostrou um mínimo e um máximo e fechou com segurança, no mesmo segundo.
 
Алексей Тарабанов:
Alexey, não há "no final". É apenas uma quantização. Exatamente às 18h00, o bar abriu, mostrou mínimo e máximo e fechou com segurança, no mesmo segundo.

Por exemplo, o bar abriu às 18:00, portanto o horário inicial(start_time) será 18:00 e o horário final(stop_time) deverá ser 19:00 para o horário horário. Assim, o índice entre eles será diferente no cronograma M1. E no código, o índice inicial e o índice final são os mesmos, o que não é verdade.

 
Aleksey Vyazmikin:

Certo,limit=start_index-stop_index+1é para i>0, ou seja, para cálculo do histórico, e limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) é para cálculo na barra atual.

E a questão é, de fato, por que nosso tempo é tão torto - se temos um prazo de uma hora, as datas devem ser redondas, tanto no início quanto no final - este é o verdadeiro problema, que a hora do bar na data de início é de alguma forma errada!!!

Talvez haja aqui um problema.

Desde que a hora_de_início vem correta neste ponto

E por que eles são redondos se você primeiro faz CopyRates a partir de um período de tempo horário (ele se transforma em números redondos), então passe para o procedimentoCreateFigure time from the current timeframe (tempo, que se transforma em Tempo) e Rates from hourly timeframe, e então procure o índice na matriz de período de tempo atual?start_index=ArrayBsearch(Time,start_time);

Razão: