OPEN-SOURCE SCRIPT

Yosef26 - Weighted Decision Model

75
//version=5
indicator("Yosef26 - Weighted 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 (3-day uptrend) ===
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)

// === Support/Resistance Zones ===
atSupport = low <= ta.lowest(low, 5)
atResistance = high >= ta.highest(high, 5)

// === Scoring System for Entry ===
entryScore = 0
entryScore := entryScore + (bullishEngulfing ? 3 : 0)
entryScore := entryScore + (hammer ? 2 : 0)
entryScore := entryScore + (volUp3 ? 1 : 0)
entryScore := entryScore + ((volume > volSMA) ? 2 : 0)
entryScore := entryScore + ((close > ema20 or close > ema50) ? 1 : 0)
entryScore := entryScore + (atSupport ? 2 : 0)
entryScore := entryScore + ((close > close[1]) ? 1 : 0)

// === Scoring System for Exit ===
exitScore = 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 + (atResistance ? 2 : 0)
exitScore := exitScore + ((close < close[1]) ? 1 : 0)

// === Decision Thresholds ===
entryCond = (entryScore >= 7)
exitCond = (exitScore >= 6)

// === 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
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
inPosition := false
barsInPosition := 0
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 (Scored Decision)")
alertcondition(exitCond, title="Exit Alert", message="Yosef26: Exit Signal (Scored Decision)")

Declinazione di responsabilità

Le informazioni ed i contenuti pubblicati non costituiscono in alcun modo una sollecitazione ad investire o ad operare nei mercati finanziari. Non sono inoltre fornite o supportate da TradingView. Maggiori dettagli nelle Condizioni d'uso.