- 写在前面
- 布林线(BOLL)技术指标简介
- BOLL公式详解
- 参数设置
- 用到的主要Python库
- Python代码&详解
- 参考文献
- 推荐阅读
写在前面
本文代码部分总结自Packt出版社的《Learn Algorithmic Trading - Fundamentals of Algorithmic Trading》(图1)。现将该书的布林线技术指标部分进行总结,并对数据处理及图形绘制等函数做了相应改动,供有需要的读者学习研究。
布林线(BOLL)技术指标简介
布林线(Bollinger Bands,BOLL)又称布林带,是约翰·布林(John Bollinger)提出的一种行情价格频带分轨,是根据统计学中的标准差原理,设计出来的一种非常实用的技术指标。布林线也建立在移动平均线之上,但包含最近的价格波动,使指标更能适应不同的市场条件。布林线通常可由上轨(压力线)、中轨(行情平衡线)和下轨(支撑线)三条轨道线组成,属于通道式指标或路径式指标[1]。
BOLL公式详解
参数设置
n : n: n: 时间周期数
标准差 σ \sigma σ(STDEV
):
σ = ∑ i = 1 n ( P i − M A ) 2 n \sigma=\sqrt\frac{\sum_{i=1}^{n}(P i-MA)^{2}}{n} σ=n∑i=1n(Pi−MA)2
标准差因子 β \beta β(STDEV Factor
):
β = 2 \beta=2 β=2
中界线: n n n日内收盘价的算术平均
阻力线:中界线 + + +标准差因子 × \times ×标准差
支撑线:中界线 − - −标准差因子 × \times ×标准差
B B A N D M i d = M A n − p e r i o d s B B A N D U p = B B A N D M i d + β × σ B B A N D L o w = B B A N D M i d − β × σ \begin{array}{l} B B A N D_{M i d}=MA_{n-p e r i o d s} \\ B B A N D_{U p}=B B A N D_{M i d} + \beta \times \sigma \\ B B A N D_{L o w}=B B A N D_{M i d} - \beta \times \sigma \\ \end{array} BBANDMid=MAn−periodsBBANDUp=BBANDMid+β×σBBANDLow=BBANDMid−β×σ
用到的主要Python库
Python绘图库Matplotlib 3.2.1
Python金融数据处理库Pandas 1.0.2
Python矩阵计算库Numpy 1.16.0
Python代码&详解
# 导入及处理数据
import pandas as pd
import numpy as np
# 绘图
import matplotlib.pyplot as plt
# 设置图像标签显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import matplotlib as mpl
# 解决一些编辑器(VSCode)或IDE(PyCharm)等存在的图片显示问题,
# 应用Tkinter绘图,以便对图形进行放缩操作
mpl.use('TkAgg')# 导入数据并做处理
def import_csv(stock_code):df = pd.read_csv(stock_code + '.csv')df.rename(columns={'date': 'Date','open': 'Open','high': 'High','low': 'Low','close': 'Close','volume': 'Volume'},inplace=True)df['Date'] = pd.to_datetime(df['Date'], format='%Y/%m/%d')df.set_index(['Date'], inplace=True)return dfstock_code = 'sh600519'
# 绘制数据的规模
scale = 500
df = import_csv(stock_code)[-scale:]# SMA:简单移动平均(Simple Moving Average)
time_period = 20 # SMA的计算周期,默认为20
stdev_factor = 2 # 上下频带的标准偏差比例因子
history = [] # 每个计算周期所需的价格数据
sma_values = [] # 初始化SMA值
upper_band = [] # 初始化阻力线价格
lower_band = [] # 初始化支撑线价格# 构造列表形式的绘图数据
for close_price in df['Close']:# history.append(close_price)# 计算移动平均时先确保时间周期不大于20if len(history) > time_period:del (history[0])# 将计算的SMA值存入列表sma = np.mean(history)sma_values.append(sma) # 计算标准差stdev = np.sqrt(np.sum((history - sma) ** 2) / len(history)) upper_band.append(sma + stdev_factor * stdev)lower_band.append(sma - stdev_factor * stdev)# 将计算的数据合并到DataFrame
df = df.assign(收盘价=pd.Series(df['Close'], index=df.index))
df = df.assign(中界线=pd.Series(sma_values, index=df.index))
df = df.assign(阻力线=pd.Series(upper_band, index=df.index))
df = df.assign(支撑线=pd.Series(lower_band, index=df.index))# 绘图
ax = plt.figure()
# 设定y轴标签
ax.ylabel = '%s price in ¥' % (stock_code)df['收盘价'].plot(color='k', lw=1., legend=True)
df['中界线'].plot(color='b', lw=1., legend=True)
df['阻力线'].plot(color='r', lw=1., legend=True)
df['支撑线'].plot(color='g', lw=1., legend=True)
plt.show()
所得图像如下:
参考文献
[1] 麻道明.如何看懂技术指标.北京:中国宇航出版社,2015.207页
[1] Sebastien Donadio,Sourav Ghosh.Learn Algorithmic Trading - Fundamentals of Algorithmic Trading.Birmingham:Packt Press,2019.P59-62.
推荐阅读
用mplfinance库绘制股票K线、均线图
Python绘制MACD指标图
Python绘制RSI相对强弱指标图