Segnali di Trend a Swing Filtrati v3
Codice Sorgente: //@version=5
indicatore("Segnali di Trend a Swing Filtrati v3", overlay=true, max_labels_count=500)
// --- Input ---
// Parametri Chiave di Trend
atrPeriod = input.int(10, title="Lunghezza ATR di Trend", group="1. Motore di Trend")
fattore = input.float(3.0, title="Moltiplicatore di Trend", step=0.1, group="1. Motore di Trend")
// Filtri di Momentum & Combustibile
adxLength = input.int(14, title="Lunghezza ADX", group="2. Combustibile di Momentum")
adxThreshold = input.int(20, title="Soglia ADX", group="2. Combustibile di Momentum")
macdFast = input.int(12, title="MACD Veloce", group="2. Carburante Momentum")
macdSlow = input.int(26, title="MACD Lento", group="2. Carburante Momentum")
macdSignal = input.int(9, title="Segnale MACD", group="2. Carburante Momentum")
// Parametri di Uscita Dinamici
exitEmaLength = input.int(13, title="Lunghezza EMA di Uscita (Momentum in Diminuzione)", group="3. Strategia di Uscita")
minBarsHold = input.int(5, title="Bar Minimi da Mantenere Prima del TP", group="3. Strategia di Uscita")
// --- Calcoli ---
// 1. Tendenza Core
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
isUptrend = direction < 0
isDowntrend = direction > 0
// 2. Filtri di carburante Momentum
[diplus, diminus, adx] = ta.dmi(adxLength, adxLength)
[macdLine, sigLine, histLine] = ta.macd(close, macdFast, macdSlow, macdSignal)
bullishFuel = (adx > adxThreshold) e (histLine > 0)
bearishFuel = (adx > adxThreshold) e (histLine < 0)
// 3. EMA Momentum Veloce (Usato per Uscite E Rientri)
exitEma = ta.ema(close, exitEmaLength)
// --- Variabili di Stato ---
var bool inLong = false
var bool inShort = false
var int entryBar = na
var float entryPrice = na
// --- Logica di Ingresso (Aggiornata per Rientri) ---
// Trigger 1: Il primo cambio di Supertrend
longStart = ta.change(direction) < 0
shortStart = ta.change(direction) > 0
// Trigger 2: Continuazione / Re-ingresso (La tendenza è intatta, il prezzo risale sopra l'EMA veloce dopo un pullback)
longContinuation = isUptrend e ta.crossover(close, exitEma)
shortContinuation = isDowntrend e ta.crossunder(close, exitEma)
// Combina i trigger con il carburante
longCond = (longStart o longContinuation) e bullishFuel
shortCond = (shortStart o shortContinuation) e bearishFuel
// Assicurati di attivare solo se non siamo già attivamente in un'operazione
longSignal = longCond e non inLong
shortSignal = shortCond e non inShort
se longSignal
inLong := true
inShort := false
entryBar := bar_index
entryPrice := close
se shortSignal
inShort := true
inLong := false
entryBar := bar_index
entryPrice := close
// --- Logica di uscita / Prendi profitto ---
barsHeld = bar_index - entryBar
// Il momentum che diminuisce viene rilevato quando il prezzo attraversa nuovamente l'EMA a breve termine
longWaning = ta.crossunder(close, exitEma)
shortWaning = ta.crossover(close, exitEma)
// Criteri TP: Mantenuto per X barre, Attualmente in profitto, e il momentum sta diminuendo
longTP = inLong e (barsHeld >= minBarsHold) e (close > entryPrice) e longWaning
shortTP = inShort e (barsHeld >= minBarsHold) e (close < entryPrice) e shortWaning
// Criteri di Stop Loss / Reset Duro (Se la tendenza si inverte completamente senza colpire le regole TP)
longSL = inLong e ta.change(direction) > 0
shortSL = inShort e ta.change(direction) < 0
// Ripristina gli stati all'uscita in modo che lo script possa cercare un rientro
se longTP o longSL
inLong := false
se shortTP o shortSL
inShort := false
// --- Visivi ---
// Disegna segnali
plotshape(longSignal, title="Segnale di Acquisto", text="BUY", style=shape.labelup, location=location.belowbar, color=color.new(#00b300, 0), textcolor=color.white, size=size.normal)
plotshape(shortSignal, title="Segnale di Vendita", text="SELL", style=shape.labeldown, location=location.abovebar, color=color.new(#ff0000, 0), textcolor=color.white, size=size.normal)
// Disegna Prendi Profitti
plotshape(longTP, title="TP Long", text="TP", style=shape.xcross, location=location.abovebar, color=color.new(#00b300, 0), textcolor=color.white, size=size.small)
plotshape(shortTP, title="TP Short", text="TP", style=shape.xcross, location=location.belowbar, color=color.new(#ff0000, 0), textcolor=color.white, size=size.small)

