双向SMMA交叉ATR风控定向获利策略

SMMA ATR TP SL
创建日期: 2025-02-19 10:59:14 最后修改: 2025-02-19 10:59:14
复制: 2 点击次数: 75
1
关注
1196
关注者

 双向SMMA交叉ATR风控定向获利策略

概述

这是一个基于SMMA(平滑移动平均线)的双向趋势跟踪策略。该策略利用价格与SMMA的交叉来产生多空信号,并结合ATR动态止损和固定获利目标来管理风险和收益。策略设计简洁而有效,适合不同时间周期的趋势跟踪交易。

策略原理

策略核心是通过17周期SMMA与价格的交叉来捕捉趋势变化。当价格上穿SMMA时,开启多头头寸;当价格下穿SMMA时,开启空头头寸。出场管理采用三重机制:1)基于ATR的动态止损,设定为SMMA上下0.75倍ATR;2)固定获利目标,多头为1150点,空头为1500点;3)反向交叉信号平仓。这种组合既保护了利润,又给予趋势充分发展空间。

策略优势

  1. 信号系统稳定可靠:SMMA相比简单移动平均线更平滑,能有效减少虚假信号
  2. 风险管理全面:结合ATR动态止损和固定获利目标,既适应市场波动性变化,又锁定合理收益
  3. 双向交易:充分把握市场双向机会,提高资金利用效率
  4. 可扩展性强:策略框架清晰,易于在不同市场和时间周期上实施
  5. 操作规则明确:入场出场条件客观,减少主观判断带来的干扰

策略风险

  1. 震荡市场风险:在横盘震荡市场可能频繁交易导致损失
  2. 滑点风险:固定点数获利目标在快速市场可能面临滑点
  3. 趋势反转风险:强趋势突然反转时,ATR止损可能不够快
  4. 参数依赖:SMMA周期和ATR倍数的选择对策略表现影响较大
  5. 资金管理风险:固定百分比仓位在波动性变化时可能不够灵活

策略优化方向

  1. 引入趋势强度过滤:可添加ADX等指标筛选强趋势,减少震荡市场假信号
  2. 动态获利目标:考虑使用ATR动态调整获利目标,更好适应市场状态
  3. 改进仓位管理:引入波动率加权的仓位计算,优化资金利用效率
  4. 多时间周期确认:增加更长周期趋势确认,提高交易质量
  5. 市场环境适应:增加市场类型判断逻辑,在不同市场条件下调整策略参数

总结

这是一个设计合理的趋势跟踪策略,通过SMMA交叉捕捉趋势,运用ATR进行风险控制,配合固定获利目标管理收益。策略逻辑清晰,实现简单,具有良好的可操作性和扩展性。虽然在震荡市场表现可能欠佳,但通过建议的优化方向可以进一步提升策略的稳定性和适应性。对于偏好趋势跟踪的交易者来说,这是一个值得关注的策略框架。

策略源码
/*backtest
start: 2024-02-20 00:00:00
end: 2025-02-17 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("SMMA 17 Crossover Strategy (Long & Short, ATR SL & Fixed TP)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// 🚀 SMMA Calculation
smmaLength = 17
smma = 0.0
smma := na(smma[1]) ? ta.sma(close, smmaLength) : (smma[1] * (smmaLength - 1) + close) / smmaLength

// 📈 ATR Calculation (For Dynamic Stop-Loss)
atrLength = 14
atr = ta.rma(ta.tr(true), atrLength)

// 🔥 Long Entry Condition
longCondition = ta.crossover(close, smma)  // ✅ Price crosses above SMMA

// 🔄 Long Exit Condition
longExit = ta.crossunder(close, smma)  // ✅ Price crosses below SMMA

// 📉 ATR-Based Stop-Loss (Dynamic) for Long
longStopLoss = smma - (atr * 0.75)  // ✅ Stop Loss below SMMA

// 🏆 Fixed Take Profit for Long (1150 Points)
var float longEntryPrice = na
var float longTakeProfit = na
if longCondition
    longEntryPrice := close
    longTakeProfit := longEntryPrice + 1150  // ✅ TP 1150 points above entry

// 🔥 Short Entry Condition
shortCondition = ta.crossunder(close, smma)  // ✅ Price crosses BELOW SMMA (Short trade)

// 🔄 Short Exit Condition
shortExit = ta.crossover(close, smma)  // ✅ Price crosses ABOVE SMMA (Close Short trade)

// 📉 ATR-Based Stop-Loss (Dynamic) for Short
shortStopLoss = smma + (atr * 0.75)  // ✅ Stop Loss above SMMA

// 🏆 Fixed Take Profit for Short (1500 Points) - Updated from 2000
var float shortEntryPrice = na
var float shortTakeProfit = na
if shortCondition
    shortEntryPrice := close
    shortTakeProfit := shortEntryPrice - 1500  // ✅ TP 1500 points below entry (Updated)

// 📊 Plot SMMA (For Visualization)
plot(smma, title="SMMA (17)", color=color.blue)

// 🚀 Long Entry (Allow Multiple)
if longCondition
    strategy.entry("Long", strategy.long)

// 🛑 Long Exit Conditions (Whichever Comes First)
strategy.exit("Long TP/SL", from_entry="Long", stop=longStopLoss, limit=longTakeProfit)
if longExit
    strategy.close("Long")

// 🚀 Short Entry (Allow Multiple)
if shortCondition
    strategy.entry("Short", strategy.short)

// 🛑 Short Exit Conditions (Whichever Comes First)
strategy.exit("Short TP/SL", from_entry="Short", stop=shortStopLoss, limit=shortTakeProfit)
if shortExit
    strategy.close("Short")
相关推荐
更多内容