Filtre Hodrick-Prescott – Comment renvoyer les valeurs ?
Forums › ProRealTime forum Français › Support ProBuilder › Filtre Hodrick-Prescott – Comment renvoyer les valeurs ?
- This topic has 16 replies, 2 voices, and was last updated 2 years ago by
Denis.
-
-
11/14/2022 at 4:06 PM #204157
Bonjour à tous,
Nicolas a republié sur Twitter ce week-end un code qu’il avait élaboré sur la base du Filtre Hodrick–Prescott.
J’ai trouvé ce code intéressant et complémentaire aux indicateurs que j’utilise et j’ai voulu renvoyer les valeurs de traçage du drawsegment restitué par le code en insérant une instruction du type « return $output » comme le suggérait Nicolas dans les commentaires.
Malheureusement, cela ne me renvoie une valeur qu’à partir de l’instant où j’ouvre un graphique et en plus un peu différente du drawsegment.
Si quelqu’un a une suggestion pour renvoyer les valeurs de traçage du drawsegment, il m’aiderait grandement.
En vous remerciant par avance, je vous souhaite un agréable après-midi.
Denis
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667defparam drawonlastbaronly=true//PRC_Hodrick-Prescott filter | indicator//28.09.2020//Nicolas @ www.prorealcode.com//Sharing ProRealTime knowledge// --- settingsnobs =1000 //Number of bars to smoothlambda =1600 //Higher lambda leads to the smoother data// --- end of settingsif islastbarupdate and barindex>max(nobs,lambda) thenfor i=0 to nobs-1$output[i]=Close[i]next$a[0]=1.0+lambda$b[0]=-2.0*lambda$c[0]=lambdafor i=1 to nobs-3 do$a[i]=6.0*lambda+1.0$b[i]=-4.0*lambda$c[i]=lambdanext$a[1]=5.0*lambda+1$a[nobs-1]=1.0+lambda$a[nobs-2]=5.0*lambda+1.0$b[nobs-2]=-2.0*lambda$b[nobs-1]=0.0$c[nobs-2]=0.0$c[nobs-1]=0.0//Forwardfor i=0 to nobs-1 doZ=$a[i]-H4*H1-HH5*HH2HB=$b[i]HH1=H1H1=(HB-H4*H2)/Z$b[i]=H1HC=$c[i]HH2=H2H2=HC/Z$c[i]=H2$a[i]=($output[i]-HH3*HH5-H3*H4)/ZHH3=H3H3=$a[i]H4=HB-H5*HH1HH5=H5H5=HCnext//BackwardH2=0H1=$a[nobs-1]$output[nobs-1]=H1for i=nobs-2 downto 0 do$output[i]=$a[i]-$b[i]*H1-$c[i]*H2H2=H1H1=$output[i]//drawpoint(barindex[i],$output[i],1) coloured(255,255,0)drawsegment(barindex[i],$output[i],barindex[i+1],$output[i+1]) coloured(255,255,0) style(line,3)nextendifreturn11/15/2022 at 10:11 AM #204193Attention, il faut bien comprendre qu’on trace les segments dans le passé et que ces valeurs (dans le passé) se modifieront à chaque nouvelle bougie pour coller parfaitement aux nouvelles données acquises (bref, ça repeint..). Donc même si on affiche les données vues dans chaque chandelier en temps réel, elles seront caduques (et donc fausse) à chaque nouvelle données (chandelier) reçues. Ai-je été clair ?
Donc en gros, les données des segments telles que tu les visualise sur l’historique ne sont pas du tout les mêmes en temps réel.
1 user thanked author for this post.
11/15/2022 at 10:34 AM #20419411/18/2022 at 11:05 AM #20437811/18/2022 at 11:07 AM #204381Oui c’est bien ce que fait l’indicateur actuellement 🙂
Je crois que tu n’as pas bien compris. On peut afficher la valeur à l’instant T, le temps s’écoule, cette valeur se décale dans le passé à la bougie n-1, et on recommence. C’est ce que tu observes, cette valeur ne sera plus valable dès le prochain tick reçu car elle se verra modifié avec les nouvelles données disponibles. Rien qu’on ne calcule en temps réel ne sera valable hormis dans l’historique, donc purement visuel et c’est pour cela qu’on trace ces infos avec un dessin constitué de segments.
1 user thanked author for this post.
11/18/2022 at 11:23 AM #20438211/22/2022 at 10:00 AM #204626Un zigzag pointe un plus haut et un plus bas du prix, il sera fixé après X bougies. Donc le principe est le même, l’information en temps réel est susceptible de changer durant X bougies, après ce laps de temps elle sera fixé, donc en temps réel on ne peut connaître la dernière valeur qu’aura le zigzag.
1 user thanked author for this post.
11/22/2022 at 1:44 PM #204646Bonjour Nicolas,
Merci pour ton retour. Je me suis peut-être mal exprimé :
Je ne discute pas le fait que les dernières valeurs changent jusqu’à être figées à un moment, que ce soit pour le ZigZag ou le Hodrick-Prescott.
Mais même susceptible de bouger, c’est une valeur qui est renvoyée pour le ZigZag et pas un segment.
J’ai essayé désespérément de rajouter une commande dans ton code Hodrick-Prescott pour renvoyer des valeurs plutôt qu’un segment mais sans succès.
Toi qui es bien plus à même que moi de trouver une subtilité de code, aurais-tu une suggestion pour renvoyer l’historique des valeurs plutôt qu’un segment ?
Même si les dernières changent et ne se figent qu’au bout de X bougies, cela importe peu.
En te remerciant par avance pour ton aide.
11/22/2022 at 1:59 PM #20464711/22/2022 at 2:04 PM #20465211/22/2022 at 2:26 PM #204654Sauf erreur de ma part, cela renvoie bien la dernière valeur à l’instant t (celui où on ouvre le graphique) et ensuite les suivantes (sous réserve de laisser le graphique ouvert) mais pas celles précédant la dernière valeur à l’instant où on ouvre le graphique.
Cela donne le même résultat que de mettre dans la boucle “V=output[i]” et à la fin “return V”
Faut-il en conclure que ce n’est pas possible d’avoir les valeurs historiques comme pour le ZigZag ?
Ou faut-il que je fasse une demande spécifique de prestation payant ?
Merci pour ton retour Nicolas
11/22/2022 at 2:38 PM #204656Ces valeurs ont changées, peut être une centaine de fois, comme tu peux le voir sur les images que j’ai posté, la ligne jaune c’est la même valeur que la ligne blanche mais qui s’adapte à chaque nouvelle bougie.
Avec le code ci-dessous, le calcule démarre dés la première barre de l’historique, donc tu auras les anciennes valeurs du tableau, plus gourmand en ressources par contre.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768defparam drawonlastbaronly=true//PRC_Hodrick-Prescott filter | indicator//28.09.2020//Nicolas @ www.prorealcode.com//Sharing ProRealTime knowledge// --- settingsnobs =1000 //Number of bars to smoothlambda =1600 //Higher lambda leads to the smoother data// --- end of settingsif /*islastbarupdate and*/ barindex>max(nobs,lambda) thenfor i=0 to nobs-1$output[i]=Close[i]next$a[0]=1.0+lambda$b[0]=-2.0*lambda$c[0]=lambdafor i=1 to nobs-3 do$a[i]=6.0*lambda+1.0$b[i]=-4.0*lambda$c[i]=lambdanext$a[1]=5.0*lambda+1$a[nobs-1]=1.0+lambda$a[nobs-2]=5.0*lambda+1.0$b[nobs-2]=-2.0*lambda$b[nobs-1]=0.0$c[nobs-2]=0.0$c[nobs-1]=0.0//Forwardfor i=0 to nobs-1 doZ=$a[i]-H4*H1-HH5*HH2HB=$b[i]HH1=H1H1=(HB-H4*H2)/Z$b[i]=H1HC=$c[i]HH2=H2H2=HC/Z$c[i]=H2$a[i]=($output[i]-HH3*HH5-H3*H4)/ZHH3=H3H3=$a[i]H4=HB-H5*HH1HH5=H5H5=HCnext//BackwardH2=0H1=$a[nobs-1]$output[nobs-1]=H1for i=nobs-2 downto 0 do$output[i]=$a[i]-$b[i]*H1-$c[i]*H2H2=H1H1=$output[i]//drawpoint(barindex[i],$output[i],1) coloured(255,255,0)drawsegment(barindex[i],$output[i],barindex[i+1],$output[i+1]) coloured(255,255,0) style(line,3)nextendifreturn $output[0]1 user thanked author for this post.
11/22/2022 at 2:45 PM #20465711/22/2022 at 4:39 PM #20465911/25/2022 at 9:37 AM #204797Bonjour Nicolas,
Encore merci pour ton aide.
Il y a quelque chose que je ne m’explique pas :
Quelle que soit la valeur que je mette pour Lambda dans la version avec valeurs (Cf. image jointe, courbes rose et jaunes superposés et segments en noir), la courbe reste la même alors que dans la version avec segment, on a bien des courbes différentes selon la valeur de Lambda (courbes en rose et bleu dans la 2e image)?
As-tu une idée d’où cela peut-il venir ?
En te remerciant par avance.
-
AuthorPosts