资源加载中... loading...

基于修正Hull移动平均与一目均衡的量化交易策略

Author: ChaoZhang, Date: 2024-04-28 13:39:00
Tags: HMAIKHSWMA

基于修正Hull移动平均与一目均衡的量化交易策略

概述

该策略结合了修正的Hull移动平均(HMA)和一目均衡(Ichimoku Kinko Hyo)两种技术指标,旨在捕捉市场的中长期趋势。策略的主要思路是利用HMA与一目均衡中的基准线(Kijun Sen)的交叉信号,同时结合一目均衡的云层(Kumo)作为过滤条件,以此来判断市场的趋势方向并进行交易。

策略原理

  1. 计算修正的Hull移动平均(HMA)
    • 计算WMA(加权移动平均)并进行双重平滑处理,得到修正的HMA
  2. 计算一目均衡的各项指标
    • 计算转折线(Tenkan Sen)、基准线(Kijun Sen)、先行上线(Senkou Span A)和先行下线(Senkou Span B)
  3. 生成交易信号
    • 当HMA上穿基准线,且收盘价位于云层之上时,产生做多信号
    • 当HMA下穿基准线,且收盘价位于云层之下时,产生做空信号
  4. 执行交易
    • 根据做多或做空信号进行相应的交易操作
  5. 退出交易
    • 当HMA在相反方向上穿越基准线时,退出当前持仓

策略优势

  1. 结合了HMA和一目均衡两种有效的趋势跟踪指标,能够更好地捕捉市场趋势
  2. 利用一目均衡的云层作为过滤条件,可以有效减少虚假信号,提高交易的胜率
  3. 修正的HMA相比传统的移动平均线具有更快的响应速度和更低的延迟,能够及时反映市场的变化
  4. 策略逻辑清晰,易于理解和实现,适用于各种市场和时间周期

策略风险

  1. 在市场震荡或趋势不明朗时,该策略可能会产生较多的虚假信号,导致频繁交易和资金损失
  2. 策略的参数设置对交易结果有较大影响,不同的参数组合可能导致不同的表现
  3. 该策略未考虑市场的突发事件和非理性行为,在极端市场条件下可能面临较大风险

策略优化方向

  1. 引入其他技术指标或市场情绪指标,以提高信号的可靠性和稳定性
  2. 优化策略参数,如通过机器学习或遗传算法等方法寻找最优参数组合
  3. 考虑加入风险管理模块,如设置止损止盈、仓位管理等,以控制策略的风险敞口
  4. 根据不同市场和时间周期的特点,对策略进行针对性的调整和优化

总结

该策略通过结合修正的Hull移动平均和一目均衡,构建了一个相对稳健的趋势跟踪交易系统。策略逻辑清晰,易于实现,同时也具有一定的优势。然而,策略的表现仍然受到市场条件和参数设置的影响,需要进一步的优化和改进。在实际应用中,应结合具体的市场特点和风险偏好,对策略进行适当的调整和管理,以期获得更好的交易结果。


/*backtest
start: 2024-04-20 00:00:00
end: 2024-04-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hull MA_X + Ichimoku Kinko Hyo Strategy", shorttitle="HMX+IKHS", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)

// Hull Moving Average Parameters
keh = input(12, title="Double HullMA")
n2ma = 2 * wma(close, round(keh/2)) - wma(close, keh)
sqn = round(sqrt(keh))
hullMA = wma(n2ma, sqn)

// Ichimoku Kinko Hyo Parameters
tenkanSenPeriods = input(9, title="Tenkan Sen Periods")
kijunSenPeriods = input(26, title="Kijun Sen Periods")
senkouSpanBPeriods = input(52, title="Senkou Span B Periods")
displacement = input(26, title="Displacement")

// Ichimoku Calculations
highestHigh = highest(high, max(tenkanSenPeriods, kijunSenPeriods))
lowestLow = lowest(low, max(tenkanSenPeriods, kijunSenPeriods))
tenkanSen = (highest(high, tenkanSenPeriods) + lowest(low, tenkanSenPeriods)) / 2
kijunSen = (highestHigh + lowestLow) / 2
senkouSpanA = ((tenkanSen + kijunSen) / 2)
senkouSpanB = (highest(high, senkouSpanBPeriods) + lowest(low, senkouSpanBPeriods)) / 2

// Plot Ichimoku
p1 = plot(tenkanSen, color=color.blue, title="Tenkan Sen")
p2 = plot(kijunSen, color=color.red, title="Kijun Sen")
p3 = plot(senkouSpanA, color=color.green, title="Senkou Span A", offset=displacement)
p4 = plot(senkouSpanB, color=color.orange, title="Senkou Span B", offset=displacement)
fill(p3, p4, color=color.gray, title="Kumo Shadow")

// Trading Logic
longCondition = crossover(hullMA, kijunSen) and close > senkouSpanA[displacement] and close > senkouSpanB[displacement]
shortCondition = crossunder(hullMA, kijunSen) and close < senkouSpanA[displacement] and close < senkouSpanB[displacement]

// Strategy Execution
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Exit Logic - Exit if HullMA crosses KijunSen in the opposite direction
exitLongCondition = crossunder(hullMA, kijunSen)
exitShortCondition = crossover(hullMA, kijunSen)

if (exitLongCondition)
    strategy.close("Long")
if (exitShortCondition)
    strategy.close("Short")


相关内容

更多内容