2025年6月5日 星期四 乙巳(蛇)年 三月初九 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python 计算布林带

时间:12-14来源:作者:点击数:17
CDSY,CDSY.XYZ

Python 计算布林带

布林线指标,即BOLL指标,其英文全称是“Bollinger Bands”,布林线(BOLL)由约翰·布林先生创造,其利用统计原理,求出股价的标准差及其信赖区间,从而确定股价的波动范围及未来走势,利用波带显示股价的安全高低价位,因而也被称为布林带。其上下限范围不固定,随股价的滚动而变化。

  • # coding: utf-8
  • # 作者:Wizard <github.com/wizardforcel>
  • import numpy as np
  • from matplotlib import pyplot as plt
  • import sys
  • # 获取数据
  • # 因为没找到数据源,所以直接随机生成了
  • series = np.random.rand(100) * 10 + 10
  • ser_len = len(series)
  • # 获取窗口大小,默认为 5
  • win_sz = 5 if len(sys.argv) < 2 else sys.argv[1]
  • print u'窗口大小: ', win_sz
  • # 计算权重,sma_weight 为简单滑动
  • # ema_weight 为指数滑动
  • sma_weight = np.ones(win_sz).astype(float) / win_sz
  • ema_weight = np.exp(np.linspace(-1, 0, win_sz))
  • ema_weight /= ema_weight.sum()
  • # 手动计算简单/指数滑动平均,以及滑动标准差
  • # 滑动平均就是当天和前 N - 1 天的(加权)均值
  • # 其中 N 是窗口大小,标准差与之类似
  • sma = []
  • ema = []
  • mstd = []
  • for i in xrange(win_sz - 1, ser_len):
  • ser_range = series[i - (win_sz - 1): i + 1]
  • avg = (ser_range * sma_weight).sum()
  • sma.append(avg)
  • avg = (ser_range * ema_weight).sum()
  • ema.append(avg)
  • std = ser_range.std()
  • mstd.append(std)
  • sma = np.asarray(sma)
  • mstd = np.asarray(mstd)
  • # 上布林带是简单滑动均值加上两个滑动标准差
  • # 下布林带是简单滑动均值减去两个滑动标准差
  • upper = sma + 2 * mstd
  • lower = sma - 2 * mstd
  • # 要注意横轴从 N - 1 开始
  • ser_slice = series[win_sz - 1:]
  • x = np.arange(win_sz - 1, ser_len)
  • print 'x: ', x[:5]
  • # 绘制函数
  • plt.plot(x, ser_slice, 'b', label='series')
  • print u'序列: ', ser_slice[:5]
  • plt.plot(x, sma, 'g', label='sma')
  • print u'简单滑动均值: ', sma[:5]
  • plt.plot(x, ema, 'r', label='ema')
  • print u'指数滑动均值: ', ema[:5]
  • plt.plot(x, upper, 'grey', label='upper bolling')
  • plt.plot(x, lower, 'grey', label='lower bolling')
  • plt.legend()
  • plt.show()
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐