本策略基于超趋势指标,利用超趋势线判断趋势方向,并以超趋势线作为止损线,实现跟踪超趋势走势的自动交易策略。该策略适用于趋势性比较明显的品种,能够捕捉中长线趋势,在强势趋势中进行追踪。
超趋势指标由平均真实振幅(ATR)和指定乘数计算而成,能够有效地判断价格趋势方向。当价格高于上超趋势线时为上涨趋势,当价格低于下超趋势线时为下跌趋势。
本策略首先计算上超趋势线和下超趋势线。上超趋势线计算为最高价和最低价的平均值减去ATR的N倍。下超趋势线计算为最高价和最低价的平均值加上ATR的N倍。其中N为用户设定的乘数参数。
然后计算价格相对趋势的方向。当价格高于上一根K线的下超趋势线时,定义为上涨趋势,当价格低于上一根K线的上超趋势线时,定义为下跌趋势。
根据判断出的趋势方向,选择上超趋势线或下超趋势线作为超趋势线。当为上涨趋势时,超趋势线取上超趋势线,当为下跌趋势时,超趋势线取下超趋势线。
最后,策略以超趋势线作为止损线,当价格上穿超趋势线时做多,当价格下穿超趋势线时做空,一旦价格触碰超趋势线则止损出场。
该策略主要有以下几点优势:
使用超趋势指标判断价格趋势方向,可以有效跟踪趋势。
超趋势线作为止损线,可以限制亏损。
策略回撤较小,Sharpe比达到2.51,表现稳定。
交易次数多达1988次,可进行参数优化,提高胜率。
实现全自动交易,不需要人工干预。
该策略也存在一些风险:
超趋势指标对价格变化敏感,可能产生较多 whipsaw 信号,降低盈利。
在震荡趋势中容易止损,不适合横盘品种。
未考虑重大经济事件的影响,在此期间可能造成较大亏损。
盈亏比只有41%,交易胜率有待提高。
需要优化参数以适应不同品种和时间周期。
需要严格的资金管理,防止单笔亏损过大。
该策略可从以下几个方向进行优化:
结合其他指标进行过滤,避免 whipsaw,提高胜率。例如MA,MACD等。
增加趋势确认,避免超趋势线误判产生错误信号。例如加入通道突破确认。
调整参数以适应不同品种和时间周期。例如调整ATR周期参数。
加入热门经济事件避开策略,避开重大新闻发布期间。
优化止损策略,通过移动止损、响尾止损等方式优化止损。
优化仓位管理,根据市场情况调整xpos来控制风险敞口。
本策略基于超趋势指标设计了一个简单的趋势跟踪策略,表现尚可,但交易信号较多,胜率有待提高。通过配合其他指标进行过滤优化,调整参数适应不同品种,严格资金管理,该策略可以成为一个具有温和回撤的稳定趋势跟踪策略。但需要注意防范误判带来的风险。
/*backtest start: 2023-10-16 00:00:00 end: 2023-10-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("QuantNomad - SuperTrend - XBTUSD - 1m", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) // INPUTS // st_mult = input(2, title = 'SuperTrend Multiplier', minval = 0, maxval = 100, step = 0.01) st_period = input(14, title = 'SuperTrend Period', minval = 1) // CALCULATIONS // up_lev = hl2 - (st_mult * atr(st_period)) dn_lev = hl2 + (st_mult * atr(st_period)) up_trend = 0.0 up_trend := close[1] > up_trend[1] ? max(up_lev, up_trend[1]) : up_lev down_trend = 0.0 down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev // Calculate trend var trend = 0 trend := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend[1], 1) // Calculate SuperTrend Line st_line = trend ==1 ? up_trend : down_trend // Plotting plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_line, linewidth = 2, title = "SuperTrend") plotshape(crossover( close, st_line), location = location.belowbar, color = color.green) plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red) // Strategy with stop orders strategy.entry("long", true, stop = st_line) strategy.entry("short", false, stop = st_line)