该策略是一个基于均线方向判断大趋势,并结合HA动量指标判断突破点,实现趋势跟踪的量化交易策略。策略简单易懂,利用均线判断大趋势方向,再通过HA动量指标确定具体的入场点。
该策略主要通过均线和HA动量指标来实现趋势跟踪。具体逻辑是:
判断大趋势方向:计算20日简单移动平均线及200日简单移动平均线,当20日线高于(低于)200日线时,判断为上升(下降)趋势。
判断入场时机:计算HA动量指标,它通过比较实体部分大小判断力度。指标大于参数HA_Candle_strength时,视为动量放大,可以入场。此外,还检查收盘价高于/低于20日均线,判断突破方向。
设置止损止盈 exits:策略以盈亏数设置止损止盈。
通过上述流程,策略可以在趋势发生时,捕捉中间部分,实现趋势跟踪运算。
该策略具有以下优势:
策略逻辑简单清晰,容易理解实现,对参数调优也较为方便。
利用均线判断大趋势,可以有效滤除部分噪音,锁定主要趋势。
HA动量指标对突破力度进行判断,可以避免假突破。
结合均线方向和动量指标,使得入场时机选择更为精确。
设置止盈止损 exits,可以很好控制单次交易风险。
该策略主要存在以下风险:
当市场处于盘整时,容易产生频繁交叉导致错误交易。
参数设置(如均线参数、HA强度参数)不当可能导致漏入漏出。
无法适应市场中存在的所有类型走势,如震荡走势时可能亏损较大。
不能准确判断趋势转折点,无法及时止损可能扩大损失。
对应解决方法:
结合其他指标过滤无效交易信号。
对参数进行测试优化,找到最佳参数组合。
结合波动率指标等避免震荡场景下的错误交易。
设置移动止损以锁定利润。
该策略还可进一步优化的点包括:
使用自适应均线参数,而不是固定参数,使之更好适应市场变化。
增加成交量等指标过滤,避免在市场低迷时产生错误信号。
通过机器学习方法自动优化参数,使策略更稳定。
设置动态止损来捕捉利润,而不是简单的静态止损。
结合更多其他指标判断信号质量和市场情况,如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)