Bug sur ROUND dans Prorealtime?

Viewing 15 posts - 1 through 15 (of 15 total)
  • Author
    Posts
  • #35858 quote
    laurenzo
    Participant
    Average

    Bonjour,

    J’ai utilisé récemment l’indicateur https://www.prorealcode.com/prorealtime-indicators/r-squared-adaptive-exponential-moving-average/

    Il crashe dans certains cas. Après avoir essayé de débugger, je suis arrivé à la conclusion qu’il y’avait un bug dans PRT et surement dans la fonction ROUND

    Sur la valeur “Chargeurs” (CRI) en 2012, ROUND(Period+Period*(iRsq-0.25)) renvoie 2000 millions. Ce qui n’est pas possible quand iRsq vaut 0.7 et que la période est à 3.

    Il est à noter que sans ROUND, exponentialaverage plante quand même. Je soupçonne qu’ils fassent un round en interne qui plante.

    Voilà 🙁

    #35861 quote
    laurenzo
    Participant
    Average

    J’ai même essayé ce code sans succès non plus :

            iRsq = ((Q1 * Q1) / (Q2 * Q3))
            iPer = ROUND(Period + Period * (iRsq - 0.25))
            IF iPer < 1 THEN
                iPer = 1
            ENDIF
            MA = ExponentialAverage[iPer](Series)
    
    #35899 quote
    laurenzo
    Participant
    Average

    Même bug avec des périodes plus grandes sur pas mal d’actions.

    Quel FAIL.

    #35900 quote
    laurenzo
    Participant
    Average

    Je sais pas d’où ça vient mais soit c’est ROUND soit c’est ExponentialAverage…

    #35903 quote
    Nicolas
    Keymaster
    Master

    Pourrais-tu stp nous donner des exemples en “image” stp, histoire de reproduire le problème, merci.

    #35907 quote
    laurenzo
    Participant
    Average

    Alors je t’envoie quelques screenshots.

    Le code est le suivant (c’est le tien sans la fin)

    //PRC_r-squared adaptive Exponential Moving Average | indicator
    //25.01.2017
    //Nicolas @ www.prorealcode.com
    //Sharing ProRealTime knowledge
     
    //--- parameters
    // Period = 20
    // flLookBack = 25 // Floating levels lookback period
    // flLevelUp = 90 // Floating levels up level %
    // flLevelDown = 10 // Floating levels down level %
    //---
     
    Data = customclose
     
    SumX  = 0
    SumXX = 0
    SumXY = 0
    SumYY = 0
    SumY  = 0
     
    if barindex>Period then
     
     // adaptive r-squared periods
     for k=0 to period-1 do
      tprice = Data[k]
      SumX  = SumX+(k+1)
      SumXX = SumXX+((k+1)*(k+1))
      SumXY = SumXY+((k+1)*tprice)
      SumYY = SumYY+(tprice*tprice)
      SumY  = SumY+tprice
     next
       
     Q1  = SumXY - SumX*SumY/period
     Q2  = SumXX - SumX*SumX/period
     Q3  = SumYY - SumY*SumY/period
     
     iRsq=((Q1*Q1)/(Q2*Q3))
     //returned moving average
     avg = exponentialaverage[Period+Period*(iRsq-0.25)](Data)
    
    endif
     
    RETURN avg

    1er screen : mes settings et un exemple d’action

    2ème screen : le plantage en période 7 (ça plante sur d’autres)

    3ème screen: j’ai fait un ROUND(Period+Period*(iRsq-0.25))

    4ème screen: j’affiche juste iRsq= ROUND(((Q1*Q1)/(Q2*Q3)))

    On voit que y’a un problème sur le ROUND…

    Maintenant même sans ROUND ça plante dans average. A mon avis c’est joli bon gros bug.

    raema1.png raema1.png raema2.png raema2.png raema3.png raema3.png raema4.png raema4.png
    #35936 quote
    Nicolas
    Keymaster
    Master

    Je reproduis le problème en effet chez prorealtime et pas PRT-CFD.

    J’ai résolu le problème des valeurs négatives en changeant le calcul de la période dynamique comme ceci: [scode]avg = exponentialaverage[Period+Period*(max(ticksize,iRsq-0.25))](Data)[/scode]

    Pour le soucis d’erreur “NULL”, je me demande si ça n’est pas lié à l’historique, tu rencontres la même chose sur d’autres instruments ?

    #35945 quote
    laurenzo
    Participant
    Average

    Pour le soucis d’erreur “NULL”, je me demande si ça n’est pas lié à l’historique, tu rencontres la même chose sur d’autres instruments ?

     

    Oui environ 1 sur 2.

    #35947 quote
    Nicolas
    Keymaster
    Master

    Avec des périodes impaires uniquement ?

    #35958 quote
    laurenzo
    Participant
    Average

    Non tout 🙁

    Je pense que ça doit être aussi du aux historiques et que c’est un bug.

    Mais ça craint un peu je trouve.

    #35978 quote
    laurenzo
    Participant
    Average

    Il faudrait peut être contacter les développeurs. Tu sais s’il y’en a qui sont sur le forum?

    #35995 quote
    Nicolas
    Keymaster
    Master

    Oooh il y a beaucoup de gens qui rôdent dans les parages 🙂 Je vais passer le mot à ce sujet, on va essayer de comprendre !

    laurenzo thanked this post
    #36004 quote
    Nicolas
    Keymaster
    Master

    A priori le problème vient du fait que sur certaines bougies, Q2*Q3 vaut NaN (ou 0). Du fait, la division par un nombre nul donne un résultat forcément démesuré. Je n’ai pas encore compris pourquoi, mais voilà 1 solution que l’on vient de me suggérer :

    if(q2*q3>0) then  
     iRsq=round((Q1*Q1)/(Q2*Q3))
    endif
    #36031 quote
    laurenzo
    Participant
    Average

    A priori le problème vient du fait que sur certaines bougies, Q2*Q3 vaut NaN (ou 0). Du fait, la division par un nombre nul donne un résultat forcément démesuré. Je n’ai pas encore compris pourquoi, mais voilà 1 solution que l’on vient de me suggérer :

    En fait Q2*Q3 ne peut pas être nul, ni NaN car on aurait directement un plantage sur la division. Ce qui n’est pas le cas.
    Si tu affiches juste iRsq = (Q1*Q1) / (Q2*Q3) sans aller plus loin, tu n’auras pas de plantage alors qu’avec 0 ou NaN ça devrait planter. Tu auras juste du démesuré.

    Donc ça reste super bizarre pour moi. La seule explication que je vois c’est que Q2*Q3 = 0.000000001 un truc du genre. Sauf que je vois pas du tout comment c’est possible car c’est une somme de prix sur une période donnée et le prix n’est jamais à 0.0000 et des brouettes 🙂

    #36035 quote
    Nicolas
    Keymaster
    Master

    Je suis d’accord une division par zéro donnerai un autre type d’erreur. La boucle qui calcul Q2 et Q3 ne peut donner des valeurs nulles. Pourrais-tu me donner les autres exemples que tu as trouvé ? Merci.

Viewing 15 posts - 1 through 15 (of 15 total)
  • You must be logged in to reply to this topic.

Bug sur ROUND dans Prorealtime?


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
laurenzo @laurenzo Participant
Summary

This topic contains 14 replies,
has 2 voices, and was last updated by Nicolas
8 years, 9 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 05/17/2017
Status: Active
Attachments: 4 files
Logo Logo
Loading...