import numpy as np
import sys
from matplotlib.pyplot import plot
from matplotlib.pyplot import show

N = int(sys.argv[1])

weights = np.ones(N) / N
print("Weights", weights)

c = np.loadtxt('data.csv', delimiter=',', usecols=(6,), unpack=True)
sma = np.convolve(weights, c)[N-1:-N+1]
deviation = []
C = len(c)

for i in range(N - 1, C):
   if i + N < C:
      dev = c[i: i + N]
   else:
      dev = c[-N:]
   
   averages = np.zeros(N)
   averages.fill(sma[i - N - 1])
   dev = dev - averages 
   dev = dev ** 2
   dev = np.sqrt(np.mean(dev))
   deviation.append(dev)

deviation = 2 * np.array(deviation)
print (len(deviation), len(sma))
upperBB = sma + deviation
lowerBB = sma - deviation

c_slice = c[N-1:]
between_bands = np.where((c_slice < upperBB) & (c_slice > lowerBB))

print (lowerBB[between_bands])
print (c[between_bands])
print(upperBB[between_bands])
between_bands = len(np.ravel(between_bands))
print ("Ratio between bands", float(between_bands)/len(c_slice))

t = np.arange(N - 1, C)
plot(t, c_slice, lw=1.0)
plot(t, sma, lw=2.0)
plot(t, upperBB, lw=3.0)
plot(t, lowerBB, lw=4.0)
show()

 

布林带(Bollinger band)又是一种技术指标。是的,股票市场的确有成千上万种技术指标。
布林带是以发明者约翰·布林格(John Bollinger)的名字命名的,用以刻画价格波动的区间。布
林带的基本型态是由三条轨道线组成的带状通道(中轨和上、下轨各一条)。
 中轨 简单移动平均线。
 上轨 比简单移动平均线高两倍标准差的距离。这里的标准差是指计算简单移动平均线
所用数据的标准差。
 下轨 比简单移动平均线低两倍标准差的距离。

 

 

下图是用我们的示例数据绘制出来的布林带。中间锯齿状的细线描绘的是每天的收盘价,而
稍微粗一点也平滑一点的穿过它的曲线即为简单移动平均线。

学习来源:

Python数据分析基础教程:NumPy学习指南(第2版)

2018-03-08     21:41:54

posted on 2018-03-08 21:43  朱律波  阅读(1074)  评论(0编辑  收藏  举报