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

 
Vladimir Karputov:

Você precisa do código mínimo reprodutível pelo problema. Não é um pedaço de código.

O problema é instável - ele pode não existir por horas e depois aparecer. Eu mostrei a peça onde ocorre a divisão por zero e a peça que forma a divisória. Ainda não está claro o que mais poderia estar causando isto.

 
Aleksey Vyazmikin:

O problema é instável - ele pode não existir por horas e depois aparecer. Eu mostrei a peça onde ocorre a divisão por zero e a peça que forma a divisória. Ainda não está claro o que mais poderia estar causando isto.

Você, por outro lado, tem o NÚMERO DE LINHA e a POSIÇÃO DE CURSO da divisão por zero. Mas infelizmente não somos telepatas.

É difícil para você destacar a linha e a posição do cursor?
 
Aleksey Vyazmikin:

Em qual linha está o erro? Destaque-a no código.

 
Aleksey Vyazmikin:

O problema é instável - ele pode não existir por horas e depois aparecer. Eu mostrei a peça onde ocorre a divisão por zero e a peça que forma a divisória. Ainda não está claro o que mais poderia ser a causa.

Talvez seja uma questão de conversão de tipo (int) - em algum lugar um número fracionário é formado ao se dividir e int se torna zero. Claro, o divisor é convertido em inteiro, mas a conversão do tipo já foi reclamada com o novo lançamento.

 
Vladimir Karputov:

Você, por outro lado, tem o NÚMERO DE LINHA e a POSIÇÃO CURSOR da divisão por zero. Mas, infelizmente, não somos telepatas.

É difícil para você selecionar a linha e a posição do cursor?
Alexey Kozitsyn:

Em que linha está o erro? Destaque-a no código.

Eis o que eu escrevi.

Aqui ele se torna zero.TimeFrames==PERIOD_H1

double d1=(delta_price_high-center_line_point)/(limit/2);

O depurador mostra estas datas

2018.07.04 11:33:11.674 2018.07.01 00:00:00   start_time - 2018.06.28 15:00 stop_time - 2018.06.28 16:00
2018.07.04 11:33:11.688 2018.07.01 00:00:00   start_time - 2018.06.28 16:00 stop_time - 2018.06.28 17:00
2018.07.04 11:33:11.701 2018.07.01 00:00:00   start_time - 2018.06.28 17:00 stop_time - 2018.06.28 18:00
2018.07.04 11:33:11.714 2018.07.01 00:00:00   start_time - 2018.06.28 18:00 stop_time - 2018.06.28 18:44
2018.07.04 11:33:11.727 2018.07.01 00:00:00   start_time - 2018.06.28 19:05 stop_time - 2018.06.28 20:00
2018.07.04 11:33:11.740 2018.07.01 00:00:00   start_time - 2018.06.28 20:00 stop_time - 2018.06.28 21:00
2018.07.04 11:33:11.754 2018.07.01 00:00:00   start_time - 2018.06.28 21:00 stop_time - 2018.06.28 22:00
2018.07.04 11:33:11.767 2018.07.01 00:00:00   start_time - 2018.06.28 22:00 stop_time - 2018.06.28 23:00
2018.07.04 11:33:11.783 2018.07.01 00:00:00   start_time - 2018.06.28 23:00 stop_time - 2018.06.28 23:49
2018.07.04 11:33:11.796 2018.07.01 00:00:00   start_time - 2018.06.29 10:00 stop_time - 2018.06.29 11:00
2018.07.04 11:33:11.810 2018.07.01 00:00:00   start_time - 2018.06.29 11:00 stop_time - 2018.06.29 12:00
2018.07.04 11:33:11.823 2018.07.01 00:00:00   start_time - 2018.06.29 12:00 stop_time - 2018.06.29 13:00
2018.07.04 11:33:11.836 2018.07.01 00:00:00   start_time - 2018.06.29 13:00 stop_time - 2018.06.29 13:59
2018.07.04 11:33:11.850 2018.07.01 00:00:00   start_time - 2018.06.29 14:05 stop_time - 2018.06.29 15:00
2018.07.04 11:33:11.863 2018.07.01 00:00:00   start_time - 2018.06.29 15:00 stop_time - 2018.06.29 16:00
2018.07.04 11:33:11.876 2018.07.01 00:00:00   start_time - 2018.06.29 16:00 stop_time - 2018.06.29 17:00
2018.07.04 11:33:11.893 2018.07.01 00:00:00   start_time - 2018.06.29 17:00 stop_time - 2018.06.29 18:00
2018.07.04 11:33:11.906 2018.07.01 00:00:00   start_time - 2018.06.29 18:00 stop_time - 2018.06.29 19:00
2018.07.04 11:33:11.920 2018.07.01 00:00:00   start_time - 2018.06.29 19:00 stop_time - 2018.06.29 20:00
2018.07.04 11:33:11.933 2018.07.01 00:00:00   start_time - 2018.06.29 20:00 stop_time - 2018.06.29 21:00
2018.07.04 11:33:11.946 2018.07.01 00:00:00   start_time - 2018.06.29 21:00 stop_time - 2018.06.29 22:00
2018.07.04 11:33:11.959 2018.07.01 00:00:00   start_time - 2018.06.29 22:00 stop_time - 2018.06.29 23:00
2018.07.04 11:33:11.973 2018.07.01 00:00:00   start_time - 2018.06.29 23:00 stop_time - 2018.06.30 00:00
2018.07.04 11:33:12.351 2018.07.02 10:00:00   start_time - 2018.06.29 23:00 stop_time - 2018.06.29 23:49
2018.07.04 11:33:12.382 2018.07.02 10:00:00   start_time - 2018.07.02 10:00 stop_time - 2018.07.02 11:00

Condição para a impressão

         if (limit>0){limit=2;Print("start_time - ",TimeToString(start_time,TIME_DATE|TIME_MINUTES)," stop_time - ",TimeToString(stop_time,TIME_DATE|TIME_MINUTES));}
 
Acontece que as datas estão em ordem...
 
Sergey Savinkin:

Talvez seja uma questão de conversão de tipo (int) - em algum lugar durante a divisão é formado um número fracionário e este é convertido a zero pelo int. Claro, o divisor é convertido em inteiro, mas a conversão do tipo já foi reclamada com o novo lançamento.

Talvez tenhamos que pensar sobre isso.

 
Aleksey Vyazmikin:

Obviamente, você precisa verificar o limite por 0. A condição para a impressão está incorreta, eu acho. Você deve imprimir quando limite=0.

 
Alexey Kozitsyn:

Obviamente, você precisa verificar o limite por 0. A condição para a impressão está incorreta, eu acho. Deve ser impresso quando o limite=0.

Obrigado - Fico pasmado quando estou acordado.

 
Em geral, a elaboração de perfis em dados históricos não revela erros.