Identification de l’écart le plus petit sur les 50 dernières périodes
Forums › ProRealTime forum Français › Support ProBuilder › Identification de l’écart le plus petit sur les 50 dernières périodes
- This topic has 17 replies, 3 voices, and was last updated 1 year ago by
finplus.
-
-
03/30/2023 at 5:29 PM #212573indicateur12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576/////////////////////////////////////KAMA 150Period = 150FastPeriod = 2SlowPeriod = 30Fastest = 2 / (FastPeriod + 1)Slowest = 2 / (SlowPeriod + 1)if barindex < Period+1 thenKama=closeelseNum = abs(close-close[Period])Den = summation[Period](abs(close-close[1]))ER = Num / DenAlpha = SQUARE(ER *(Fastest - Slowest )+ Slowest)KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])endif/////////////////////////////////////////////////// Intervention Zone///////////////////////////////////////////////////////////////////: Distance Cours KAMAxClose = (Open+High+Low+Close)/4Distance = (xclose- kama)moy = exponentialaverage[period]((distance))if Moy<Moy[1] and Moy[1]>Moy[2] and Moy[1]>0 thenRetB5=RetB4RetB4=RetB3RetB3=RetB2RetB2=RetB1RetB1=Moy[1]RetBmoy=(RetB1+RetB2+RetB3+RetB4+RetB5)/5endifif Moy>Moy[1] and Moy[1]<Moy[2] and Moy[1]<0 thenRetH5=RetH4RetH4=RetH3RetH3=RetH2RetH2=RetH1RetH1=Moy[1]RetHmoy=(RetH1+RetH2+RetH3+RetH4+RetH5)/5endifif abs(retBmoy-0) > abs(retHmoy-0) thenlimitUP = retBmoyelsif abs(retBmoy-0) < abs(retHmoy-0) thenLimitUp = -RetHmoyendifif abs(RetHmoy-0) > abs(RetBmoy-0) thenlimitDn = RetHmoyelsif abs(RetHmoy-0) < abs(RetBmoy-0) thenLimitDn = - RetBmoyendifif (xclose - kama > 0) thendistplus = distanceelsedistminus =-distanceendifmoyplus = average[150](distplus)*1.28moyminus = -average[150](distminus)*1.28Ecart = abs(retBmoy - retHmoy)Ecartmin = lowest[50](ecart)Return distance as "Distance", moy as "DM Moy", RetBmoy as "Moyenne 5 derniers retournements baissiers", RetHmoy as "Moyenne 5 derniers retournements haussiers",limitUp as "LimitUp", limitDn as "LimitDn",moyplus as "moyenne plus", moyminus as "moyenne minus", ecart as "ecart", ecartmin as "ecartmin"
Bonsoir,
je souhaiterai pouvoir identifier l’écart le plus petit entre les deux moyennes des 5 derniers retournements baissiers et haussiers sur les 50 dernières périodes. j’ai bien tenté une formule dans le code avec “Ecartmin” mais bon j’ai l’impression que le résultat laisse à désirer. Si quelqu’un peut voir où ça coince, merci pour l’aide apportée.
03/31/2023 at 8:11 AM #21258803/31/2023 at 4:02 PM #212616Merci pour ce retour. Je mets dans le graphe joint deux courbes = les traits jaunes verticaux représentent l’écart abs(retBmoy – retHmoy) et la ligne noire est censée représenter le plus bas des 50 derniers écart. Sauf que cette ligne noire augmente en même temps que l’écart. Ce qui n’est pas normal puisque la ligne noire est censée se caler sur le plus petit des écarts (donc si l’écart s’accroit, en toute logique, la ligne noire ne devrait pas bouger.
04/03/2023 at 12:50 PM #21272004/03/2023 at 1:05 PM #212722Ce qui n’est pas normal puisque la ligne noire est censée se caler sur le plus petit des écarts (donc si l’écart s’accroit, en toute logique, la ligne noire ne devrait pas bouger.
Ce que tu décris comme “pas logique” serait le cas si tu avais voulu le plus petit des écarts “de tout l’historique”, or tu l’as toi-même décrit comme un minimum des 50 derniers, donc au contraire si ton écart ne fait qu’augmenter dès que l’ancien minimum passe en 51e position il sort de l’échantillon des 50 derniers et c’est le nouveau plus petit des 50 derniers qui prend la relève tout en étant plus haut que son prédécesseur, donc a priori rien d’anormal dans le graphe histogramme jaune & ligne noire.
04/03/2023 at 1:09 PM #21272304/03/2023 at 1:42 PM #212727Pour commencer à mesurer un ecartmin de tout l’historique dès qu’il y a eu aussi bien 5 retH que 5 ret B (sinon on resterait sur ecartmin=0), on pourrait initialiser puis mettre à jour le minimum ainsi par exemple:
1234if RetBmoy<>0 and RetHmoy<>0 thenonce ecartmin=ecartendifecartmin = min(ecart,ecartmin)04/03/2023 at 1:46 PM #21272804/03/2023 at 1:48 PM #21272904/03/2023 at 1:58 PM #212730Pour faire sur 50, c’est comme tu avais déjà fait en ligne 72 de ton post #212573, c’était ok sans rien changer.
Pour min(ecart,ecartmin) ça rend la variable ecartmin égale à la plus petite (min comme minimum) des 2 valeurs entre parenthèses, donc entre ecart et ecartmin (sa valeur juste avant cette ligne), autrement dit soit ecart est plus petit qu’ecartmin et ecartmin devient ecart, soit ecart est plus grand qu’ecartmin et ecartmin reste ecartmin
https://www.prorealcode.com/documentation/min/
1 user thanked author for this post.
04/03/2023 at 2:11 PM #21273104/03/2023 at 8:35 PM #212752/////////////////////////////////////KAMA 150
Period = 150
FastPeriod = 2
SlowPeriod = 30Fastest = 2 / (FastPeriod + 1)
Slowest = 2 / (SlowPeriod + 1)
if barindex < Period+1 then
Kama=close
else
Num = abs(close-close[Period])
Den = summation[Period](abs(close-close[1]))
ER = Num / Den
Alpha = SQUARE(ER *(Fastest – Slowest )+ Slowest)
KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])
endif/////////////////////////////////////////////////// Intervention Zone
///////////////////////////////////////////////////////////////////: Distance Cours KAMA
xClose = (Open+High+Low+Close)/4
Distance = (xclose- kama)moy = exponentialaverage[period]((distance))
if Moy<Moy[1] and Moy[1]>Moy[2] and Moy[1]>0 then
RetB5=RetB4
RetB4=RetB3
RetB3=RetB2
RetB2=RetB1
RetB1=Moy[1]
RetBmoy=(RetB1+RetB2+RetB3+RetB4+RetB5)/5
endifif Moy>Moy[1] and Moy[1]<Moy[2] and Moy[1]<0 then
RetH5=RetH4
RetH4=RetH3
RetH3=RetH2
RetH2=RetH1
RetH1=Moy[1]
RetHmoy=(RetH1+RetH2+RetH3+RetH4+RetH5)/5
endifif abs(retBmoy-0) > abs(retHmoy-0) then
limitUP = retBmoy
elsif abs(retBmoy-0) < abs(retHmoy-0) then
LimitUp = -RetHmoy
endifif abs(RetHmoy-0) > abs(RetBmoy-0) then
limitDn = RetHmoy
elsif abs(RetHmoy-0) < abs(RetBmoy-0) then
LimitDn = – RetBmoy
endifif (xclose – kama > 0) then
distplus = distance
else
distminus =-distance
endifmoyplus = average[150](distplus)*1.28
moyminus = -average[150](distminus)*1.28Ecart = abs(retBmoy – retHmoy)
if RetBmoy<>0 and RetHmoy<>0 then
once ecartmin=ecart
endifecartmin = min(ecart,ecartmin)
Ecartmini = lowest[50](ecartmin)Return distance as “Distance”, moy as “DM Moy”, RetBmoy as “Moyenne 5 derniers retournements baissiers”, RetHmoy as “Moyenne 5 derniers retournements haussiers”,limitUp as “LimitUp”, limitDn as “LimitDn”,moyplus as “moyenne plus”, moyminus as “moyenne minus”, ecart as “ecart”, ecartmini as “ecartmin”
désolé, impossible d’intégrer le code correctement. Donc est-ce que la fin du code est correcte parce que graphiquement ce n’est pas ce que j’attendais. Merci.
04/04/2023 at 9:00 AM #212761Les 2 requêtes précédentes étaient: soit ecartmin sur l’historique (code fourni), soit ecartmin sur 50 périodes (ce que tu avais déjà fait).
Là tu as créé une 3e chose différente, tu as fait un ecartminI sur 50 périodes de l’ecartmin sur l’historique, ça n’est plus la même chose que ce qui a été proposé à tes requêtes, donc normal que ça ne donne rien d’attendu. Soit la requête change à nouveau, soit tu dois choisir entre les 2 premières requêtes (ecartmin sur 50 périodes ou sur l’historique).
1 user thanked author for this post.
04/04/2023 at 9:06 AM #212762Merci pour la réponse. Mais comment indique que cette ligne de code :
1234if RetBmoy<>0 and RetHmoy<>0 thenonce ecartmin=ecartendifecartmin = min(ecart,ecartmin)doit être appliquée sur un historique défini (par exemple les 50 dernières périodes) ? Je ne comprends pas.
04/04/2023 at 9:28 AM #212766D’accord. Donc j’ai mal formulé ma demande. Quelle serait alors la formule pour identifier le plus petit des écarts de tout l’historique ?
Merci.
C’est cette question qui a débouché sur ce bout de 4 lignes de code en réponse à la requête modifiée de trouver une solution appliquée sur “tout” l’historique.
Si tu veux sur 50, tu n’avais rien à changer à ton post de départ “Ecartmin = lowest[50](ecart)”, où tu croyais qu’il y avait une erreur de code mais que le code était bon c’était juste une erreur d’interprétation de la ligne noire sur histo jaune.
Par extension si tu veux sur une autre valeur que 50, par exemple 100, tu gardes ta façon de faire avec lowest “Ecartmin = lowest[100](ecart)” mais pas besoin d’appliquer mon bout de code qui était fait non pas pour une portion d’historique mais uniquement pour tout l’historique.
-
AuthorPosts
Find exclusive trading pro-tools on