1.布林线(Bollinger Band)布林线是根据统计学中的标准差原理设计出来的一种非常实用的技术指标。它由三条轨道线组成, 其中上下两条线分别可以看成是价格的压力线和支撑线,在两条线之间是一条价格平均线,一般 情况价格线在由上下轨道组成的带状区间游走,而且随价格的变化而自动调整轨道的位置。当 波带变窄时,激烈的价格波动有可能随即产生;若高低点穿越带边线 时,立刻又回到波带内, 则会有回档产生。
布林线是由三条线组成,在中间的通常为n天平均线,而在上下的两条线则分别为up线和down线, 算法是首先计出过去20日收巿价的标准差std,通常再乘2得出2倍标准差,up线为20天平均线加2倍 标准差,down线则为20天平均线减2倍标准差。布林线这个定义刚好跟移动窗口函数rolling的定 义差不多,故用rolling函数完美构建布林线。
2.移动窗口函数rolling
df.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
参数说明:
1.window:滑窗大小,有两种形式int或者offset。使用int,则数值是计算统计量的向前几个数据。offset类型,表示时间窗的大小;
2.min_periods:每个窗口最少包含的观测值数量,小于这个值的窗口结果为NA.值可以是int,默认NONE。offset情况下,默认为1;
3.center:把窗口的标签设置为居中。布尔型默认为False,默认为1;
4.win_type: 窗口的类型,截取窗的各种函数。字符串类型,默认为None;
5.on: 可选参数,对于df而言,指定要计算滚动窗口的列,值为列名;
6.axis:int或字符串,默认值为0,即对列进行计算;
7.closed:定义区间的开闭,支持int类型的window,对于offset类型默认是左开右闭的即默认为right。
3.用移动窗口函数构建布林线
import pandas as pd
import talib as ta
pd.set_option('max_rows', None) # 显示最多行数
pd.set_option('max_columns', None) # 显示最多列数
pd.set_option('expand_frame_repr', False) # 当列太多时显示不清楚
pd.set_option('display.unicode.east_asian_width', True) # 设置输出右对齐
#导入数据
df=pd.read_csv(r'./data/pandas_data/000006.SZ.csv',index_col='交易日期',parse_dates=True,encoding="gbk")
df.sort_values(by=['交易日期'],axis=0,ascending=True,inplace=True)
df['median'] = df['收盘价'].rolling(30, min_periods=1).mean()
#计算上轨、下轨道
df['std'] = df['收盘价'].rolling(30, min_periods=1).std(ddof=0) # ddof代表标准差自由度
df['upper'] = df['median'] + 2 * df['std']
df['lower'] = df['median'] - 2 * df['std']
print(df.tail(30))

4.用Ta_Lib库构建布林线
df['median'], df['upper'], df['lower'] = ta.BBANDS(df['收盘价'], timeperiod=30,nbdevup=2, nbdevdn=2, matype=0)
print(df.tail(30))

5.总结
通过对比移动窗口函数rolling和Ta_Lib构造的布林线,可以看出两种方法得出的结论是一样的,有兴趣的朋友也可以对照行情软件, 可以发现这两种方法构造的布林线跟行情软件上的是一样的。
本主题为课程学员专享,成为股票量化投资课程学员后可免费阅读
成为学员