数据分析- 布林带
布林带
布林带由3条线组成:
中轨线: 5日加权移动平均线
上轨线: 中轨 + 2*5日标准差 (这支股票顶部的压力)
下轨线: 中轨 - 2*5日标准差 (这支股票底部的支撑力)
布林带收窄代表趋于稳定, 如果布林带张开代表有较大的波动空间.
sma53 = np.convolve(
closing_prices, core, 'valid')
mp.plot(dates[4:], sma53, color='violet',
linewidth=2, label='SMA-5(3)')
# 绘制5日均线的布林带
stds = np.zeros(sma53.size)
for i in range(stds.size):
stds[i] = closing_prices[i:i + 5].std()
# 底部支撑线 和 顶部压力线
lowers = sma53 - 2 * stds
uppers = sma53 + 2 * stds
# 绘制布林带
mp.plot(dates[4:], lowers,
color='limegreen', label='Lower')
mp.plot(dates[4:], uppers,
color='orangered', label='Upper')
mp.fill_between(
dates[4:], lowers, uppers,
uppers > lowers,
color='dodgerblue', alpha=0.3)
线性预测与线性拟合
线性预测
在二维世界(x,y),线性方程表示为一条直线; 在三维世界(x,y,z),线性方程表示为一个平面.再高的维度常人无法感受.但是线性方程依然存在.
假设一组数据符合一种线性规律, 那么就可以预测未来将会出现的数据.
a b c d e f ?
ax + by + cz = d
bx + cy + dz = e
cx + dy + ez = f
预测:
dx + ey + fz = ?
计算机如何解三元一次方程组?
$$
\left[ \begin{array}{ccc}
a & b & c \
b & c & d \
c & d & e \
\end{array}
\right]
\times
\left[ \begin{array}{ccc}
x\
y\
z\
\end{array}
\right]
\left[ \begin{array}{ccc}
d\
e\
f\
\end{array}
\right]
$$
# a矩阵为3*3的矩阵, b矩阵为等号右边的矩阵
# c即是[xyz]矩阵
c = np.linalg.lstsq(a, b)[0]
案例: 预测AAPL下一天的股价
# 整理五元一次方程组, 最终预测一组股票的走势
N = 3
pred_prices = np.zeros(
closing_prices.size - 2 * N + 1)
# 为预测值的每一个元素赋值
for i in range(pred_prices.size):
a = np.zeros((N, N))
# 整理5行5列的矩阵
for j in range(N):
a[j, ] = closing_prices[
i + j:i + j + N]
b = closing_prices[i + N:i + N * 2]
# 根据a矩阵与b矩阵求解
x = np.linalg.lstsq(a, b)[0]
# b.dot(x) b与x执行矩阵相乘
pred_prices[i] = b.dot(x)
# 把预测的结果绘制出来
# 向dates数组末尾在加一天 (工作日)
dates = np.append(
dates, dates[-1] +
pd.tseries.offsets.BDay())
mp.plot(dates[2 * N:], pred_prices,
'o-', color='orangered',
linewidth=2, label='Predict Price')
线性拟合
线性拟合可以寻求与一组数据的走势规律相适应的线性表达式方程.
例如:
一组散点:[x1, y1][x2, y2][x3, y3] ... [xn, yn]
假设这组散点数据符合同一个线性方程, 那么:
kx1 + b = y1
kx2 + b = y2
kx3 + b = y3
...
kxn