Yosef26 - Hierarchical Decision Model

indicator("Yosef26 - Hierarchical Decision Model", overlay=true)
// === Moving Averages ===
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
// === Candle Components ===
priceRange = high - low
body = math.abs(close - open)
upperWick = high - math.max(close, open)
lowerWick = math.min(close, open) - low
volSMA = ta.sma(volume, 20)
// === Volume Momentum ===
volUp3 = (volume > volume[1]) and (volume[1] > volume[2])
// === Candlestick Pattern Detection ===
bullishEngulfing = (close[1] < open[1]) and (close > open) and (close > open[1]) and (open < close[1])
bearishEngulfing = (close[1] > open[1]) and (close < open) and (close < open[1]) and (open > close[1])
doji = body < (priceRange * 0.1)
hammer = (lowerWick > body * 2) and (upperWick < body) and (close > open)
shootingStar = (upperWick > body * 2) and (lowerWick < body) and (close < open)
// === Multi-Timeframe Trend Detection ===
monthlyTrendUp = request.security(syminfo.tickerid, "M", close > ta.sma(close, 50))
weeklyTrendUp = request.security(syminfo.tickerid, "W", close > ta.sma(close, 50))
dailyTrendUp = close > ta.sma(close, 50)
// === Support/Resistance Zones ===
atSupport = low <= ta.lowest(low, 5)
atResistance = high >= ta.highest(high, 5)
// === Breakout Detection ===
breakoutAboveResistance = close > ta.highest(high[1], 5) and volume > volSMA and close > ema50
// === Confirming Candles ===
twoGreenCandles = (close > open) and (close[1] > open[1])
twoRedCandles = (close < open) and (close[1] < open[1])
// === Overextension Filter ===
overbought = close > ema20 * 1.05
// === Entry/Exit Conditions Tracking ===
var int lastEntryBar = na
var int lastExitBar = na
minBarsBetweenEntries = 10
canEnter = na(lastEntryBar) or (bar_index - lastEntryBar >= minBarsBetweenEntries and bar_index - lastExitBar >= minBarsBetweenEntries)
// === Continuation Filter (3 green candles with volume rise) ===
bullContinuation = (close > open) and (close[1] > open[1]) and (close[2] > open[2]) and (volume > volume[1]) and (volume[1] > volume[2])
// === Entry Price Tracking ===
var float entryPrice = na
// === Weakness After Uptrend for Exit ===
recentGreenTrend = (close[1] > open[1]) and (close[2] > open[2]) and (close[3] > open[3])
reversalCandle = shootingStar or bearishEngulfing or doji
reversalVolumeDrop = (volume < volume[1]) and (volume[1] < volume[2])
signalWeakness = recentGreenTrend and reversalCandle and reversalVolumeDrop
// === Scoring System ===
entryScore = 0
entryScore := entryScore + (atSupport ? 3 : 0)
entryScore := entryScore + (bullishEngulfing ? 3 : 0)
entryScore := entryScore + (hammer ? 2 : 0)
entryScore := entryScore + (volUp3 ? 2 : 0)
entryScore := entryScore + ((volume > volSMA) ? 2 : 0)
entryScore := entryScore + ((close > ema20 or close > ema50) ? 1 : 0)
entryScore := entryScore + ((close > close[1]) ? 1 : 0)
entryScore := entryScore + (breakoutAboveResistance ? 2 : 0)
entryScore := entryScore + (twoGreenCandles ? 1 : 0)
entryScore := entryScore - (overbought ? 2 : 0)
entryScore := entryScore + ((monthlyTrendUp and weeklyTrendUp and dailyTrendUp) ? 2 : 0)
exitScore = 0
exitScore := exitScore + (atResistance ? 3 : 0)
exitScore := exitScore + (bearishEngulfing ? 3 : 0)
exitScore := exitScore + (shootingStar ? 2 : 0)
exitScore := exitScore + (doji ? 1 : 0)
exitScore := exitScore + ((volume < volSMA * 1.1) ? 1 : 0)
exitScore := exitScore + ((close < ema50) ? 1 : 0)
exitScore := exitScore + ((close < close[1]) ? 1 : 0)
exitScore := exitScore + (twoRedCandles ? 1 : 0)
exitScore := exitScore + ((not dailyTrendUp and not weeklyTrendUp) ? 2 : 0)
exitScore := exitScore + (signalWeakness ? 2 : 0)
// === Profit Target Exit Condition ===
profitTargetHit = not na(entryPrice) and close >= entryPrice * 1.09
profitZoneSignal = (atResistance or shootingStar or bearishEngulfing) and volume > volSMA
isNewHigh = high >= ta.highest(high, 50)
exitAtProfitTarget = profitTargetHit and profitZoneSignal and not isNewHigh
// === Final Decision Thresholds ===
entryCond1 = entryScore >= 8
entryCond2 = entryScore >= 6 and breakoutAboveResistance and volume > volSMA and close > ema50
entryCond3 = monthlyTrendUp and weeklyTrendUp and (close > ema50 or volume > volSMA or twoGreenCandles)
entryCond = (entryCond1 or entryCond2 or entryCond3) and canEnter
exitCondRaw = (exitScore >= 7)
exitCond = (exitCondRaw and not bullContinuation) or exitAtProfitTarget
// === Position Tracking ===
var bool inPosition = false
var int barsInPosition = 0
var label entryLabel = na
var label exitLabel = na
if entryCond and not inPosition
inPosition := true
barsInPosition := 0
lastEntryBar := bar_index
entryPrice := close
entryLabel := label.new(bar_index, close, "Entry @" + str.tostring(close), style=label.style_label_up, color=color.green, textcolor=color.white)
if inPosition
barsInPosition += 1
if exitCond and inPosition
inPosition := false
barsInPosition := 0
lastExitBar := bar_index
exitLabel := label.new(bar_index, close, "Exit @" + str.tostring(close), style=label.style_label_down, color=color.red, textcolor=color.white)
// === Alerts ===
alertcondition(entryCond, title="Entry Alert", message="Yosef26: Entry Signal (Hierarchical Model)")
alertcondition(exitCond, title="Exit Alert", message="Yosef26: Exit Signal (Hierarchical Model)")
Skrip sumber terbuka
Dalam semangat sebenar TradingView, pencipta skrip ini telah menjadikannya sumber terbuka supaya pedagang dapat menilai dan mengesahkan kefungsiannya. Terima kasih kepada penulis! Walaupun anda boleh menggunakannya secara percuma, ingat bahawa menerbitkan semula kod ini adalah tertakluk kepada Peraturan Dalaman kami.
Untuk akses pantas pada carta, tambah skrip ini kepada kegemaran anda — ketahui lebih lanjut di sini.
Penafian
Skrip sumber terbuka
Dalam semangat sebenar TradingView, pencipta skrip ini telah menjadikannya sumber terbuka supaya pedagang dapat menilai dan mengesahkan kefungsiannya. Terima kasih kepada penulis! Walaupun anda boleh menggunakannya secara percuma, ingat bahawa menerbitkan semula kod ini adalah tertakluk kepada Peraturan Dalaman kami.
Untuk akses pantas pada carta, tambah skrip ini kepada kegemaran anda — ketahui lebih lanjut di sini.