Droite de régression linéaire plus 1 écart type

Viewing 15 posts - 1 through 15 (of 26 total)
  • Author
    Posts
  • #195251 quote
    Ozons
    Participant
    Junior

    Bonjour,

    à partir des exemples postés par Nicolas ou sur le blog HK Lisse, j’essaye en vain de créer un indicateur permettant :

    • de tracer une droite de régression linéaire sur un historique en journalier de 20 ans à minima ou sur le maximum d’historique chargé,
    • à partir de cette droite de régression linéaire créer une droite avec un écart type
    • un texte permettant de préciser : la pente de la droite de régression linéaire, la performance annualisée et la valeur en % entre la droite de régression linéaire et la droite avec un écart type.

    Il s’agit de vérifier pour un investissement long terme si cette approche est intéressante. Elle est issue de la vidéo suivante :

    https://hiboo.expert/video/investissement-et-droite-de-regression/

    En vous remerciant pour votre aide sur le sujet. Pour le moment j’utilise la fonction disponible sur la plateforme mais cela m’éviterait de remettre à jour les données d’entrées.

    #195254 quote
    Nicolas
    Keymaster
    Master

    J’étais déjà tombé sur ces vidéos 😆 Je n’ai toujours pas compris pourquoi il fallait tracer une regression pour mesurer une performance annualisée. J’ai peut être loupé une étape dans la vidéo.

    Une regression linéaire s’obtient avec l’instruction LINEARREGRESSION, on lui soustrait un écart type avec l’instruction STD.

    Il faut bien comprendre qu’à chaque nouvelle bougie, ces valeurs vont être modifiées, puisqu’on utilise la totalité  de l’historique pour les calculer, donc dés demain les valeurs à l’instant T seront différentes de la veille, normal, mais on ne s’en aperçoit pas avec une droite qui relit le premier point de l’historique à la barre actuelle.

    Bref, voici la valeur du dernier point de la droite qui se réactualise tous les jours: (image 1)

    period = max(1,barindex)
    lr = linearregression[period]
    dev = lr-std[period]
    
    return lr, dev
    image1.png image1.png
    #195256 quote
    Nicolas
    Keymaster
    Master

    Version avec une droite, j’ai volontairement laissé les valeurs avec les courbes, on remarque bien que le dernier point est celui de la droite sont identiques (pour bien saisir).

    //PRC_Std and Ste LinRegChannel | indicator
    //Standard Deviation and Standard Error
    //Linear Regression Channel
    //12.03.2019
    //Nicolas @ www.prorealcode.com
    //Sharing ProRealTime knowledge
    
    defparam drawonlastbaronly=true
    // --- settings
    lookback= max(1,barindex) //channel period
    ChannelType = 1 //1= Standard Deviation ; 2= Standard Erro
    NbDeviation = 1 //Deviation multiplier
    colorRed = 255
    colorGreen = 255
    colorBlue = 0
    // --- end of settings
    
    sumx = 0
    sumy = 0
    sumxy = 0
    sumx2 = 0
    
    for cmpt = lookback downto 0 do
    tmpx = cmpt
    tmpy = close[cmpt]
    sumy = sumy+tmpy
    sumx = sumx+tmpx
    sumx2 = sumx2 + (tmpx*tmpx)
    sumxy = sumxy + (tmpy*tmpx)
    next
    
    n = lookback+1
    
    if (sumx2 = sumx * sumx) then // protection to avoid infinite values
    b = sumxy - sumx * sumy
    else
    b = (n * sumxy - sumx * sumy) / (n * sumx2 - sumx * sumx)
    endif
    a = (sumy - b * sumx) / n
    
    drawsegment(barindex[lookback],a+b*lookback,barindex,a+b*0) coloured(colorRed,colorGreen,colorBlue)
    
    //channel
    if ChannelType = 1 then //Standard Deviation
    dat = std[lookback]*NbDeviation
    else
    dat = ste[lookback]*NbDeviation
    endif
    //drawsegment(barindex[lookback],(a+b*lookback)+dat,barindex,a+b*0+dat) coloured(colorRed,colorGreen,colorBlue)
    drawsegment(barindex[lookback],(a+b*lookback)-dat,barindex,a+b*0-dat) coloured(colorRed,colorGreen,colorBlue)
    
    return
    image2.png image2.png
    #195260 quote
    Ozons
    Participant
    Junior

    Bonjour Nicolas,

    merci pour ton aide et  le complément d’informations sur la régression linéaire. Je m’interroge sur la pertinence des arguments avancés et tout comme toi j’aurais eu une autre démarche pour calculer la performance annualisée. Encore merci pour tout et bonne après midi.

    #195530 quote
    supertiti
    Participant
    Master

    Bonsoir à tous,

    J’ai copié ces deux versions sur le site de HKL, pour autant aucune ne fonctionne ? étonnant de la part de ce cador en code, les nouvelles versions de PRT sont

    peut-être en cause ?

    une modification est-elle possible …

    K en variable

     

      
    
    once j=0
    det=DPO[k*2](close)
    if det=det[1] and det[1]=det[2] and det[2]<>det[3] then
        flag=1
    endif
    n=(k*2)-4
    p=(n/2)-1
    d1=DPO[n](close)
    moy=close-d1
    co=(moy-moy[1]+(close[p])/n)*n
    if flag=1 and flag[1]=0 then
        somx=0
        somy=0
        somxx=0
        somxy=0
        for i=1 to k
            somx=somx+i
        next
        for i=0 to k-1
            somy=somy+co[i]
        next
        for i=1 to k
            somxx=somxx+(i*i)
        next
        for i=0 to k-1
            somxy=somxy+(co[i]*(k-i))
        next
        a=(k*somxy-somx*somy)/(k*somxx-somx*somx)
        b=(somy-a*somx)/k
    endif
    if flag=0 then
        reg=undefined
    else
        j=j+1
        reg=a*j+b
    endif
    return reg
    ///////////// regression automatique v.02 /////////
    once j=0
    de48=DPO[k*2](close)
    if de48=de48[1] and de48[1]=de48[2] and de48[2]<>de48[3] then
        flag=1
    endif
    n=(k*2)-4
    p=(n/2)-1
    d100=DPO[n](close)
    moy100=close-d100
    co=(moy100-moy100[1]+(close[p])/n)*n
    if flag=1 and flag[1]=0 then
        test=linearregression[k](co)
        test1=linearregressionslope[k](co)
        a=test1
        b=test-test1*k
    endif
    if flag=0 then
        reg=undefined
    else
        j=j+1
        reg=a*j+b
    endif
    return reg
    #195567 quote
    supertiti
    Participant
    Master

    Bonsoir à tous,

    A partir du code de Nicolas j’ai fais cela , qu’est-ce qu’il en pense le boss ?

    J’aurais aimé colorer les excès des lignes extérieures mais je ne vois pas comment faire, si quelqu’un a une idée ne pas hésiter à en faire part à la communauté.

     

    // LINEAR REGRESSION CHANNEL by Nicolas modifié  19 juin 2022
    
    //PRC_Std and Ste LinRegChannel  indicator //Standard Deviation and Standard Error
    //Linear Regression Channel  12.03.2019
    //Nicolas @ www.prorealcode.com //Sharing ProRealTime knowledge
     
    defparam drawonlastbaronly=true
    // --- settings
    //    lookback= max(1,barindex) //channel period
    ChannelType = 1 //1= Standard Deviation ; 2= Standard Erro
    NbDeviation = 1 //Deviation multiplier
    colorRed = 255
    colorGreen = 255
    colorBlue = 0
    // --- end of settings
     
    sumx = 0
    sumy = 0
    sumxy = 0
    sumx2 = 0
     
    for cmpt = lookback downto 0 do
    tmpx = cmpt
    tmpy = close[cmpt]
    sumy = sumy+tmpy
    sumx = sumx+tmpx
    sumx2 = sumx2 + (tmpx*tmpx)
    sumxy = sumxy + (tmpy*tmpx)
    next
     
    n = lookback+1
     
    if (sumx2 = sumx * sumx) then // protection to avoid infinite values
    b = sumxy - sumx * sumy
    else
    b = (n * sumxy - sumx * sumy) / (n * sumx2 - sumx * sumx)
    endif
    a = (sumy - b * sumx) / n
     
    drawsegment(barindex[lookback],a+b*lookback,barindex,a+b*0)style(line,5) coloured(colorRed,colorGreen,colorBlue)
     
    //channel
    if ChannelType = 1 then //Standard Deviation
    dat = std[lookback]*NbDeviation
    else
    dat = ste[lookback]*NbDeviation
    endif
    //drawsegment(barindex[lookback],(a+b*lookback)+dat,barindex,a+b*0+dat) coloured(colorRed,colorGreen,colorBlue)
    drawsegment(barindex[lookback],(a+b*lookback)-dat,barindex,a+b*0-dat) coloured(colorRed,colorGreen,colorBlue)style(line,3)
    /////////////////////////////////////////////////////
    //////////////////////////////////////////////////////
    drawsegment(barindex[lookback],(a+b*lookback)+dat,barindex,a+b*0+dat) coloured(colorRed,colorGreen,colorBlue)style(line,3)
    NbDeviation2 = 2  //Deviation multiplier
    //channel 2
    if ChannelType = 2 then //Standard Deviation
    dat2 = std[lookback]*NbDeviation2
    else
    dat2 = ste[lookback]*NbDeviation2
    endif
    drawsegment(barindex[lookback],(a+b*lookback)-dat2,barindex,a+b*0-dat2) coloured (0,255,8)//(colorRed,colorGreen,colorBlue)
    drawsegment(barindex[lookback],(a+b*lookback)+dat2,barindex,a+b*0+dat2) coloured (255,9,0)
    /////////////////////////////////////////////////////
    return customclose as " Linear regression channel  "
    
    // Variable :
    // lookback = 365
    CAC-Droite-de-RGL.jpg CAC-Droite-de-RGL.jpg
    #195592 quote
    Nicolas
    Keymaster
    Master

    ces deux versions sur le site de HKL, pour autant aucune ne fonctionne ?

    Ces codes utilisent le DPO, qui connaissait le prix futur, donc idéal pour tracer des lignes de régression linéaire, il s’agissait d’une astuce, mais depuis plusieurs années l’instruction DPO a été corrigé/modifié, donc ces codes ne sont plus viables.

    #195620 quote
    supertiti
    Participant
    Master

    Bonjour à tous,

    Merci Nicolas pour le retour, quelqu’un saurait -il comment colorier les closes en dehors des lignes extérieures , voir les elipses sur le graphe joint de Engie

    bonne journée et bons trades

    ELIPSE-Engie.jpg ELIPSE-Engie.jpg
    #195724 quote
    supertiti
    Participant
    Master

    Bonjour à tous,

    Dans le code originel de Nicolas la valeur “NbDeviation ” est égale à 1 , comme je voulais doubler cette bande j’ai mis “NbDeviation2” à 2.

    Mais ça a l’air plus coton que ça ! car les bandes ne sont pas toujours égales aux premières.

    je joins un graphe pour illustrer:

    Si quelqu’un a une idée ?

    Bonne journée

    Bandes-rouges-et-vertes-inegales.jpg Bandes-rouges-et-vertes-inegales.jpg
    #195743 quote
    Nicolas
    Keymaster
    Master

    Désolé je ne comprends pas..

    #195767 quote
    supertiti
    Participant
    Master

    Bonjour Nicolas,

    Je souhaite juste que la bande 2 soit égale en largeur que la bande 1 et que la 4 soit égale à la 3

    image jointe

    merci

    bandes-1234.jpg bandes-1234.jpg
    #195816 quote
    Nicolas
    Keymaster
    Master

    Euh c’est toi même qui a ajouté ces lignes avec NbDeviation2 = 2, donc indique la même quantité de deviation que les autres lignes, soit 1 🙂

    #195840 quote
    supertiti
    Participant
    Master

    Bonjour Nicolas,

    Euh je me suis débouché les sinus et ça va mieux !

    Le code qui va bien est celui là :

    merci et bonne journée

     

    NbDeviation2 = 2 //Deviation multiplier
    //channel 2
    if ChannelType = 1 then //Standard Deviation
    dat2 = std[lookback]*NbDeviation2
    else
    dat2 = ste[lookback]*NbDeviation2
    endif

    Telefonica.jpg Telefonica.jpg
    #195947 quote
    smn
    Participant
    New

    Bonsoir à tous,

    A partir du code de Nicolas j’ai fais cela , qu’est-ce qu’il en pense le boss ?

    J’aurais aimé colorer les excès des lignes extérieures mais je ne vois pas comment faire, si quelqu’un a une idée ne pas hésiter à en faire part à la communauté.

    Bonjour supertiti et Nicolas,
    J’essaye d’appliquer ce code au graphique en échelle logarithmique car c’est ce qui est utilisé par Hiboo.
    Pouvez-vous m’indiquer ce qu’il faut que je change pour que ca fonctionne ?
    merci
    Bonne fin de journée

    #195971 quote
    supertiti
    Participant
    Master

    Bonsoir Smn

    Sur prix : petit tableau à droite, configurer mettre les prix à l’échelle logarithmique

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

Droite de régression linéaire plus 1 écart type


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
Ozons @ozons Participant
Summary

This topic contains 25 replies,
has 5 voices, and was last updated by ZeroCafeine
2 years, 11 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 06/14/2022
Status: Active
Attachments: 12 files
Logo Logo
Loading...