该策略是一个基于ATR(平均真实波幅)的做空反转交易系统,主要通过计算动态ATR阈值来识别价格过度延伸的机会。策略整合了多重技术指标,包括ATR、EMA和SMA,形成了一个完整的交易决策框架。当价格突破ATR动态阈值且满足EMA过滤条件时,系统会寻找做空机会,旨在捕捉价格回归均值的走势。
策略的核心逻辑基于以下几个关键步骤: 1. 通过设定期间(默认20)计算ATR值,反映市场波动性 2. 将ATR与自定义乘数相乘并叠加到收盘价上,构建原始阈值 3. 对原始阈值应用简单移动平均(SMA)进行平滑处理,降低噪音 4. 当收盘价突破平滑后的ATR信号触发线,且处于指定交易时间窗口内时,生成做空信号 5. 如启用EMA过滤器,则收盘价需要位于200周期EMA下方才执行做空 6. 当收盘价跌破前一根K线的最低价时,触发平仓信号
这是一个设计完善的做空策略,通过ATR动态阈值和EMA趋势过滤建立了可靠的交易系统。策略的优势在于其适应性强且风险控制完善,但同时也需要注意市场环境变化带来的风险。通过持续优化和完善风险管理,该策略有望在不同市场环境下保持稳定表现。
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("[SHORT ONLY] ATR Sell the Rip Mean Reversion Strategy", overlay=true, initial_capital = 1000000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, process_orders_on_close = true, margin_long = 5, margin_short = 5, calc_on_every_tick = true, fill_orders_on_standard_ohlc = true)
//#region INPUTS SECTION
// ============================================
// ============================================
// Strategy Settings
// ============================================
atrPeriod = input.int(title="ATR Period", defval=20, minval=1, group="Strategy Settings")
atrMultInput = input.float(title='ATR Multiplier', defval=1.0, step=0.25, group="Strategy Settings")
smoothPeriodInput = input.int(title='Smoothing Period', defval=10, minval=1, group="Strategy Settings")
//#endregion
// ============================================
// EMA Filter Settings
// ============================================
useEmaFilter = input.bool(true, "Use EMA Filter", group="Trend Filter")
emaPeriodInput = input.int(200, "EMA Period", minval=1, group="Trend Filter")
//#region INDICATOR CALCULATIONS
// ============================================
// Calculate ATR Signal Trigger
// ============================================
atrValue = ta.atr(atrPeriod)
atrThreshold = close + atrValue * atrMultInput
signalTrigger = ta.sma(atrThreshold, smoothPeriodInput)
plot(signalTrigger, title="Smoothed ATR Trigger", color=color.white)
// ============================================
// Trend Filter
// ============================================
ma200 = ta.ema(close, emaPeriodInput)
plot(ma200, color=color.red, force_overlay=true)
//#region TRADING CONDITIONS
// ============================================
// Entry/Exit Logic
// ============================================
shortCondition = close>signalTrigger
exitCondition = close<low[1]
// Apply EMA Filter if enabled
if useEmaFilter
shortCondition := shortCondition and close < ma200
//#endregion
if shortCondition
strategy.entry("Short", strategy.short)
if exitCondition
strategy.close_all()