双均线均值反转策略是一种趋势跟踪策略。它通过计算不同周期的均线,判断价格走势是否反转,以捕捉趋势反转点,实现低买高卖。
该策略首先计算两组不同周期的均线,一组是较长周期的均线,用于判断整体趋势;另一组是较短周期的均线,用于判断局部趋势。策略通过比较两组均线的关系,判断整体趋势是否发生反转。
具体来说,策略先计算一组较长周期(如60日线)的两条均线,分别是60日简单移动均线和60日加权移动均线。这组均线用于判断整体趋势。另外,策略再计算一组较短周期(如5日线)的两条均线,分别是5日简单移动均线和5日加权移动均线。这组均线用于判断局部趋势。
当短期均线上穿长期均线时,表示价格反转,由下降转为上升,本策略将开多头头寸;当短期均线下穿长期均线时,表示价格反转,由上升转为下降,本策略将开空头头寸。
具体操作如下:
计算60日简单移动均线nma和60日加权移动均线n2ma
计算5日简单移动均线nma1和5日加权移动均线n2ma1
比较n2ma1和nma1:若n2ma1上穿nma1,则开多头;若n2ma1下穿nma1,则开空头
比较n2ma和nma:若n2ma上穿nma,且已开多头,则继续持有多头;若n2ma下穿nma,且已开空头,则继续持有空头
当价格超过止损点或达到止盈点时,平仓
重复上述过程,以捕捉趋势反转,实现低买高卖
这个策略的优势在于,双均线组合可以比较灵敏地捕捉价格趋势的反转,双均线反转是比较经典的技术指标信号。同时,不同周期均线的组合,可以对整体趋势和局部趋势进行判断,实现了趋势跟踪。
该策略的风险在于,双均线反转信号可能出现假信号,从而导致乱入场或掉头出场,增加交易风险。此外,均线系统对盘整范围较大的市场,容易产生错误信号。最后,双均线系统需要较长的回测周期,来验证参数设置的稳定性。
该策略可以从以下几个方面进行优化:
优化均线的周期参数,寻找最佳参数组合
增加其他技术指标过滤,避免假突破
加入止损止盈策略,控制单笔损益
结合趋势交易时机,避免震荡市场的错误交易
动态调整仓位规模,适应市场波动的变化
综上所述,双均线均值反转策略通过比较不同周期均线的关系,捕捉价格趋势反转点,以达到低买高卖的目的。优化参数设置、增加过滤条件、控制风险是该策略可以改进的方向。使用恰当,它可以成为一个定量捕捉趋势转折的有效工具。
/*backtest start: 2022-10-10 00:00:00 end: 2023-06-08 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // //////////////// Attempt to Reduced ReDraw version ///////////////////// // // Microcana.com strategy by pilotgsms - version 4.20b <<<< Edited by Seaside420 >>>> special thanks to 55cosmicpineapple // Hull_MA_cross added to script strategy("M&H_v420b", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0) dt = input(defval=0.0010, title="Decision Threshold", type=float, step=0.0001) dd = input(defval=1, title="Post Signal Bar Delay", type=float, step=1) df = input(defval=5, title="Close Position Bar Delay", type=float, step=1) keh=input(title="Double HullMA Cross",defval=7, minval=1) confidence=(request.security(syminfo.tickerid, 'D', close)-request.security(syminfo.tickerid, 'D', close[1]))/request.security(syminfo.tickerid, 'D', close[1]) prediction = confidence > dt ? true : confidence < -dt ? false : prediction[1] 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) n2=wma(diff1,sqn) openlong=prediction[dd] and n1>n2 and strategy.opentrades<1 if (openlong) strategy.entry("Long", strategy.long) openshort=not prediction[dd] and n2>n1 and strategy.opentrades<1 if (openshort) strategy.entry("Short", strategy.short) closeshort=prediction and close<low[df] if (closeshort) strategy.close("Short") closelong=not prediction and close>high[df] if (closelong) strategy.close("Long")