Bug de la boucle For ?
Forums › ProRealTime forum Français › Support ProScreener › Bug de la boucle For ?
- This topic has 12 replies, 3 voices, and was last updated 4 years ago by Player.
-
-
05/17/2020 at 10:05 AM #131913
Bonjour,
J’ai créé ce screener qui fonctionne pour la 1ère clause et la deuxième mais lorsque je rajoute la 3ème j’ai un message d’erreur qui me dit que ma boucle est sans fin.
Je pensais que c’était ma 3ème clause qui posait problème, mais si je supprime la deuxième, donc en n’en laissant que 2, je n’ai plus de message d’erreur:1234567891011121314151617181920212223242526272829303132Once Distance=100TimeFrame(Weekly)HIghWeek=High[1]MedianWeek=(Open[1]+Close[1])/2LowWeek=Low[1]TimeFrame(4Hours)for barre=1 to 254 Do//Premier CalculHautHigh=HIghWeek[Barre]Ecart1=100/Max(HautHigh,Close[1])*(Max(HautHigh,Close[1])-Min(HautHigh,Close[1]))If Ecart1<Distance ThenDistance=Ecart1EndIf//Deuxième CalculHautLow=LowWeek[Barre]Ecart2=100/Max(HautLow,Close[1])*(Max(HautLow,Close[1])-Min(HautLow,Close[1]))If Ecart2<Distance ThenDistance=Ecart2EndIf//Troisième Calcul. A partir d'ici j'ai le message d'erreurHautMedian=MedianWeek[Barre]Ecart3=100/Max(HautMedian,Close[1])*(Max(HautMedian,Close[1])-Min(HautMedian,Close[1]))If Ecart3<Distance ThenDistance=Ecart3EndIfNextSCREENER(Distance as "Distance")Merci par avance pour vos retours.
Marc
05/17/2020 at 10:47 AM #131918Écrivez 253 à la ligne 9. Si vous écrivez 254 + 1 pour CLOSE [1], vous dépassez la limite maximale.
05/17/2020 at 11:37 AM #131929Non, je pense que le problème en est un autre. Peut-être.
Aux lignes 12, 19 et 26, vous faites référence à [barres] qui est un index à l’intérieur du TF 4H, mais vous l’appliquez à une donnée appartenant au TF Weekly (MedianWeek).
05/17/2020 at 11:59 AM #131952Ce qui veut dire qu’on ne peut pas mélanger des TimeFrame ?
Pourtant c’est l’idée de base, comparer une valeur d’une unité supérieure dans une unité inférieure.
Ce qui est étrange c’est que ça marche pour les 2 premiers calcul, puis lors de l’ajout du troisième ça plante..
05/17/2020 at 1:20 PM #131960Entre la ligne 8 et 9, ajoutez:
123HW=HighWeekMW=MedianWeekLW=LowWeekpuis, à la ligne 12, remplacez HIghWeek [ Barre ] par HW [Barre], à la ligne 19, remplacez LowWeek [Barre] par LW [Barre] et à la ligne 26, remplacez MedianWeek [Barre] par MW [Barre].
Je pense que ça pourrait marcher.
Il faut utiliser également 253 ou 252 au lieu de 254.
05/17/2020 at 5:09 PM #131998Vous aviez raison à ce sujet :
Aux lignes 12, 19 et 26, vous faites référence à [barres] qui est un index à l’intérieur du TF 4H, mais vous l’appliquez à une donnée appartenant au TF Weekly (MedianWeek).
Alors j’ai réécrit mon code :
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253Once Distance=100TimeFrame(4Hours)Cloture=Close[1]TimeFrame(Weekly)For Barre=1 To 253HIghWeek=High[Barre]MedianWeek=(Open[Barre]+Close[Barre])/2LowWeek=Low[Barre]//Premier CalculIf HighWeek>Cloture ThenMaxVal=HighWeekMinVal=ClotureElseMaxVal=ClotureMinVal=HighWeekEndIfEcart1=100/MaxVal*(MaxVal-MinVal)If Ecart1<Distance ThenDistance=Ecart1EndIf//Deuxième CalculIf LowWeek>Cloture ThenMaxVal=LowWeekMinVal=ClotureElseMaxVal=ClotureMinVal=LowWeekEndIfEcart2=100/MaxVal*(MaxVal-MinVal)If Ecart2<Distance ThenDistance=Ecart2EndIf//Troisième CalculIf MedianWeek>Cloture ThenMaxVal=MedianWeekMinVal=ClotureElseMaxVal=ClotureMinVal=MedianWeekEndIfEcart3=100/MaxVal*(MaxVal-MinVal)If Ecart3<Distance ThenDistance=Ecart3EndIfNextSCREENER[1=1](Distance as "Distance")Plus propre et j’ai enlevé les Max et Min pensant que cela était le problème.
Mais pareil. Mon Code fonctionne lorsque je met seulement 2 Blocs de calcul, mais dès que j’insère le 3ème Bloc ça plante
En fait je viens de m’apercevoir que c’est ce 3 ème bloc qui pose problème
1234567If MedianWeek>Cloture ThenMaxVal=MedianWeekMinVal=ClotureElseMaxVal=ClotureMinVal=MedianWeekEndIfSi je ne fait que 2 comparaison cela fonctionne. Mais dès que j’insère la 3ème comparaison, c’est le plantage.
05/17/2020 at 5:19 PM #131999Essayez de supprimer ONCE de la ligne 1, cela a déjà causé des problèmes avec ProScreener.
Si ce n’est pas le problème, essayez de créer 3 boucles FOR … NEXT différentes, au lieu de faire 3 calculs en un seul cycle.
05/17/2020 at 5:28 PM #132001Code réécrit avec ajout de boucle For et suppression de Once au début, mais le problème persiste
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657TimeFrame(4Hours)Cloture=Close[1]TimeFrame(Weekly)For Barre=1 To 253HIghWeek=High[Barre]//Premier CalculIf HighWeek>Cloture ThenMaxVal=HighWeekMinVal=ClotureElseMaxVal=ClotureMinVal=HighWeekEndIfEcart1=100/MaxVal*(MaxVal-MinVal)If Ecart1<Distance ThenDistance=Ecart1EndIfNextFor Barre=1 To 253LowWeek=Low[Barre]//Deuxième CalculIf LowWeek>Cloture ThenMaxVal=LowWeekMinVal=ClotureElseMaxVal=ClotureMinVal=LowWeekEndIfEcart2=100/MaxVal*(MaxVal-MinVal)If Ecart2<Distance ThenDistance=Ecart2EndIfNextFor Barre=1 To 253MedianWeek=(Open[Barre]+Close[Barre])/2//Troisième CalculIf MedianWeek>Cloture ThenMaxVal=MedianWeekMinVal=ClotureElseMaxVal=ClotureMinVal=MedianWeekEndIfEcart3=100/MaxVal*(MaxVal-MinVal)If Ecart3<Distance ThenDistance=Ecart3EndIfNextSCREENER[1=1](Cloture as "Distance")05/17/2020 at 5:39 PM #132002C’est le dernier problème auquel je peux penser.
En une semaine, il y a 30 bougies de 4 heures, donc quand vous arrivez à la répétition n. 9 (30×9 = 270) dépasse la limite de 254 TF bar à 4 heures. Mais je doute que ce soit une erreur même avec un seul cycle!
Essayez de remplacer 253 par 5, puis d’augmenter de 5 à 5 pour vérifier s’il existe une limite interne.
05/17/2020 at 8:01 PM #132023Effectivement Roberto, c’était un problème de Seuil. En incrémentant mon programme de 5 à chaque fois, celui-ci cesse de fonctionner à 215
Par contre, ce que je ne comprend plus c’est qu’il devrait me retourner un écart en pourcentage mais à chaque fois il me retourne Zéro sur l’ensemble des résultats.
Je comprendrais qu’il y a quelques fois où la clôture serait égal au plus haut, un produit par zéro serait retourné dans ce cas Ecart1=100/MaxVal*(MaxVal-MinVal) mais pas tous mes résultats
Surtout que j’ai mis un garde fou : If Ecart1<Distance And Ecart1<>0123456789101112131415161718192021222324252627Once Distance=100TimeFrame(4Hours)Cloture=Close[1]TimeFrame(Weekly)For Barre=1 To 210HIghWeek=High[Barre]rem MedianWeek=(Open[Barre]+Close[Barre])/2rem LowWeek=Low[Barre]//Premier CalculIf HighWeek>Cloture ThenMaxVal=HighWeekMinVal=ClotureElseMaxVal=ClotureMinVal=HighWeekEndIfEcart1=100/MaxVal*(MaxVal-MinVal)If Ecart1<Distance And Ecart1<>0 ThenDistance=Ecart1EndIfNextSCREENER(Distance as "Distance")Je vois vraiment pas où ça cloche
05/18/2020 at 12:26 AM #13204305/18/2020 at 8:31 AM #13206705/18/2020 at 6:02 PM #132191Effectivement je recherche toutes les valeurs.
Votre premier message, avec 174 sur la ligne 9, fonctionne parfaitement.
Merci à toi Roberto pour l’idée.
Je vais prendre prendre mon calcul de ma première fonction pour l’intégrer à mon nouveau code dont la boucle For est de meilleure performance et le code me semble plus logique.Merci pour le temps consacré..
Marc
-
AuthorPosts
Find exclusive trading pro-tools on