双移动平均 HullMA交叉趋势策略是一种基于双移动平均线交叉的趋势跟踪策略。它使用加权移动平均线WMA构建双移动平均系统,并在它们交叉时生成交易信号。该策略同时结合价格突破判断,进一步过滤信号。
双移动平均 HullMA交叉趋势策略使用三条不同周期的WMA线,包括wma1、wma2和wma3。wma2和wma3构建双移动平均系统,当wma2上穿wma3时为看涨信号,而wma2下穿wma3时为看跌信号。wma1是辅助判断线。
该策略额外使用Hull移动平均加强信号判断。具体来说,它计算2日加权移动平均线的两倍n2ma和n日加权移动平均线nma的差值,并测度差值数值的变化。只有当差值上升时才会确认看涨信号有效,差值下降时才会确认看跌信号有效。
该策略同时结合价格判定。只有在价格比前一日价格高时,才会确认看涨信号有效生成做多单。只有价格比前一日价格低时,才会确认看跌信号有效生成做空单。
双移动平均HullMA交叉趋势策略结合双移动平均交叉和价格判定,可以有效滤除假信号,这是它的最大优势。此外,该策略运用三条不同周期的移动平均线捕捉不同级别的趋势,可以在趋势初期就进入市场。它的止损清算方式也比较稳定可靠。
双移动平均HullMA交叉趋势策略作为一种趋势跟踪策略,在盘整行情中容易产生较多交易次数和滑点损失。此外,双移动平均线交叉系统过于敏感,可能在 sideways发出错误信号。建议适当调整移动平均线参数,或增加附加过滤条件。
双移动平均HullMA交叉趋势策略可以从以下几个方面进行优化:
优化移动平均线参数,找到最优参数组合
增加成交量或者波动率等过滤器,排除假突破
结合其它指标作为辅助判断,提高信号质量
动态优化移动平均周期参数
双移动平均HullMA交叉趋势策略整体来说是一个稳定可靠的趋势跟踪策略。它结合双移动平均交叉和价格判定产生高质量信号。通过参数优化和添加过滤器,可以进一步减少错误信号,从而获得更好的策略表现。该策略适用于捕捉中长线趋势,是量化交易的一个不错选择。
/*backtest start: 2023-02-25 00:00:00 end: 2024-02-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("ZendicatoR", overlay=true) dt = input(defval=0.0010, title="Decision Threshold", type=float, step=0.0001) keh=input(title="Double HullMA Cross",defval=7, minval=1) che1=input(title="MA 1",defval=34,minval=1) che2=input(title="MA 2",defval=144,minval=1) che3=input(title="MA 3",defval=377,minval=1) amnt=input(title="TP ($)",defval=4200,minval=1) wma1=wma(close,che1) wma2=wma(close,che2) wma3=wma(close,che3) tms=10000000000000 A=request.security(syminfo.tickerid, 'D', close)*tms B=request.security(syminfo.tickerid, 'D', close[1])*tms C=A>B?green:red D=wma2>wma3?green:red plot(wma1,style=line,color=C,linewidth=4) p1=plot(wma2,style=line,color=D) p2=plot(wma3,style=line,color=D) fill(p1, p2, color=D, transp=75) n2ma=2*wma(close,round(keh/2)) nma=wma(close,keh) diff=n2ma-nma,sqn=round(sqrt(keh)) n2ma1=2*wma(close[2],round(keh/2)) nma1=wma(close[2],keh) diff1=n2ma1-nma1,sqn1=round(sqrt(keh)) n1=wma(diff,sqn)*tms n2=wma(diff1,sqn)*tms closelong = A*tms<B*tms and n2*tms>n1*tms and strategy.openprofit>amnt if (closelong) strategy.close("Long") closeshort = A*tms>B*tms and n1*tms>n2*tms and strategy.openprofit>amnt if (closeshort) strategy.close("Short") longCondition = A*tms>B*tms and n1*tms>n2*tms if (longCondition) strategy.entry("Long",strategy.long) shortCondition = A*tms<B*tms and n1*tms<n2*tms if (shortCondition) strategy.entry("Short",strategy.short)