PROTECTED SOURCE SCRIPT

NOVA DELTA

44
//version=6
indicator("NOVA EMA - Entropy & Liquidity Adaptive v6", overlay=true, precision=4)

//============= Inputs
src = input.source(close, "Source")
len_base = input.int(55, "Base length", minval=2)
len_entropy = input.int(50, "Entropy window", minval=10)
len_atr = input.int(14, "ATR length", minval=1)
len_vol = input.int(50, "Volume window", minval=5)

k_entropy = input.float(1.20, "Weight (1-entropy)", step=0.05)
k_vol = input.float(0.60, "Weight volatility", step=0.05)
k_liq = input.float(0.40, "Weight liquidity", step=0.05)

gate_mult_atr = input.float(0.25, "Noise gate x ATR", step=0.05)
phase_gain = input.float(0.50, "Phase compensation", step=0.05)
plot_signals = input.bool(true, "Plot signals")

//============= Helpers (ASCII-only)
clamp(x, lo, hi) =>
x < lo ? lo : x > hi ? hi : x

sigmoid(x) =>
1.0 / (1.0 + math.exp(-x))

zscore(x, len) =>
m = ta.sma(x, len)
sd = ta.stdev(x, len)
sd != 0.0 ? (x - m) / sd : 0.0

clamp01(p) =>
clamp(p, 1e-6, 1.0 - 1e-6)

safelog01(p) =>
math.log(clamp01(p))

//============= Base series
c = src
ret = math.log(c / c[1])

//============= Directional entropy (0..1)
pos = ret > 0 ? 1.0 : 0.0
p_up = ta.sma(pos, len_entropy)
entropy_nat = -(p_up * safelog01(p_up) + (1.0 - p_up) * safelog01(1.0 - p_up))
entropy = entropy_nat / math.log(2.0)
order_fx = 1.0 - entropy

//============= Volatility & Liquidity
atr = ta.atr(len_atr)
vol_rel = atr / c
vol_z = zscore(vol_rel, len_entropy)
vol_sig = sigmoid(vol_z)

vol_avg = ta.sma(volume, len_vol)
liq_rel = vol_avg > 0 ? volume / vol_avg : 1.0
liq_sig = sigmoid(liq_rel - 1.0)

//============= Adaptive alpha
alpha_base = 2.0 / (len_base + 1.0)
alpha_raw = alpha_base * (1.0 + k_entropy * order_fx + k_vol * vol_sig + k_liq * liq_sig)
alpha = clamp(alpha_raw, 0.001, 0.999)

//============= Noise gate
delta = math.abs(c - nz(c[1], c))
gate_on = delta >= gate_mult_atr * atr
alpha_eff = gate_on ? alpha : 0.0

//============= NOVA EMA (variable-alpha) + phase compensation
var float nova = na
nova := na(nova[1]) ? c : nova[1] + alpha_eff * (c - nova[1])

slope = nova - nz(nova[1], nova)
lead = nova + phase_gain * slope

up = slope > 0
down = slope < 0

col = gate_on ? (up ? color.new(color.lime, 0) : color.new(color.red, 0)) : color.new(color.gray, 40)

p1 = plot(nova, "NOVA", color=col, linewidth=2)
p2 = plot(lead, "NOVA lead", color=color.new(color.aqua, 50), linewidth=1)
fill(p1, p2, color=color.new(up ? color.lime : color.red, 90))

buy = plot_signals and ta.crossover(c, nova) and up and gate_on
sell = plot_signals and ta.crossunder(c, nova) and down and gate_on

plotshape(buy, title="BUY NOVA", style=shape.triangleup, location=location.belowbar, size=size.tiny, text="BUY", color=color.new(color.lime, 0))
plotshape(sell, title="SELL NOVA", style=shape.triangledown, location=location.abovebar, size=size.tiny, text="SELL", color=color.new(color.red, 0))

alertcondition(buy, title="BUY NOVA", message="BUY NOVA")
alertcondition(sell, title="SELL NOVA", message="SELL NOVA")

คำจำกัดสิทธิ์ความรับผิดชอบ

ข้อมูลและบทความไม่ได้มีวัตถุประสงค์เพื่อก่อให้เกิดกิจกรรมทางการเงิน, การลงทุน, การซื้อขาย, ข้อเสนอแนะ หรือคำแนะนำประเภทอื่น ๆ ที่ให้หรือรับรองโดย TradingView อ่านเพิ่มเติมที่ ข้อกำหนดการใช้งาน