上一讲介绍A股移动平均值(MA)指标,本讲我们来讲解布林布的实现。
布林线(BOLL)技术指标简介
布林线(Bollinger Bands,BOLL)又称布林带,是约翰·布林(John Bollinger)提出的一种行情价格频带分轨,是根据统计学中的标准差原理,设计出来的一种非常实用的技术指标。布林线也建立在移动平均线之上,但包含最近的价格波动,使指标更能适应不同的市场条件。布林线通常可由上轨(压力线)、中轨(行情平衡线)和下轨(支撑线)三条轨道线组成,属于通道式指标或路径式指标[1]。
股票的布林带指标是一种基于统计学的技术指标,用于衡量股票价格在一定时间内的波动范围。它是通过计算股票价格在一定时间内的移动平均数以及标准差,对股票价格的上下限进行约束,从而帮助投资者判断股票价格是否处于超买或超卖状态,并作出相应的交易决策。
BOLL公式详解
参数设置
n
n
n : 时间周期数
**标准差 σ **(STDEV
):
σ
=
∑
i
=
1
n
(
P
i
−
M
A
)
2
n
\sigma=\sqrt{\frac{\sum_{i=1}^n(Pi-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
BBAND_{Mid}=MA_{n-periods}
BBANDMid=MAn−periods
B
B
A
N
D
U
p
=
B
B
A
N
D
M
i
d
+
β
×
σ
BBAND_{Up}=BBAND_{Mid} + \beta \times \sigma
BBANDUp=BBANDMid+β×σ
B
B
A
N
D
L
o
w
=
B
B
A
N
D
M
i
d
−
β
×
σ
BBAND_{Low}=BBAND_{Mid} - \beta \times \sigma
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 df
stock_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)
# 计算移动平均时先确保时间周期不大于20
if 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()
所得图像如下:
布林线的买卖法则
布林带指标基于股票价格的波动范围,可以反映股票价格在历史上的波动情况,并给出有关价格上涨和下跌的建议。根据布林带指标的上下限和股票价格的走势,可以得出以下买卖法则。
-
上穿下轨买入信号:当股票价格从下方上穿下轨时,表明股票价格已经处于超卖状态,建议买入股票。
-
上穿中线买入信号:当股票价格从下方上穿中线时,表明股票价格已经开始上涨,建议买入股票。
-
下穿上轨卖出信号:当股票价格从上方下穿上轨时,表明股票价格已达到顶部,可能出现价格下跌的情况,建议卖出股票。
-
下穿中线卖出信号:当股票价格从上方下穿中线时,表明股票价格可能已经到达顶部,建议卖出股票。
需要注意的是,这些买卖信号只是参考建议,需要结合其他技术指标和市场情况进行分析。此外,在使用布林带指标时,也应该注意时间周期的选择,短周期的布林带指标波动幅度较大,长周期的布林带指标波动幅度较小,选择不同的时间周期,可以更精确地判断市场状况。