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