Ok merci, voici via xauusd la version modifiée permettant de tenir compte de la mèche la plus extrême d’une série de bougies en retracement partiel. A tester.
//----------------------------------------------
// IMBALANCES VIERGES v4 — projection 30 jours
// Detection originale conservee
// + prolongation des zones non retracees
//----------------------------------------------
DEFPARAM DrawOnLastBarOnly = false
DEFPARAM calculateonlastbars = 20000
// ================================================================
// PARAMETRES
// ================================================================
imbMax = 200
days30 = 8640
// ================================================================
// INITIALISATION
// ================================================================
ONCE topIdx = 0
ONCE topCount = 0
ONCE botIdx = 0
ONCE botCount = 0
// ================================================================
// DETECTION ORIGINALE — inchangee
// ================================================================
TopImb = 0
TopImbalance = low[2] <= open[1] AND high[0] >= close[1]
TopImbalancesize = low[2] - high[0]
IF TopImbalance AND TopImbalancesize > 0 THEN
LowerWick = (min(open,close) - low) <= (range * 0.05)
Body = abs(Close - Open)
TopImb = (TopImbalancesize > Body) AND LowerWick AND (low[2] <= (min(open,close) + 2*PipSize))
DrawCandle(low[2], low[2], high[0], high[0]) coloured(255,255,0)
ENDIF
BottomInbalance = high[2] >= open[1] AND low[0] <= close[1]
BottomInbalancesize = low[0] - high[2]
IF BottomInbalance AND BottomInbalancesize > 0 THEN
DrawCandle(low[0], low[0], high[2], high[2]) coloured(255,255,0)
ENDIF
// ================================================================
// STOCKAGE DES ZONES DETESTEES
// ================================================================
IF TopImbalance AND TopImbalancesize > 0 THEN
sl = topIdx MOD imbMax
$tH[sl] = low[2]
$tL[sl] = high[0]
$tL2[sl] = $tL[sl]//// JC/Ajouté
$tB[sl] = barindex
$tF[sl] = 0
topIdx = topIdx + 1
IF topCount < imbMax THEN
topCount = topCount + 1
ENDIF
ENDIF
IF BottomInbalance AND BottomInbalancesize > 0 THEN
sl = botIdx MOD imbMax
$bH[sl] = low[0]
$bL[sl] = high[2]
$bH2[sl] = $bH[sl]//// JC/Ajouté
$bB[sl] = barindex
$bF[sl] = 0
botIdx = botIdx + 1
IF botCount < imbMax THEN
botCount = botCount + 1
ENDIF
ENDIF
// ================================================================
// DETECTION RETRACEMENT — zone touchee = zone remplie
// ================================================================
IF topCount > 0 THEN
FOR i = 0 TO topCount - 1 DO
sl = (topIdx - topCount + i) MOD imbMax
IF $tF[sl]<1 AND barindex > $tB[sl] THEN//IF $tF[sl] = 0 AND barindex > $tB[sl] THEN
//IF high >= $tL[sl] AND low <= $tH[sl] THEN
//$tF[sl] = 1
//ENDIF
//// JC/remplacé par:
IF high >= $tH[sl] THEN
$tF[sl] = 1
elsif high >= max($tL[sl],$tL2[sl]) THEN
$tF[sl] = 0.5
$tL2[sl] = high
ENDIF
//// JC/fin de remplacement
ENDIF
NEXT
ENDIF
IF botCount > 0 THEN
FOR i = 0 TO botCount - 1 DO
sl = (botIdx - botCount + i) MOD imbMax
IF $bF[sl]<1 AND barindex > $bB[sl] THEN//IF $bF[sl] = 0 AND barindex > $bB[sl] THEN
//IF high >= $bL[sl] AND low <= $bH[sl] THEN
//$bF[sl] = 1
//ENDIF
//// JC/remplacé par:
IF low <= $bL[sl] THEN
$bF[sl] = 1
elsif low <= min($bH[sl],$bH2[sl]) THEN
$bF[sl] = 0.5
$bH2[sl] = low
ENDIF
//// JC/fin de remplacement
ENDIF
NEXT
ENDIF
// ================================================================
// PROJECTION — zones vierges prolongees jusqu a maintenant
// ================================================================
IF islastbarupdate THEN
barLimit = barindex - days30
// Top imbalances vierges (orange)
IF topCount > 0 THEN
FOR i = 0 TO topCount - 1 DO
sl = (topIdx - topCount + i) MOD imbMax
//IF $tF[sl] = 0 AND $tB[sl] >= barLimit THEN
//DrawRectangle($tB[sl], $tH[sl], barindex, $tL[sl]) coloured(255,200,0,20) BorderColor(255,200,0,160)
//ENDIF
//// JC/remplacé par:
IF $tF[sl]<1 AND $tB[sl] >= barLimit THEN
if $tF[sl]=0 then// zones non retracées
DrawRectangle($tB[sl], $tH[sl], barindex, $tL[sl]) coloured(255,200,0,20) BorderColor(255,200,0,160)
elsif $tF[sl]=0.5 then// zones partiellement retracées
DrawRectangle($tB[sl], $tH[sl], barindex, $tL2[sl]) coloured(255,200,0,20) BorderColor(255,200,0,160)
endif
ENDIF
//// JC/fin de remplacement
NEXT
ENDIF
// Bottom imbalances vierges (jaune clair)
IF botCount > 0 THEN
FOR i = 0 TO botCount - 1 DO
sl = (botIdx - botCount + i) MOD imbMax
//IF $bF[sl] = 0 AND $bB[sl] >= barLimit THEN
//DrawRectangle($bB[sl], $bH[sl], barindex, $bL[sl]) coloured(255,200,0,20) BorderColor(255,200,0,160)
//ENDIF
//// JC/remplacé par:
IF $bF[sl]<1 AND $bB[sl] >= barLimit THEN
if $bF[sl]=0 then// zones non retracées
DrawRectangle($bB[sl], $bH[sl], barindex, $bL[sl]) coloured(255,200,0,20) BorderColor(255,200,0,160)
elsif $bF[sl]=0.5 then// zones partiellement retracées
DrawRectangle($bB[sl], $bH2[sl], barindex, $bL[sl]) coloured(255,200,0,20) BorderColor(255,200,0,160)
endif
ENDIF
//// JC/fin de remplacement
NEXT
ENDIF
ENDIF
RETURN