stock_system/pinescripts/Three_ATR_EMA.pine

60 lines
2.1 KiB
Plaintext

//@version=5
strategy(title="Three ATR EMA Strategy w/ Trailing", shorttitle="3ATR-EMA Trailing", overlay=true, currency=currency.USD, initial_capital=10000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.1)
// Inputs
ema_length = input.int(21, "EMA Length", minval=1)
atr_multiplier = input.float(3.0, "ATR Multiplier", step=0.1)
show_bulls = input.bool(true, "Show Bullish Markers")
trail_percent = input.float(2.0, "Trailing Stop %", step=0.1)
// Calculate EMA and ATR-based bands
ema = ta.ema(close, ema_length)
upper_band = ema + (ta.atr(ema_length) * atr_multiplier)
lower_band = ema - (ta.atr(ema_length) * atr_multiplier)
// Strategy Conditions
bullish_entry = (close < ema) and
(close[1] <= lower_band[1]) and
(close > close[1])
// Trailing Stop Logic
var float stop_price = na
var float trail_price = na
var bool trail_active = false
if bullish_entry
strategy.entry("Long", strategy.long)
trail_price := na // Reset on new entry
trail_active := false
if strategy.position_size > 0
// Activate trailing when price hits upper band
if close >= upper_band
trail_active := true
// Update trailing price when active
if trail_active
trail_price := math.max(high, nz(trail_price, high))
// Calculate stop price (now using declared variable)
stop_price := trail_active ? trail_price * (1 - trail_percent/100) : na
// Submit exit order
if trail_active
strategy.exit("Trail Exit", "Long", stop=stop_price)
// Visual elements
plot(ema, "EMA", color=color.new(#4A90E2, 0))
plot(upper_band, "Upper", color=color.new(#F5A623, 0))
plot(lower_band, "Lower", color=color.new(#7ED321, 0))
// Plot trailing stop line
plot(strategy.position_size > 0 and trail_active ? stop_price : na, "Trailing Stop", color=color.red, style=plot.style_linebr)
plotshape(show_bulls and bullish_entry ? low : na,
style=shape.triangleup,
location=location.belowbar,
color=color.new(#00FF00, 0),
size=size.small,
title="Bull Signal")