ProRealCode - Trading & Coding with ProRealTime™
Bonjour,
à partir des exemples postés par Nicolas ou sur le blog HK Lisse, j’essaye en vain de créer un indicateur permettant :
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.
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
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
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.
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
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
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.
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
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
Désolé je ne comprends pas..
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
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 🙂
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
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é.
Regression Linear Channel// 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 period
ChannelType = 1 //1= Standard Deviation ; 2= Standard Erro
NbDeviation = 1 //Deviation multiplier
colorRed = 255
colorGreen = 255
colorBlue = 0
// — end of settingssumx = 0
sumy = 0
sumxy = 0
sumx2 = 0for cmpt = lookback downto 0 do
tmpx = cmpt
tmpy = close[cmpt]
sumy = sumy+tmpy
sumx = sumx+tmpx
sumx2 = sumx2 + (tmpx*tmpx)
sumxy = sumxy + (tmpy*tmpx)
nextn = 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) / ndrawsegment(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 = 365123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566// 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 = 365
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
Bonsoir Smn
Sur prix : petit tableau à droite, configurer mettre les prix à l’échelle logarithmique
Droite de régression linéaire plus 1 écart type
This topic contains 25 replies,
has 5 voices, and was last updated by ZeroCafeine
3 years, 1 month ago.
| Forum: | ProBuilder : Indicateurs & Outils Personnalisés |
| Language: | French |
| Started: | 06/14/2022 |
| Status: | Active |
| Attachments: | 12 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.