赵走x博客
首页
书籍
软件
工具
古诗词
搜索
登录
29、布林带
28、指数移动平均线
27、简单移动平均线
26、真实波动幅度均值(ATR)
25、周汇总
24、日期分析
23、股票收益率
22、统计分析
21、取值范围:找到最大值和最小值
20、成交量加权平均价格(VWAP)
19、CSV 文件
18、文件读写
17、动手实践:数组的转换
16、数组的属性
15、数组的分割
14、数组的组合
13、动手实践:改变数组的维度
12、动手实践:多维数组的切片和索引
11、一维数组的索引和切片
10、动手实践:创建自定义数据类型
9、dtype 类的属性
8、自定义数据类型
7、字符编码
6、数据类型对象
5、NumPy 数据类型
4、选取数组元素
3、动手实践:创建多维数组
2、NumPy 数组对象
1、动手实践:向量加法
29、布林带
资源编号:76417
人工智能
Numpy学习指南
热度:42
布林带(Bollinger band)又是一种技术指标。是的,股票市场的确有成千上万种技术指标。 布林带是以发明者约翰·布林格(John Bollinger)的名字命名的,用以刻画价格波动的区间。布 林带的基本型态是由三条轨道线组成的带状通道(中轨和上、下轨各一条)。
布林带(Bollinger band)又是一种技术指标。是的,股票市场的确有成千上万种技术指标。 布林带是以发明者约翰·布林格(John Bollinger)的名字命名的,用以刻画价格波动的区间。布 林带的基本型态是由三条轨道线组成的带状通道(中轨和上、下轨各一条)。 1. 中轨 简单移动平均线。 2. 上轨 比简单移动平均线高两倍标准差的距离。这里的标准差是指计算简单移动平均线 所用数据的标准差。 3. 下轨 比简单移动平均线低两倍标准差的距离。 ### 动手实践:绘制布林带 我们已经掌握了计算简单移动平均线的方法。如有需要,请复习3.20节“动手实践:计算简 单移动平均线”的内容。 接下来的例子将介绍NumPy中的fill函数。fill函数可以将数组元素 的值全部设置为一个指定的标量值,它的执行速度比使用array.flat = scalar或者用循环遍 历数组赋值的方法更快。按照如下步骤绘制布林带。 * (1) 我们已经有一个名为sma的数组,包含了简单移动平均线的数据。因此,我们首先要遍 历和这些值有关的数据子集。数据子集构建完成后,计算其标准差。注意,从某种意义上来说, 我们必须去计算每一个数据点与相应平均值之间的差值。如果不使用NumPy,我们只能遍历所有 的数据点并逐一减去相应的平均值。幸运的是,NumPy中的fill函数可以构建元素值完全相同 的数组。这可以让我们省去一层循环,当然也就省去了这个循环内作差的步骤。 ``` import numpy as np import sys from matplotlib.pyplot import plot, show # N=int(sys.argv[1]) N = 5 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 ``` * (2) 使用如下代码绘制布林带(不必担心,我们将在第9章中学习绘图方面的知识): ``` 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() ``` Out: ``` weights [0.2 0.2 0.2 0.2 0.2] 26 26 [329.23044409 335.70890572 318.53386282 321.90858271 327.74175968 331.5628136 337.94259734 343.84172744 339.99900409 336.58687297 333.15550418 328.64879207 323.61483771 327.25667796 334.30323599 335.79295948 326.55905786 324.27329493 325.47601386 332.85867025 341.63882551 348.75558399 348.48014357 348.01342992 343.56371701 341.85163786] [336.1 339.32 345.03 344.32 343.44 346.5 351.88 355.2 358.16 354.54 356.85 359.18 359.9 363.13 358.3 350.56 338.61 342.62 342.88 348.16 353.21 349.31 352.12 359.56 360. 355.36] [354.05355591 351.73509428 373.93413718 374.62741729 374.33024032 374.9491864 372.70940266 369.73027256 375.45299591 380.85312703 385.78849582 387.77920793 384.58516229 374.03132204 358.88476401 353.33904052 363.63294214 370.19870507 372.79598614 372.08532975 368.04117449 361.78441601 364.63985643 365.24657008 364.54028299 363.04836214] Ratio between bands 1.0 ``` 下图是用我们的示例数据绘制出来的布林带。中间锯齿状的细线描绘的是每天的收盘价,而 稍微粗一点也平滑一点的穿过它的曲线即为简单移动平均线。 ![](https://img.handsomemark.com/2020/03/08/15836784138576.jpg) ### 刚才做了些什么 我们在示例数据上计算得到了布林带。更重要的是,我们还了解了NumPy中fill函数的用法。该函数可以用一个指定的标量值填充数组,而这个标量值也是fill函数唯一的参数。