Scusami, quello di sopra è l’indicatore, ecco lo screeener:
// Head & Shoulders
//
ONCE LookBack = 15
ONCE MaxInBetween = 50
//
ONCE SwingHI = 0
ONCE SwingHI1 = 0
ONCE SwingHI2 = 0
ONCE SwingHI3 = 0
ONCE SwingLO = 0
ONCE SwingLO1 = 0
ONCE SwingLO2 = 0
ONCE SwingLO3 = 0
//
IF SwingHI3 > 0 THEN
SwingHI1 = 0
SwingHI2 = 0
SwingHI3 = 0
ENDIF
IF SwingLO3 > 0 THEN
SwingLO1 = 0
SwingLO2 = 0
SwingLO3 = 0
ENDIF
//
//Offset = average[LookBack](range)
Bullish = close > open
Bearish = close < open
TopHI = max(high,high[1]) = highest[LookBack](high)
BottomLO = min(low,low[1]) = lowest[LookBack](low)
//
SwingX = Bearish AND Bullish[1] AND TopHI
SwingHI = 0
IF SwingX THEN
SwingHI = max(high,high[1])
BarHI = BarIndex - (high < high[1])
ENDIF
//
SwingY = Bullish AND Bearish[1] AND BottomLO
SwingLO = 0
IF SwingY THEN
SwingLO = min(low,low[1])
BarLO = BarIndex - (low > low[1])
ENDIF
//
// detect anyone of the three SwingHIs that make a (bearish) Head & Shoulder
IF SwingHI > 0 THEN
IF SwingHI1 = 0 THEN
SwingHI1 = SwingHI
BarHI1 = BarHI
SwingHI2 = 0
SwingHI3 = 0
ELSE
IF SwingHI2 = 0 THEN
SwingHI2 = SwingHI
BarHI2 = BarHI
SwingHI3 = 0
IF ((BarHI2 - BarHI1) > MaxInBetween) OR (SwingHI2 <= SwingHI1) THEN
SwingHI1 = SwingHI2
BarHI1 = BarHI2
SwingHI2 = 0
SwingHI3 = 0
ENDIF
ELSE
IF SwingHI3 = 0 THEN
SwingHI3 = SwingHI
BarHI3 = BarHI
IF ((BarHI3 - BarHI2) > MaxInBetween) OR (SwingHI3 >= SwingHI2) THEN
SwingHI1 = SwingHI3
BarHI1 = BarHI3
SwingHI2 = 0
SwingHI3 = 0
ENDIF
ENDIF
ENDIF
ENDIF
IF SwingHI3 > 0 AND ((SwingHI2 <= SwingHI1) OR (SwingHI2 <= SwingHI3)) THEN
SwingHI1 = SwingHI3
BarHI1 = BarHI3
SwingHI2 = 0
SwingHI3 = 0
ENDIF
ENDIF
//
// detect anyone of the three SwingLOs that make a (bullish) Head & Shoulder
IF SwingLO > 0 THEN
IF SwingLO1 = 0 THEN
SwingLO1 = SwingLO
BarLO1 = BarLO
SwingLO2 = 0
SwingLO3 = 0
ELSE
IF SwingLO2 = 0 THEN
SwingLO2 = SwingLO
BarLO2 = BarLO
SwingLO3 = 0
IF ((BarLO2 - BarLO1) > MaxInBetween) OR (SwingLO2 >= SwingLO1) THEN
SwingLO1 = SwingLO2
BarLO1 = BarLO2
SwingLO2 = 0
ENDIF
ELSE
IF SwingLO3 = 0 THEN
SwingLO3 = SwingLO
BarLO3 = BarLO
IF ((BarLO3 - BarLO2) > MaxInBetween) OR (SwingLO3 <= SwingLO2) THEN
SwingLO1 = SwingLO3
BarLO1 = BarLO3
SwingLO2 = 0
SwingLO1 = 0
ENDIF
ENDIF
ENDIF
ENDIF
IF SwingLO3 > 0 AND ((SwingLO2 >= SwingLO1) OR (SwingLO2 >= SwingLO3)) THEN
SwingLO1 = SwingLO3
BarLO1 = BarLO3
SwingLO2 = 0
SwingLO3 = 0
ENDIF
ENDIF
//
// plot ARROWS over/below H & S
//
IF SwingHI3 > 0 THEN
SwingLO1 = 0
SwingLO2 = 0
SwingLO3 = 0
//HItemp = max(SwingHI1,max(SwingHI2,SwingHI3))
//DrawArrowDown(BarHI3,HItemp + Offset*3) coloured(255,0,0,155) //RED
//DrawTriangle(BarHI1-1,HItemp+Offset,BarHi1,HItemp+Offset*2,BarHI1+1,HItemp+Offset) COLOURED(255,0,0,255) BORDERCOLOR(255,0,0,255)
//DrawTriangle(BarHI2-1,HItemp+Offset,BarHI2,HItemp+Offset*2,BarHI2+1,HItemp+Offset) COLOURED(255,0,0,255) BORDERCOLOR(255,0,0,255)
//DrawTriangle(BarHI3-1,HItemp+Offset,BarHI3,HItemp+Offset*2,BarHI3+1,HItemp+Offset) COLOURED(255,0,0,255) BORDERCOLOR(255,0,0,255)
ELSIF SwingLO3 > 0 THEN
SwingHI1 = 0
SwingHI2 = 0
SwingHI3 = 0
//LOtemp = min(SwingLO1,min(SwingLO2,SwingLO3))
//DrawArrowUp(BarLO3,LOtemp - Offset*3) coloured(0,128,0,155) //GREEN
//DrawTriangle(BarLO1-1,LOtemp-Offset,BarLO1,LOtemp-Offset*2,BarLO1+1,LOtemp-Offset) COLOURED(0,128,0,155) BORDERCOLOR(0,128,0,155)
//DrawTriangle(BarLO2-1,LOtemp-Offset,BarLO2,LOtemp-Offset*2,BarLO2+1,LOtemp-Offset) COLOURED(0,128,0,155) BORDERCOLOR(0,128,0,155)
//DrawTriangle(BarLO3-1,LOtemp-Offset,BarLO3,LOtemp-Offset*2,BarLO3+1,LOtemp-Offset) COLOURED(0,128,0,155) BORDERCOLOR(0,128,0,155)
ENDIF
//RETURN
Cond = 0
IF SwingHI3 > 0 THEN
Cond = 2
ELSIF SwingLO3 > 0 THEN
Cond = 1
ENDIF
SCREENER[Cond](Cond AS "1=↑, 2=↓")