// — Déclaration des variables d’entrée (Inputs) —
// Ces variables seront modifiables via l’interface ProRealTime
input LookbackLeft = 5 // Nombre de bougies à gauche à comparer (X)
input LookbackRight = 5 // Nombre de bougies à droite à comparer (Y)
// — Définition des Swing Highs et Swing Lows —
// Swing High (SH): Le plus haut de la bougie actuelle est le plus haut des ‘LookbackLeft’ bougies précédentes
// ET le plus haut des ‘LookbackRight’ bougies suivantes.
// Nous utilisons des bougies décalées pour les bougies “suivantes” pour une logique de backtesting.
// high[LookbackRight] : plus haut de la bougie LookbackRight périodes DANS LE FUTUR par rapport à la bougie actuelle.
// high[0] : plus haut de la bougie actuelle.
// high[1] : plus haut de la bougie précédente.
// Pour la détection d’un Swing High *passé*, on regarde si la bougie à l’indice ‘i’
// est la plus haute dans une fenêtre définie.
SwingHighDetected = 1 // Initialisation à VRAI. Deviendra FAUX si la condition n’est pas remplie.
FOR i = 1 TO LookbackLeft
IF high[0] <= high[i] THEN
SwingHighDetected = 0 // Si une bougie précédente est plus haute ou égale, ce n'est pas un SH
BREAK
ENDIF
NEXT
IF SwingHighDetected THEN
FOR i = 1 TO LookbackRight
IF high[0] <= high[-i] THEN // -i pour les bougies *futures* (quand on regarde en temps réel)
SwingHighDetected = 0 // Si une bougie future est plus haute ou égale, ce n'est pas un SH
BREAK
ENDIF
NEXT
ENDIF
// Swing Low (SL): Le plus bas de la bougie actuelle est le plus bas des 'LookbackLeft' bougies précédentes
// ET le plus bas des 'LookbackRight' bougies suivantes.
SwingLowDetected = 1 // Initialisation à VRAI
FOR i = 1 TO LookbackLeft
IF low[0] >= low[i] THEN
SwingLowDetected = 0 // Si une bougie précédente est plus basse ou égale, ce n’est pas un SL
BREAK
ENDIF
NEXT
IF SwingLowDetected THEN
FOR i = 1 TO LookbackRight
IF low[0] >= low[-i] THEN // -i pour les bougies *futures*
SwingLowDetected = 0 // Si une bougie future est plus basse ou égale, ce n’est pas un SL
BREAK
ENDIF
NEXT
ENDIF
// — Affichage sur le graphique —
// Dessiner des marqueurs aux points de Swing High et Swing Low
IF SwingHighDetected THEN
// Dessine un petit carré rouge au-dessus de la bougie du Swing High
DRAWSHAPE (high + 0.0005) AS “Square” AT BARINDEX COLOUR (255,0,0) // Rouge
ENDIF
IF SwingLowDetected THEN
// Dessine un petit carré vert en dessous de la bougie du Swing Low
DRAWSHAPE (low – 0.0005) AS “Square” AT BARINDEX COLOUR (0,255,0) // Vert
ENDIF
// Vous pouvez également ajouter des labels pour voir les valeurs
// DRAWTEXT (“SH”) AT BARINDEX ON SwingHighDetected
// DRAWTEXT (“SL”) AT BARINDEX ON SwingLowDetected
LookbackLeft = 5
LookbackRight = 5
// pivot low
pl1=low>low[lookbackright]
pl2=low[lookbackright]<=lowest[lookbackright](low)
pl3=low[lookbackright]<lowest[LookbackLeft](low)[LookbackRight+1]
if pl1 and pl2 and pl3 then
drawpoint(barindex[lookbackright],low[lookbackright],3)coloured("red")
endif
// pivot high
ph1=high<high[lookbackright]
ph2=high[lookbackright]>=highest[lookbackright](high)
ph3=high[lookbackright]>highest[LookbackLeft](high)[LookbackRight+1]
if ph1 and ph2 and ph3 then
drawpoint(barindex[lookbackright],high[lookbackright],3)coloured("blue")
endif
return