一、布林带策略介绍
布林带/布林线/保利加通道(Bollinger Band):由三条轨道线组成,其中上下两条线分别可以看成是价格的压力线和支撑线,在两条线之间是一条价格平均线。
一般来说,股价会运行在压力线和支撑线所形成的通道中。
与MACD、RSI、KDJ等指标一样,布林线(BOLL)指标也是股票市场最实用的技术分析参考指标。
1、计算公式
中间线:20日均线
up线(压力线):20日均线+N*SD(20日收盘价标准差)
down线(支撑线):20日均线-N*SD(20日收盘价标准差)
SD是标准差,N是倍数。
2、布林带策略
当股价突破阻力线时——清仓
当股价跌破支撑线时——全仓买入
布林带策略研究——N的取值问题、布林带宽度等
上图中修改计算周期,即修改均线。修改股票特性参数,即修改N的取值。
二、布林带策略实现
# 初始化函数,设定基准等等 def initialize(context):# 设定沪深300作为基准set_benchmark('000300.XSHG')# 开启动态复权模式(真实价格)set_option('use_real_price', True)# 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')g.security = '002389.XSHE' # 航天彩虹g.M = 20 # 计算周期g.k = 2 # 股票特性参数,即N的取值# 初始化此策略 def handle_data(context, data):# 获取该股票20日收盘价sr = attribute_history(g.security, g.M)['close']# 取得过去20日的平均价格ma = sr.mean()# numpy和pandas的std()均可计算标准差# up线(压力线):20日均线+N*SD(20日收盘价标准差)up = ma + g.k * sr.std()# down线(支撑线):20日均线-N*SD(20日收盘价标准差)down = ma - g.k * sr.std()# 股票开盘价格p = get_current_data()[g.security].day_open# 取得当前的现金cash = context.portfolio.available_cash# portfolio.positions持仓标的信息if p < down and g.security not in context.portfolio.positions:# 跌破下限买入信号且没有持仓order_value(g.security, cash)elif p > up and g.security in context.portfolio.positions:# 涨破上限卖出信号且有持仓order_target(g.security, 0) # 卖出所有股票,使这只股票的最终持有量为0
执行显示效果: