Bollinger带动量突破策略


创建日期: 2023-12-19 16:24:24 最后修改: 2023-12-19 16:24:24
复制: 0 点击次数: 338
1
关注
1124
关注者

Bollinger带动量突破策略

概述

Bollinger带动量突破策略是一种典型的利用Bollinger带指标识别股票价值的量化交易策略。该策略运用Bollinger带的上轨和下轨来判断股票是否被高估或低估,并结合股票价格的移动平均线来发出交易信号。当价格突破上轨时,认为股票被低估,形成买入信号;当价格跌破下轨时,认为股票被高估,形成卖出信号。

原理

Bollinger带是由中轨线、上轨线和下轨线组成。中轨线是n天的简单移动平均线;上下轨线分别是中轨线上下两个标准差的位置。当股价接近上轨时被认为股价被高估,接近下轨时被认为股价被低估。

该策略首先计算20天的股价中轨线、上轨线和下轨线。然后判断股价是否高于或低于中轨线,如果高于中轨线则为买入信号,低于中轨线则为卖出信号。同时,如果股价上穿上轨线,作为平仓信号,股价下穿下轨线,作为平仓信号。

优势

这种策略最大的优势是利用Bollinger带判断股价的高低估,避免了盲目交易的问题。当股价被高估时,策略会发出卖出信号;当股价被低估时,策略会发出买入信号。这样可以有效过滤掉一些噪音,进入的交易信号质量较高。

另外,该策略加入了移动平均线作为辅助判断指标。股价实际突破移动平均线,也是较强的趋势信号。结合Bollinger带的高低估判断,可以使策略信号更加准确。

风险

该策略最大的风险在于Bollinger带指标本身。当股票价格出现异常波动时,Bollinger带的范围也会随之改变。这时就可能出现股票价格明显被高估或低估,但是并未触及Bollinger带的上下轨。从而导致策略无法给出交易信号的问题。

另外,如果仅仅依赖技术指标,而没有考虑股票基本面信息,也会存在一定的风险。比如说盈利下滑但股价被低估的股票,或者业绩高速增长但股价偏高的个股。这些情况下,策略信号可能与股票实际价值存在一定偏差。

优化方向

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

  1. 增加止损机制。当股票价格与买入价格相比发生一定比例的下跌时,强制止损退出。这可以有效控制策略的最大损失。

  2. 结合股票基本面与技术指标。加入如PE,PB等基本面指标的判断规则,避免买入实际上已经高估的股票。

  3. 动态调整参数。使Bollinger带的周期长度、标准差倍数等参数根据不同股票波动率进行动态调整。这可以使Bollinger带更好地适应个股的价格波动。

总结

Bollinger带动量突破策略通过辅助判断指标发出交易信号,避免了盲目交易的风险,可以有效过滤噪音信号。同时也存在一定局限,无法完全避免异常波动的影响。未来可以从止损、结合基本面、动态参数调整等方面进行优化,使策略更稳定可靠。

策略源码
/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="NoScoobies Bollinger Bands", overlay=true)
source = close
length = input(20, minval=1, title = "Period") //Length of the Bollinger Band 
mult = input(1.5, minval=0.001, maxval=50, title = "Standard Deviation") // Use 1.5 SD for 20 period MA; Use 2 SD for 10 period MA 

basis = sma(source, length)
dev = mult * stdev(source, length)

upper = basis + dev
lower = basis - dev

long=crossover(source, basis)
short=crossunder(source, basis)
close_long=crossunder(source, upper)
close_short=crossover(source, lower)

if long
    strategy.entry("Long", strategy.long)
    strategy.close("Long", when = close_long)

if short
    strategy.entry("Short", strategy.short)
    strategy.close("Short", when = close_short)

plot(basis, color=color.red,title= "SMA")
p1 = plot(upper, color=color.blue,title= "UB")
p2 = plot(lower, color=color.blue,title= "LB")
fill(p1, p2)
更多内容