Ajouter une moyenne à un indicateur
Forums › ProRealTime forum Français › Support ProBuilder › Ajouter une moyenne à un indicateur
- This topic has 11 replies, 3 voices, and was last updated 1 month ago by
finplus.
-
-
10/23/2025 at 5:36 PM #252988
Bonsoir,
voici l’indicateur
/////////////////////////////////////KAMA 150
Period = 150
FastPeriod = 2
SlowPeriod = 50Fastest = 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///////////////////////////////////////////////////////////////////: Distance Cours KAMA
xClose = (Open+High+Low+Close)/4
Distance = (xclose- kama)moy = average[550]((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)/3
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)/3
endiffor i=0 to 49
$montab[i]=distance[i]
Nextarraysort($montab,ascend)
moy3plusBas = ($montab[0] + $montab[1] + $montab[2]) / 3
moy3plusHauts = ($montab[49] + $montab[48] + $montab[47]) / 3if (distance > moy) and (distance > moy3plushauts) and (distance > 0) then
drawcandle (0,0, distance, distance) COLOURED (0,0,255)
endifif (distance < moy) and (distance < moy3plusbas) and (distance < 0) then
drawcandle (0,0, distance, distance) COLOURED (255,0,0)
endifReturn distance as “Distance”, moy as “Distance Moy”, RetBmoy as “Bande Haute”, RetHmoy as “Bande Basse”, moy3plusHauts as “FilterUp”, moy3plusBas as “FilterDn”
je souhaiterai ajouter à l’indicateur ci-dessous une moyenne des 3 “FilterUp” les plus hauts calculés sur les 50 dernières barres et la moyenne des 3 “FilterDn” les plus bas calculés sur les 50 dernières barres, puis d’en tirer deux lignes horizontales pour matérialiser cette moyenne, cette ligne s’étalant sur les 50 dernières barres.
Cette ligne devra laisser place à une nouvelle si le calcul de la moyenne change.
j’espère avoir été clair.
Merci.
Je mets ci-dessous une capture écran de l’indicateur.
10/27/2025 at 10:38 AM #253072voici:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110// KAMA 150Period = 150FastPeriod = 2SlowPeriod = 50Fastest = 2 / (FastPeriod + 1)Slowest = 2 / (SlowPeriod + 1)IF BarIndex < Period + 1 THENKama = CloseELSENum = ABS(Close - Close[Period])Den = Summation[Period](ABS(Close - Close[1]))IF Den <> 0 THENER = Num / DenELSEER = 0ENDIFAlpha = SQUARE(ER * (Fastest - Slowest) + Slowest)Kama = (Alpha * Close) + ((1 - Alpha) * Kama[1])ENDIFxClose = (Open + High + Low + Close) / 4Distance = (xClose - Kama)moy = Average[550](Distance)IF Moy < Moy[1] AND Moy[1] > Moy[2] AND Moy[1] > 0 THENRetB3 = RetB2RetB2 = RetB1RetB1 = Moy[1]RetBmoy = (RetB1 + RetB2 + RetB3) / 3ENDIFIF Moy > Moy[1] AND Moy[1] < Moy[2] AND Moy[1] < 0 THENRetH3 = RetH2RetH2 = RetH1RetH1 = Moy[1]RetHmoy = (RetH1 + RetH2 + RetH3) / 3ENDIFhistoryLength = 50IF BarIndex >= historyLength -1 THENFOR i = 0 TO historyLength - 1 DO$montab[i] = Distance[i]NEXTArraySort($montab, ascend)moy3plusbas = ($montab[0] + $montab[1] + $montab[2]) / 3moy3plushauts = ($montab[historyLength - 1] + $montab[historyLength - 2] + $montab[historyLength - 3]) / 3ELSEmoy3plusbas = Undefinedmoy3plushauts = UndefinedENDIFFOR i = historyLength - 1 DOWNTO 1 DO$histHauts[i] = $histHauts[i-1]$histBas[i] = $histBas[i-1]NEXT$histHauts[0] = moy3plushauts$histBas[0] = moy3plusbasONCE finalLineHaut = UndefinedONCE finalLineBas = UndefinedIF BarIndex >= historyLength - 1 THENFOR i = 0 TO historyLength - 1 DO$tempHauts[i] = $histHauts[i]$tempBas[i] = $histBas[i]NEXTArraySort($tempHauts, descend)ArraySort($tempBas, ascend)avgTop3Hauts = UndefinedavgBottom3Bas = UndefinedIF IsSet($tempHauts[0]) AND IsSet($tempHauts[1]) AND IsSet($tempHauts[2]) THENavgTop3Hauts = ($tempHauts[0] + $tempHauts[1] + $tempHauts[2]) / 3ENDIFIF IsSet($tempBas[0]) AND IsSet($tempBas[1]) AND IsSet($tempBas[2]) THENavgBottom3Bas = ($tempBas[0] + $tempBas[1] + $tempBas[2]) / 3ENDIFIF finalLineHaut <> avgTop3Hauts AND avgTop3Hauts <> Undefined THENfinalLineHaut = avgTop3HautsENDIFIF finalLineBas <> avgBottom3Bas AND avgBottom3Bas <> Undefined THENfinalLineBas = avgBottom3BasENDIFIF BarIndex = historyLength - 1 THENfinalLineHaut = avgTop3HautsfinalLineBas = avgBottom3BasENDIFELSEfinalLineHaut = UndefinedfinalLineBas = UndefinedENDIFIF (Distance > moy) AND (Distance > moy3plushauts) AND (Distance > 0) THENDRAWSEGMENT(BarIndex, 0, BarIndex, Distance) coloured(0, 0, 255) style(line)ENDIFIF (Distance < moy) AND (Distance < moy3plusbas) AND (Distance < 0) THENDRAWSEGMENT(BarIndex, 0, BarIndex, Distance) coloured(255, 0, 0) style(line)ENDIFRETURN Distance AS "Distance" coloured("blue"), moy AS "Distance Moy", RetBmoy AS "Bande Haute", RetHmoy AS "Bande Basse", moy3plusHauts AS "FilterUp", moy3plusbas AS "FilterDn", finalLineHaut AS "Avg Top3 Hist" coloured(0, 255, 0) style(line, 2), finalLineBas AS "Avg Bot3 Hist" coloured(255, 165, 0) style(line, 2)2 users thanked author for this post.
10/27/2025 at 7:13 PM #25310210/29/2025 at 7:10 PM #253132Bonsoir,
je vous fait un retour sur l’indicateur demandé. J’ai fait une capture écran du CAC CHF en UT 1h. Ce qui me gêne est que la ligne verte qui représente la moyenne des 3 FilterUP les plus hauts constatés sur les 50 dernières barres colle en réalité aux évolutions des barres. Or s’il s’agit d’une moyenne, la ligne verte ne devrait pas se comporter ainsi.
Mais peut-être que ma demande est mal rédigée.
Merci pour votre attention.
11/09/2025 at 8:06 PM #25344011/10/2025 at 6:21 AM #253444L’indicateur ci-dessous affiche également les lignes moyennes (verte et orange), ce qui permet de visualiser l’évolution des moyennes…
Les valeurs sont correctes…
Moyenne a un indicateur1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586/// ------------------------------------------------------------/// KAMA/// ------------------------------------------------------------Period = 150FastPeriod = 2SlowPeriod = 50Fastest = 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/// ------------------------------------------------------------/// Distance price - KAMA/// ------------------------------------------------------------xClose = (open + high + low + close) / 4Distance = (xClose - KAMA)moy = average[550](distance)if moy < moy[1] and moy[1] > moy[2] and moy[1] > 0 thenRetB3 = RetB2RetB2 = RetB1RetB1 = moy[1]RetBmoy = (RetB1 + RetB2 + RetB3) / 3endifif moy > moy[1] and moy[1] < moy[2] and moy[1] < 0 thenRetH3 = RetH2RetH2 = RetH1RetH1 = moy[1]RetHmoy = (RetH1 + RetH2 + RetH3) / 3endif/// ------------------------------------------------------------/// 3 lowest and 3 highest distances over last 50 bars/// ------------------------------------------------------------for i = 0 to 49$montab[i] = distance[i]nextarraysort($montab, ascend)moy3plusBas = ($montab[0] + $montab[1] + $montab[2]) / 3moy3plusHauts = ($montab[49] + $montab[48] + $montab[47]) / 3if (distance > moy) and (distance > moy3plusHauts) and (distance > 0) thendrawcandle(0, 0, distance, distance) coloured(0, 0, 255)endifif (distance < moy) and (distance < moy3plusBas) and (distance < 0) thendrawcandle(0, 0, distance, distance) coloured(255, 0, 0)endif/// ------------------------------------------------------------/// NEW PART - averages of FilterUp / FilterDn/// ------------------------------------------------------------for i = 0 to 49$tabUp[i] = moy3plusHauts[i]$tabDn[i] = moy3plusBas[i]nextarraysort($tabUp, ascend)arraysort($tabDn, ascend)AvgTop3FilterUp = ($tabUp[49] + $tabUp[48] + $tabUp[47]) / 3AvgBot3FilterDn = ($tabDn[0] + $tabDn[1] + $tabDn[2]) / 3if barindex > 50 then// Groen = FilterUp (gemiddelde 3 hoogste)drawsegment(barindex - 49, AvgTop3FilterUp, barindex, AvgTop3FilterUp) coloured(0,255,0)// Oranje = FilterDn (gemiddelde 3 laagste)drawsegment(barindex - 49, AvgBot3FilterDn, barindex, AvgBot3FilterDn) coloured(255,165,0)endif/// ------------------------------------------------------------/// RETURN (single line)/// ------------------------------------------------------------RETURN distance AS "Distance", moy AS "Distance Moy", RetBmoy AS "Bande Haute", RetHmoy AS "Bande Basse", moy3plusHauts AS "FilterUp", moy3plusBas AS "FilterDn", AvgTop3FilterUp AS "AvgTop3 FilterUp", AvgBot3FilterDn AS "Avg3 FilterDn"11/10/2025 at 12:36 PM #25348211/10/2025 at 12:52 PM #253483j’ai fait une capture écran de la paire USD/JPY en UT 1 heure.
J’ai affiché le rendu de l’indicateur. Et j’ai rajouté une ligne horizontale noire épaisse pour symboliser ce que selon moi l’indicateur demandé devrait restituer :
- un premier plus haut entre le 8 et le 10 octobre
- un deuxième plus haut entre le 24 et 28 octobre
- un troisième haut entre le 1er novembre et le 4 novembre
donc la moyenne des 3 derniers FilterUP plus hauts devrait se situer entre ces 3 plus hauts selon moi.
Merci.
11/10/2025 at 12:53 PM #25348411/10/2025 at 1:42 PM #253486Tes “FilterUp” et “FilterDn” sont déjà basés sur les 3 distances les plus hautes et les 3 distances les plus basses sur 50 barres…
À partir de ces valeurs extrêmes, tu reprends encore une fois uniquement les plus hautes ou les plus basses via la fonction “ArraySort”…
Ainsi, ta moyenne, composée de seulement trois valeurs, sera (presque) identique aux valeurs de “FilterUp” et “FilterDn”…
Si tu veux une moyenne plus lissée, différente de FilterUp/FilterDn, tu peux plutôt utiliser une moyenne simple calculée sur les séries FilterUp/FilterDn…
1 user thanked author for this post.
11/10/2025 at 2:03 PM #25348811/10/2025 at 6:36 PM #253505Une dernière chose parce que cet indicateur m’intéresse énormément.
En pratique, je vous utilisai cette moyenne comme un filtre d’entrée en position :
1 – si distance < “filtremoyhaut”, alors possibilité d’entrée long
2 – si distance > “filtremoybas” alors possibilité d’entrée court
Donc j’utilise cet indicateur comme un sorte de filtre pour détecter les surcachats ou les surventes.
Merci et bonne soirée.
1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on 