多时间框架超级趋势追踪策略


创建日期: 2024-01-15 11:35:47 最后修改: 2024-01-15 11:35:47
复制: 0 点击次数: 556
avatar of ChaoZhang ChaoZhang
1
关注
1617
关注者

多时间框架超级趋势追踪策略

概述

该策略是一个利用ATR指标构建多时间框架动态趋势通道,实现趋势追踪的策略。策略会在价格突破通道时产生信号,通过不断调整通道捕捉更大的趋势。

策略原理

策略使用ATR指标构建上涨趋势通道和下跌趋势通道。具体来说,上涨通道线为收盘价减去ATR指标的N倍;下跌通道线为收盘价加上ATR指标的N倍。N的值可以通过参数进行调整。

当价格突破上涨通道时,产生买入信号;当价格突破下跌通道时,产生卖出信号。通道会根据最新价格动态调整,从而实现趋势追踪。

另外,策略还定义了一个trend变量判断当前处于上涨趋势还是下跌趋势。trend变量与通道线搭配使用,避免产生错误信号。

策略优势

  • 利用动态通道实现趋势追踪,顺势而为
  • 避免追高杀跌,减少行情反转的风险
  • 通道参数可调,适应性强
  • 多时间框架设置更灵活

策略风险

  • 追踪过于激进,可能增加亏损风险
  • 通道参数设置不当,信号较少或错误信号较多
  • 需要较强的编程能力去调整参数

优化方法:

  • 适当缩小ATR倍数,降低追踪幅度
  • 优化参数,找到最佳参数组合
  • 增加止损策略,降低单笔亏损

策略优化方向

  • 增加其他指标过滤,确保信号更可靠
  • 增加止损策略,降低风险
  • 进行参数优化,找到最佳参数
  • 优化进入和退出的时间,提高盈利率

总结

该策略整体来说是一个较好的趋势追踪策略。它能够动态调整,顺势而为,避免追高杀跌。通过参数优化和适当改进,可以进一步增强策略优势,减少风险,从而获得更好的效果。

策略源码
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '买入')
shortCondition = sellSignal
if shortCondition and window()
    strategy.close('BUY',comment = '卖出')
buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na