基于均线和HA动量突破的趋势跟踪策略


创建日期: 2023-12-11 16:56:47 最后修改: 2023-12-11 16:56:47
复制: 0 点击次数: 367
1
关注
1207
关注者

基于均线和HA动量突破的趋势跟踪策略

概述

该策略是一个基于均线方向判断大趋势,并结合HA动量指标判断突破点,实现趋势跟踪的量化交易策略。策略简单易懂,利用均线判断大趋势方向,再通过HA动量指标确定具体的入场点。

策略原理

该策略主要通过均线和HA动量指标来实现趋势跟踪。具体逻辑是:

  1. 判断大趋势方向:计算20日简单移动平均线及200日简单移动平均线,当20日线高于(低于)200日线时,判断为上升(下降)趋势。

  2. 判断入场时机:计算HA动量指标,它通过比较实体部分大小判断力度。指标大于参数HA_Candle_strength时,视为动量放大,可以入场。此外,还检查收盘价高于/低于20日均线,判断突破方向。

  3. 设置止损止盈 exits:策略以盈亏数设置止损止盈。

通过上述流程,策略可以在趋势发生时,捕捉中间部分,实现趋势跟踪运算。

优势分析

该策略具有以下优势:

  1. 策略逻辑简单清晰,容易理解实现,对参数调优也较为方便。

  2. 利用均线判断大趋势,可以有效滤除部分噪音,锁定主要趋势。

  3. HA动量指标对突破力度进行判断,可以避免假突破。

  4. 结合均线方向和动量指标,使得入场时机选择更为精确。

  5. 设置止盈止损 exits,可以很好控制单次交易风险。

风险分析

该策略主要存在以下风险:

  1. 当市场处于盘整时,容易产生频繁交叉导致错误交易。

  2. 参数设置(如均线参数、HA强度参数)不当可能导致漏入漏出。

  3. 无法适应市场中存在的所有类型走势,如震荡走势时可能亏损较大。

  4. 不能准确判断趋势转折点,无法及时止损可能扩大损失。

对应解决方法:

  1. 结合其他指标过滤无效交易信号。

  2. 对参数进行测试优化,找到最佳参数组合。

  3. 结合波动率指标等避免震荡场景下的错误交易。

  4. 设置移动止损以锁定利润。

优化方向

该策略还可进一步优化的点包括:

  1. 使用自适应均线参数,而不是固定参数,使之更好适应市场变化。

  2. 增加成交量等指标过滤,避免在市场低迷时产生错误信号。

  3. 通过机器学习方法自动优化参数,使策略更稳定。

  4. 设置动态止损来捕捉利润,而不是简单的静态止损。

  5. 结合更多其他指标判断信号质量和市场情况,如VIX指标等。

总结

该策略总体来说是一个基于均线判断大趋势,HA动量指标作为入场依据的趋势跟踪策略。策略逻辑简单清晰,使用指标判断精准,可以在趋势推移中获取部分利润。同时也存在一些局限性,需要进一步测试优化,并增加其他辅助指标来改进策略质量。总的来说,该策略为量化交易初学者提供了一个较好的学习案例。

策略源码
/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("HA Trend Following", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 2)


//parameters input
Trend_DIR_MA   = input(defval = 200, title = "MA for trend direction")
HA_Candle_strength   = input(defval = 2, title = "HA candle strength")

Rng = abs(open - close)

// HA_Momentum - size of break out body
HA_Momentum = sma(Rng, 1) / sma(Rng, 5)
plot(HA_Momentum, color=green, linewidth=1, style=line)
plot(HA_Candle_strength, color= blue)

// open position
longCondition = close > sma(close, 20) and (sma(close, 20) > sma(close, Trend_DIR_MA) )and HA_Momentum > HA_Candle_strength and close - open > 0
if (longCondition)
    strategy.entry(id = "Lng", long = true)

ShortCondition = close < sma(close, 20) and (sma(close, 20) < sma(close, Trend_DIR_MA) ) and HA_Momentum > HA_Candle_strength and close - open < 0
if (ShortCondition)
    strategy.entry(id = "Shrt", long = false)


// close position
strategy.exit("ExL", from_entry = "Lng", loss = 500 , profit = 1500)
strategy.exit("ExS", from_entry = "Shrt", loss = 500 , profit = 1500)


更多内容