커뮤니티
수식 부탁드립니다.
//──────────────────────────────────────────────
// INPUTS
//──────────────────────────────────────────────
use_long = input.bool(true, "Use Long Settings", group="Strategy")
use_short = input.bool(true, "Use Short Settings", group="Strategy")
use_dynamic_mult = input.bool(true, "Use Dynamic Multiplier", group="Dynamic Adaptation")
len_long = input.int(20, "Long Length", group="Long Settings")
mult_long = input.float(1.0, "Long Multiplier", step=0.1, group="Long Settings")
len_short = input.int(20, "Short Length", group="Short Settings")
mult_short = input.float(1.0, "Short Multiplier", step=0.1, group="Short Settings")
src = close
//──────────────────────────────────────────────
// Dynamic Multiplier
//──────────────────────────────────────────────
f_dynamic_mult(base_mult, atr_length, use_dynamic) =>
if use_dynamic
volatility_factor = ta.atr(atr_length) / ta.atr(atr_length)[20]
adjusted_mult = base_mult * math.sqrt(volatility_factor)
math.min(math.max(adjusted_mult, base_mult * 0.5), base_mult * 2)
else
base_mult
dynamic_mult_long = f_dynamic_mult(mult_long, len_long, use_dynamic_mult)
dynamic_mult_short = f_dynamic_mult(mult_short, len_short, use_dynamic_mult)
//──────────────────────────────────────────────
// ATR Band
//──────────────────────────────────────────────
deltaAtr_long = dynamic_mult_long * ta.atr(len_long)
deltaAtr_short = dynamic_mult_short * ta.atr(len_short)
midb_long = ta.sma(src, len_long)
midb_short = ta.sma(src, len_short)
upperb_long = midb_long + deltaAtr_long
lowerb_long = midb_long - deltaAtr_long
upperb_short = midb_short + deltaAtr_short
lowerb_short = midb_short - deltaAtr_short
//──────────────────────────────────────────────
// Trend Detection
//──────────────────────────────────────────────
trendUp_long = close > upperb_long
trendDown_long = close < lowerb_long
trendUp_short = close > upperb_short
trendDown_short = close < lowerb_short
//──────────────────────────────────────────────
// Trend State Machine
//──────────────────────────────────────────────
var int trendState = 0
trendState :=
use_long and trendUp_long ? 1 :
use_long and trendDown_long ? -1 :
use_short and trendUp_short ? 1 :
use_short and trendDown_short ? -1 :
nz(trendState[1], 0)
//──────────────────────────────────────────────
// Signal start detection
//──────────────────────────────────────────────
trend_started = trendState != trendState[1]
long_signal = trend_started and trendState == 1
short_signal = trend_started and trendState == -1
//──────────────────────────────────────────────
// Signal Markers
//──────────────────────────────────────────────
plotshape(long_signal, title="Long Signal", style=shape.labelup, location=location.belowbar, color=color.blue, size=size.small, text="LONG", textcolor = color.white)
plotshape(short_signal, title="Short Signal", style=shape.labeldown, location=location.abovebar, color=color.red, size=size.small, text="SHORT", textcolor = color.white)
//──────────────────────────────────────────────
// ATR Band Visualization
//──────────────────────────────────────────────
// Long Bands
plot(use_long ? midb_long : na, title="Long Mid (Length)", color=color.new(color.blue, 0), linewidth=1, style=plot.style_line)
plot(use_long ? upperb_long : na, title="Long Upper ATR Band", color=color.new(color.blue, 40), linewidth=1, style=plot.style_line)
plot(use_long ? lowerb_long : na, title="Long Lower ATR Band", color=color.new(color.blue, 40), linewidth=1, style=plot.style_line)
// Short Bands
plot(use_short ? midb_short : na, title="Short Mid (Length)", color=color.new(color.red, 0), linewidth=1, style=plot.style_line)
plot(use_short ? upperb_short : na, title="Short Upper ATR Band", color=color.new(color.red, 40), linewidth=1, style=plot.style_line)
plot(use_short ? lowerb_short : na, title="Short Lower ATR Band", color=color.new(color.red, 40), linewidth=1, style=plot.style_line)
답변 1
예스스탁 예스스탁 답변
2026-01-08 16:22:59