Une erreur de division par zéro est apparue dans un indicateur - page 2

 
Vladimir Karputov:

Vous avez besoin du code minimum reproductible par le problème. Pas un morceau de code.

Le problème est instable - il peut ne pas exister pendant des heures, puis apparaître. J'ai montré la pièce où se produit la division par zéro et la pièce qui forme le diviseur. On ne sait pas encore ce qui pourrait en être la cause.

 
Aleksey Vyazmikin:

Le problème est instable - il peut ne pas exister pendant des heures, puis apparaître. J'ai montré la pièce où se produit la division par zéro et la pièce qui forme le diviseur. On ne sait pas encore ce qui pourrait en être la cause.

Vous, par contre, vous avez le NUMÉRO DE LIGNE et la POSITION DE COURSE de la division par zéro. Mais malheureusement, nous ne sommes pas télépathes.

Avez-vous des difficultés à mettre en évidence la ligne et la position du curseur ?
 
Aleksey Vyazmikin:

Dans quelle ligne se trouve l'erreur ? Mettez-le en évidence dans le code.

 
Aleksey Vyazmikin:

Le problème est instable - il peut ne pas exister pendant des heures, puis apparaître. J'ai montré la pièce où se produit la division par zéro et la pièce qui forme le diviseur. On ne sait pas encore ce qui pourrait en être la cause.

C'est peut-être une question de conversion de type (int) - quelque part, un nombre fractionnaire est formé pendant la division et l'int devient zéro. Bien sûr, le diviseur est converti en nombre entier, mais la conversion de type a déjà fait l'objet de plaintes avec la nouvelle version.

 
Vladimir Karputov:

Vous, par contre, vous avez le NUMÉRO DE LIGNE et la POSITION DU CURSEUR de la division par zéro. Mais, malheureusement, nous ne sommes pas télépathes.

Avez-vous des difficultés à sélectionner la ligne et la position du curseur ?
Alexey Kozitsyn:

Dans quelle ligne se trouve l'erreur ? Mettez-le en évidence dans le code.

Voici ce que j'ai écrit.

Ici, il devient zéro.TimeFrames==PERIOD_H1

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

Le débogueur affiche ces dates

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

Condition pour l'impression

         if (limit>0){limit=2;Print("start_time - ",TimeToString(start_time,TIME_DATE|TIME_MINUTES)," stop_time - ",TimeToString(stop_time,TIME_DATE|TIME_MINUTES));}
 
Il s'avère que les dates sont en ordre...
 
Sergey Savinkin:

Peut-être est-ce une question de conversion de type (int) - quelque part pendant la division, un nombre fractionnaire est formé et il est converti en zéro par l'int. Bien sûr, le diviseur est converti en nombre entier, mais la conversion de type a déjà fait l'objet de plaintes avec la nouvelle version.

Peut-être devons-nous y réfléchir.

 
Aleksey Vyazmikin:

Évidemment, vous devez vérifier la limite par 0. La condition pour l'impression est incorrecte, je pense. Vous devriez imprimer lorsque la limite=0.

 
Alexey Kozitsyn:

Évidemment, vous devez vérifier la limite par 0. La condition pour l'impression est incorrecte, je pense. Il devrait s'imprimer lorsque la limite=0.

Merci - je suis abasourdi quand je suis réveillé.

 
En général, le profilage sur les données historiques ne révèle aucune erreur.