侧边栏壁纸
博主头像
AI研究僧

hycj89@163.com

  • 累计撰写 1,899 篇文章
  • 累计创建 179 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

使用python的pandas库计算布林带(Bollinger Band)

AI研究僧
2022-04-25 / 0 评论 / 0 点赞 / 867 阅读 / 410 字

本例代码使用pandas计算布林带,实验性的功能,实际计算中还是使用talib库计算即可。

废话不多说,直接放代码

import pandas as pd
import numpy as np
import pandas_datareader.data as web


def boll_bands(data, ndays):
    """
    计算布林带
    :param data: 股票的df格式数据
    :param ndays: 计算使用的简单移动均线周期
    :return:
    """
    ma = pd.Series(np.round(data['Close'].rolling(ndays).mean(), 2), name='MA%s'%ndays)  # 计算nday均线
    # pandas.std() 默认是除以n-1 的,即是无偏的,如果想和numpy.std() 一样有偏,需要加上参数ddof=0
    # 此处添加ddof的原因是wind和yahoo的计算均采用的有偏值进行的计算
    std = pd.Series(np.round(data['Close'].rolling(ndays).std(ddof=0), 2))  # 计算nday标准差,有偏
    b1 = ma + (2 * std)  # 此处的2就是Standard Deviations
    B1 = pd.Series(b1, name='UpperBollingerBand')
    data = data.join(ma)  # 上边不写name 这里报错
    data = data.join(B1)

    b2 = ma - (2 * std)
    B2 = pd.Series(b2, name='LowerBollingerBand')
    data = data.join(B2)

    return data


if __name__ == '__main__':
	# pandas调用yahoo财经的股票数据,此处以纳斯达克指数为例计算
    data = web.DataReader('^IXIC', data_source='yahoo', start='2/5/1971', end='1/14/2019')
    data = pd.DataFrame(data)  # 得到的数据中index直接就是Date
    n = 50
    NIFTY_BBANDS = boll_bands(data, n)
    print(NIFTY_BBANDS.loc[:, ['LowerBollingerBand', 'UpperBollingerBand']])
    print(NIFTY_BBANDS.columns)

代码中参数与雅虎财经中的参数对比
image-1650886000470
图中的period就是代码中的ndays,Standard Deviations就是代码中的b1 = ma + (2 * std) 这里的2,2倍标准差

博主关闭了所有页面的评论