Droite de régression linéaire plus 1 écart type
Forums › ProRealTime forum Français › Support ProBuilder › Droite de régression linéaire plus 1 écart type
- This topic has 25 replies, 5 voices, and was last updated 1 year ago by
ZeroCafeine.
-
-
06/14/2022 at 10:14 AM #195251
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.
06/14/2022 at 11:46 AM #195254J’é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)
12345period = max(1,barindex)lr = linearregression[period]dev = lr-std[period]return lr, dev06/14/2022 at 11:50 AM #195256Version 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).
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152//PRC_Std and Ste LinRegChannel | indicator//Standard Deviation and Standard Error//Linear Regression Channel//12.03.2019//Nicolas @ www.prorealcode.com//Sharing ProRealTime knowledgedefparam drawonlastbaronly=true// --- settingslookback= max(1,barindex) //channel periodChannelType = 1 //1= Standard Deviation ; 2= Standard ErroNbDeviation = 1 //Deviation multipliercolorRed = 255colorGreen = 255colorBlue = 0// --- end of settingssumx = 0sumy = 0sumxy = 0sumx2 = 0for cmpt = lookback downto 0 dotmpx = cmpttmpy = close[cmpt]sumy = sumy+tmpysumx = sumx+tmpxsumx2 = sumx2 + (tmpx*tmpx)sumxy = sumxy + (tmpy*tmpx)nextn = lookback+1if (sumx2 = sumx * sumx) then // protection to avoid infinite valuesb = sumxy - sumx * sumyelseb = (n * sumxy - sumx * sumy) / (n * sumx2 - sumx * sumx)endifa = (sumy - b * sumx) / ndrawsegment(barindex[lookback],a+b*lookback,barindex,a+b*0) coloured(colorRed,colorGreen,colorBlue)//channelif ChannelType = 1 then //Standard Deviationdat = std[lookback]*NbDeviationelsedat = ste[lookback]*NbDeviationendif//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)return06/14/2022 at 12:35 PM #195260Bonjour 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.
06/18/2022 at 6:32 PM #195530Bonsoir à 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
Droite de RL V112345678910111213141516171819202122232425262728293031323334353637once j=0det=DPO[k*2](close)if det=det[1] and det[1]=det[2] and det[2]<>det[3] thenflag=1endifn=(k*2)-4p=(n/2)-1d1=DPO[n](close)moy=close-d1co=(moy-moy[1]+(close[p])/n)*nif flag=1 and flag[1]=0 thensomx=0somy=0somxx=0somxy=0for i=1 to ksomx=somx+inextfor i=0 to k-1somy=somy+co[i]nextfor i=1 to ksomxx=somxx+(i*i)nextfor i=0 to k-1somxy=somxy+(co[i]*(k-i))nexta=(k*somxy-somx*somy)/(k*somxx-somx*somx)b=(somy-a*somx)/kendifif flag=0 thenreg=undefinedelsej=j+1reg=a*j+bendifreturn regDroite de RL V2123456789101112131415161718192021222324///////////// regression automatique v.02 /////////once j=0de48=DPO[k*2](close)if de48=de48[1] and de48[1]=de48[2] and de48[2]<>de48[3] thenflag=1endifn=(k*2)-4p=(n/2)-1d100=DPO[n](close)moy100=close-d100co=(moy100-moy100[1]+(close[p])/n)*nif flag=1 and flag[1]=0 thentest=linearregression[k](co)test1=linearregressionslope[k](co)a=test1b=test-test1*kendifif flag=0 thenreg=undefinedelsej=j+1reg=a*j+bendifreturn reg06/19/2022 at 5:27 PM #195567Bonsoir à 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é.
Regression Linear Channel123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566// 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 knowledgedefparam drawonlastbaronly=true// --- settings// lookback= max(1,barindex) //channel periodChannelType = 1 //1= Standard Deviation ; 2= Standard ErroNbDeviation = 1 //Deviation multipliercolorRed = 255colorGreen = 255colorBlue = 0// --- end of settingssumx = 0sumy = 0sumxy = 0sumx2 = 0for cmpt = lookback downto 0 dotmpx = cmpttmpy = close[cmpt]sumy = sumy+tmpysumx = sumx+tmpxsumx2 = sumx2 + (tmpx*tmpx)sumxy = sumxy + (tmpy*tmpx)nextn = lookback+1if (sumx2 = sumx * sumx) then // protection to avoid infinite valuesb = sumxy - sumx * sumyelseb = (n * sumxy - sumx * sumy) / (n * sumx2 - sumx * sumx)endifa = (sumy - b * sumx) / ndrawsegment(barindex[lookback],a+b*lookback,barindex,a+b*0)style(line,5) coloured(colorRed,colorGreen,colorBlue)//channelif ChannelType = 1 then //Standard Deviationdat = std[lookback]*NbDeviationelsedat = ste[lookback]*NbDeviationendif//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 2if ChannelType = 2 then //Standard Deviationdat2 = std[lookback]*NbDeviation2elsedat2 = ste[lookback]*NbDeviation2endifdrawsegment(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 = 36506/20/2022 at 8:41 AM #195592ces 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.
06/20/2022 at 12:48 PM #19562006/21/2022 at 11:35 AM #195724Bonjour à 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
06/21/2022 at 2:48 PM #19574306/21/2022 at 4:30 PM #19576706/22/2022 at 9:40 AM #19581606/22/2022 at 11:36 AM #195840Bonjour 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
endif06/23/2022 at 12:45 PM #195947Bonsoir à 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é.
Regression Linear Channel123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566// 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 @ http://www.prorealcode.com //Sharing ProRealTime knowledgedefparam drawonlastbaronly=true// — settings// lookback= max(1,barindex) //channel periodChannelType = 1 //1= Standard Deviation ; 2= Standard ErroNbDeviation = 1 //Deviation multipliercolorRed = 255colorGreen = 255colorBlue = 0// — end of settingssumx = 0sumy = 0sumxy = 0sumx2 = 0for cmpt = lookback downto 0 dotmpx = cmpttmpy = close[cmpt]sumy = sumy+tmpysumx = sumx+tmpxsumx2 = sumx2 + (tmpx*tmpx)sumxy = sumxy + (tmpy*tmpx)nextn = lookback+1if (sumx2 = sumx * sumx) then // protection to avoid infinite valuesb = sumxy – sumx * sumyelseb = (n * sumxy – sumx * sumy) / (n * sumx2 – sumx * sumx)endifa = (sumy – b * sumx) / ndrawsegment(barindex[lookback],a+b*lookback,barindex,a+b*0)style(line,5) coloured(colorRed,colorGreen,colorBlue)//channelif ChannelType = 1 then //Standard Deviationdat = std[lookback]*NbDeviationelsedat = ste[lookback]*NbDeviationendif//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 2if ChannelType = 2 then //Standard Deviationdat2 = std[lookback]*NbDeviation2elsedat2 = ste[lookback]*NbDeviation2endifdrawsegment(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 = 365Bonjour 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ée06/23/2022 at 5:49 PM #195971 -
AuthorPosts
Find exclusive trading pro-tools on