基于趋势跟随策略


创建日期: 2023-11-06 10:09:02 最后修改: 2023-11-06 10:09:02
复制: 0 点击次数: 558
avatar of ChaoZhang ChaoZhang
1
关注
1366
关注者

基于趋势跟随策略

概述

该策略基于趋势跟随的原理,使用Parabolic SAR指标判断市场趋势方向,并结合 barcolor 指标来可视化显示价格的牛熊状态,在趋势向上时做多,趋势向下时做空,以捕捉市场趋势所带来的利润。

策略原理

该策略主要通过Parabolic SAR指标来判断市场趋势的方向。Parabolic SAR又称抛物线转向指标,它由两个参数组成,Step代表SAR点移动步长,Max代表SAR点最大步长。当市场处于趋势状态时,SAR点会紧贴价格并随着趋势的延续不断向上或者向下移动,当趋势反转时,SAR点会穿过价格并出现在价格另一侧。因此,通过比较SAR点和K线的高低关系,就可以判断目前的趋势方向。

具体来说,当SAR点位于K线最低价之下时,代表目前处于上涨趋势,该策略会在这个时候做多;当SAR点上方穿过K线最高点时,代表趋势发生反转,这时该策略会平掉多单;相反,当SAR点位于K线最高价之上时,代表目前处于下跌趋势,该策略会在这个时候做空;当SAR点下方穿过K线最低点时,代表趋势反转,这时该策略会平掉空单。

为了更直观的判断目前的趋势状况,该策略还采用了barcolor指标对K线进行着色。当收盘价高于SAR点时,K线显示为绿色,代表上涨趋势;当收盘价低于SAR点时,K线显示为红色,代表下跌趋势。

策略优势分析

该策略最大的优势在于能够准确地捕捉市场趋势,并跟踪趋势进行交易,避免被频繁的市场noise干扰。具体优势如下:

  1. 使用Parabolic SAR指标判断趋势,SAR点的设计非常精妙,能够快速而精确地捕捉趋势反转。

  2. 采用barcolor指标直观显示目前的牛熊状态,一目了然。

  3. 交易信号来自趋势本身而不是其他因素,不会被短期价格震荡误导。

  4. 采用趋势跟踪止损,及时止损而不会过于敏感,防止被套。

  5. 保持交易方向一致,不做反向操作,有利于避免不必要的交易。

  6. 交易规则简单清晰,容易理解和实现,适合新手学习。

策略风险分析

该策略最大的风险在于:

  1. 无法确定具体的入场时机和出场时机,容易错过趋势早期和趋势末期的机会。

  2. 在盘整行情中停止交易且持有仓位,无法获利也无法止损,存在被套的风险。

  3. 无法限制单笔交易的盈亏比例,单笔损失可能过大。

  4. 只做单边交易,多头行情和空头行情只能捕捉其中一种。

  5. 没有考虑大级别的趋势判断,存在与大趋势对冲的风险。

  6. parametric optimal solution is found.

为了解决上述风险,可以从以下几个方面进行优化:

  1. 结合其他指标确定入场和出场的具体时机。

  2. 加入趋势揭示指标,避免在盘整中打开仓位。

  3. 设置风险管理规则,限制单笔损失。

  4. 优化做多做空的切换逻辑,捕捉更多交易机会。

  5. 加入多时间框架分析,判断大级别趋势方向。

策略优化方向

该策略还可进一步从以下几个方面进行优化:

  1. 优化Parabolic SAR参数的设定,使其更好地适应不同品种和周期。

  2. 结合移动平均线等指标过滤入场时机。

  3. 加入突破入场策略,在趋势启动后及时入场。

  4. 优化止损策略,避免止损过于敏感或过于迟钝。

  5. 加入止盈策略,在利润达到一定水平后主动止盈。

  6. 优化资金管理策略,提高策略的风险调整收益。

  7. 多时间框架优化,确保大级别趋势与交易方向一致。

  8. 引入机器学习等技术,动态优化参数。

总结

该策略通过Parabolic SAR指标判断趋势方向,并在趋势启动后立即跟随趋势进行交易。策略优点是交易信号来自趋势本身,不易受到市场noise的干扰。但也存在无法限制单笔交易风险、错过进入时机等问题。未来的优化方向包括设置止盈止损策略、优化参数设定、加入过滤器等,使策略在回测和实盘中都能获得更好的表现。

策略源码
/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Trend Trader Strategy (Trend Code)", shorttitle="Trend Trader Strategy (Trend Code)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//Inputs
TrendCode = input(5, title = "Trend Code")

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

//Parabolic SAR
psar = sar(0.02, 0.02, TrendCode * 0.005)


//Plot PSAR
plot(psar, title="PSAR", color = color.teal , trackprice=true)

//Barcolor
barcolor(close > psar ? color.green : color.red, title = "Bar Color")

if (psar >= high and time_cond)
    strategy.entry("long", strategy.long, stop=psar, comment="long")
else
    strategy.cancel("long")

if (psar <= low and time_cond)
    strategy.entry("short", strategy.short, stop=psar, comment="short")
else
    strategy.cancel("short")
        
if (not time_cond)
    strategy.close_all()