双均线均值反转策略

Author: ChaoZhang, Date: 2023-10-17 14:38:55
Tags:

双均线均值反转策略

双均线均值反转策略是一种趋势跟踪策略。它通过计算不同周期的均线,判断价格走势是否反转,以捕捉趋势反转点,实现低买高卖。

该策略首先计算两组不同周期的均线,一组是较长周期的均线,用于判断整体趋势;另一组是较短周期的均线,用于判断局部趋势。策略通过比较两组均线的关系,判断整体趋势是否发生反转。

具体来说,策略先计算一组较长周期(如60日线)的两条均线,分别是60日简单移动均线和60日加权移动均线。这组均线用于判断整体趋势。另外,策略再计算一组较短周期(如5日线)的两条均线,分别是5日简单移动均线和5日加权移动均线。这组均线用于判断局部趋势。

当短期均线上穿长期均线时,表示价格反转,由下降转为上升,本策略将开多头头寸;当短期均线下穿长期均线时,表示价格反转,由上升转为下降,本策略将开空头头寸。

具体操作如下:

  1. 计算60日简单移动均线nma和60日加权移动均线n2ma

  2. 计算5日简单移动均线nma1和5日加权移动均线n2ma1

  3. 比较n2ma1和nma1:若n2ma1上穿nma1,则开多头;若n2ma1下穿nma1,则开空头

  4. 比较n2ma和nma:若n2ma上穿nma,且已开多头,则继续持有多头;若n2ma下穿nma,且已开空头,则继续持有空头

  5. 当价格超过止损点或达到止盈点时,平仓

  6. 重复上述过程,以捕捉趋势反转,实现低买高卖

这个策略的优势在于,双均线组合可以比较灵敏地捕捉价格趋势的反转,双均线反转是比较经典的技术指标信号。同时,不同周期均线的组合,可以对整体趋势和局部趋势进行判断,实现了趋势跟踪。

该策略的风险在于,双均线反转信号可能出现假信号,从而导致乱入场或掉头出场,增加交易风险。此外,均线系统对盘整范围较大的市场,容易产生错误信号。最后,双均线系统需要较长的回测周期,来验证参数设置的稳定性。

该策略可以从以下几个方面进行优化:

  1. 优化均线的周期参数,寻找最佳参数组合

  2. 增加其他技术指标过滤,避免假突破

  3. 加入止损止盈策略,控制单笔损益

  4. 结合趋势交易时机,避免震荡市场的错误交易

  5. 动态调整仓位规模,适应市场波动的变化

综上所述,双均线均值反转策略通过比较不同周期均线的关系,捕捉价格趋势反转点,以达到低买高卖的目的。优化参数设置、增加过滤条件、控制风险是该策略可以改进的方向。使用恰当,它可以成为一个定量捕捉趋势转折的有效工具。


/*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")

更多内容