J’ai oublié de remplacer 20 par P dans les 2 lignes 12-13… pas d’impact quand P=20 mais effectivement gros impact si P=200…
Tant qu’on y est, si tu vas t’en servir avec des P aussi grands, alors je te rajoute un if islastbarupdate, car le code étant en drawonlastbaronly=true on n’a pas besoin de calculer les projections périmées depuis les barres précédentes. Peu d’impact sur le temps de calcul si P=20, mais avec un P=200 combiné à un pourcentage non négligeable de projections les calculs de boucles prennent vite plus de temps inutilement sur l’historique. Voici donc une version qui fonctionnera mieux et beaucoup plus vite pour du P=200:
DEFPARAM DRAWONLASTBARONLY = TRUE
ATR= AverageTrueRange[14](Close)
P= 200 // période P dans le calcul des bandes de bollinger
coeff= 2.5 // coefficient multiplicateur de l'écart-type dans le calcul des bandes de bollinger
PourcentProj= 0.25// 0.25 pour 25%, entre 0 pour 0% et 1 pour 100%, pourcentage à appliquer à la période P pour projection dans le futur
Nproj= floor(P*PourcentProj)// nombre entier d'occurrences en prenant l'arrondi inférieur du pourcentage PourcentProj appliqué à la période P
deltacours= ATR// écart entre chaque occurrence de close future simulée
$coursplus[0]= close
$coursmoins[0]= close
$avgplus[0]= average[P](close)
$avgmoins[0]= average[P](close)
$BBHplus[0]= average[P](close)+coeff*STD[P](close)
$BBHmoins[0]= average[P](close)+coeff*STD[P](close)
$BBBplus[0]= average[P](close)-coeff*STD[P](close)
$BBBmoins[0]= average[P](close)-coeff*STD[P](close)
if islastbarupdate then
for i=1 to Nproj
$coursplus[i]=$coursplus[0]+deltacours*i
$coursmoins[i]=$coursmoins[0]-deltacours*i
//DRAWSEGMENT(barindex+i-1, $coursplus[i-1], barindex+i, $coursplus[i]) COLOURED(128,128,128) STYLE(DOTTEDLINE4,1)
//DRAWSEGMENT(barindex+i-1, $coursmoins[i-1], barindex+i, $coursmoins[i]) COLOURED(128,128,128) STYLE(DOTTEDLINE4,1)
$avgplus[i]=$avgplus[i-1]+($coursplus[i]-close[P-i])/P
$avgmoins[i]=$avgmoins[i-1]+($coursmoins[i]-close[P-i])/P
DRAWSEGMENT(barindex+i-1, $avgplus[i-1], barindex+i, $avgplus[i]) COLOURED(128,128,128) STYLE(DOTTEDLINE4,1)
DRAWSEGMENT(barindex+i-1, $avgmoins[i-1], barindex+i, $avgmoins[i]) COLOURED(128,128,128) STYLE(DOTTEDLINE4,1)
totplus=0
totmoins=0
for N = 0 to P-i-1// les P-i occurrences de la (P-i-1)èmee bougie précédente à l'actuelle [0]
totplus = totplus + square(close[N]-$avgplus[i])
totmoins = totmoins + square(close[N]-$avgmoins[i])
next
for j=1 to i// les i occurrence de P-i+1 à P
totplus = totplus + square($coursplus[j]-$avgplus[i])
totmoins = totmoins + square($coursplus[j]-$avgmoins[i])
next
$stdevplus[i] = sqrt(totplus/P)
$stdevmoins[i] = sqrt(totmoins/P)
$BBHplus[i]=$avgplus[i]+coeff*$stdevplus[i]
$BBBplus[i]=$avgplus[i]-coeff*$stdevplus[i]
$BBHmoins[i]=$avgmoins[i]+coeff*$stdevmoins[i]
$BBBmoins[i]=$avgmoins[i]-coeff*$stdevmoins[i]
DRAWSEGMENT(barindex+i-1, $BBHplus[i-1], barindex+i, $BBHplus[i]) COLOURED(128,128,128) STYLE(DOTTEDLINE4,1)
DRAWSEGMENT(barindex+i-1, $BBBplus[i-1], barindex+i, $BBBplus[i]) COLOURED(128,128,128) STYLE(DOTTEDLINE4,1)
DRAWSEGMENT(barindex+i-1, $BBHmoins[i-1], barindex+i, $BBHmoins[i]) COLOURED(128,128,128) STYLE(DOTTEDLINE4,1)
DRAWSEGMENT(barindex+i-1, $BBBmoins[i-1], barindex+i, $BBBmoins[i]) COLOURED(128,128,128) STYLE(DOTTEDLINE4,1)
next
endif
RETURN