量化交易系统开发-实时行情自动化交易-4.1.4.A股布林带(BOLL)实现

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。

接下来继续说说A股布林带(Bollinger Bands)实现。

布林带(Bollinger Bands)是一种用于衡量价格波动性和判断超买、超卖状态的技术指标,广泛应用于 A 股市场的技术分析。布林带由三条线组成:中轨(价格的移动平均线)、上轨(中轨加上一定倍数的标准差)和下轨(中轨减去一定倍数的标准差)。以下是通过 Python 和 Tushare 实现 A 股市场布林带的代码示例。

1. 布林带的基本组成
  • 中轨(Middle Band):价格的移动平均线,通常为20日简单移动平均线(SMA)。

  • 上轨(Upper Band):中轨加上价格标准差的倍数,通常为2倍的标准差。

  • 下轨(Lower Band):中轨减去价格标准差的倍数,通常为2倍的标准差。

2. 获取 A 股数据

使用 Tushare 获取 A 股的股票数据,确保你有 Tushare 的 API token。

复制代码
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt

# 设置 Tushare token
ts.set_token('your_tushare_token')
pro = ts.pro_api()

# 获取 A 股的日线数据(以贵州茅台为例)
def get_a_stock_data(stock_code, start_date, end_date):
    df = pro.daily(ts_code=stock_code, start_date=start_date, end_date=end_date)
    df = df[['trade_date', 'close']]
    df['trade_date'] = pd.to_datetime(df['trade_date'])
    df.set_index('trade_date', inplace=True)
    df = df.sort_index()
    return df

# 获取贵州茅台(600519.SH)的日线数据
stock_code = '600519.SH'
start_date = '20200101'
end_date = '20221231'
stock_data = get_a_stock_data(stock_code, start_date, end_date)
3. 计算布林带指标
复制代码
# 计算布林带指标
def calculate_bollinger_bands(data, window=20, num_std_dev=2):
    """
    计算布林带指标。

    :param data: 股票数据的 pandas DataFrame,必须包含 'close' 列
    :param window: 移动平均线的窗口大小,默认为 20
    :param num_std_dev: 标准差的倍数,通常为 2
    :return: 包含布林带指标的 DataFrame
    """
    # 计算移动平均线(中轨)
    data['middle_band'] = data['close'].rolling(window=window).mean()
    
    # 计算标准差
    data['std_dev'] = data['close'].rolling(window=window).std()
    
    # 计算上轨和下轨
    data['upper_band'] = data['middle_band'] + (data['std_dev'] * num_std_dev)
    data['lower_band'] = data['middle_band'] - (data['std_dev'] * num_std_dev)
    
    return data

# 计算贵州茅台的布林带指标
stock_data = calculate_bollinger_bands(stock_data)

# 打印结果
data[['close', 'middle_band', 'upper_band', 'lower_band']]

# 绘制布林带图表
plt.figure(figsize=(12, 8))
plt.plot(stock_data.index, stock_data['close'], label='Close Price', color='blue')
plt.plot(stock_data.index, stock_data['middle_band'], label='Middle Band (20 SMA)', color='red')
plt.plot(stock_data.index, stock_data['upper_band'], label='Upper Band', color='green')
plt.plot(stock_data.index, stock_data['lower_band'], label='Lower Band', color='orange')
plt.fill_between(stock_data.index, stock_data['upper_band'], stock_data['lower_band'], color='gray', alpha=0.2)
plt.title(f'{stock_code} Bollinger Bands')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid()
plt.show()
4. 代码解释
  • 获取数据 :我们使用 Tushare 的 pro.daily 接口获取贵州茅台的日线数据,数据包括收盘价。

  • 计算移动平均线(中轨)middle_band 是价格的简单移动平均线,用于作为布林带的中心基准线,通常为20日的移动平均线。

  • 计算标准差std_dev 计算的是收盘价的标准差,用于衡量价格的波动性。

  • 计算上轨和下轨upper_bandlower_band 分别表示中轨加减2倍标准差的结果,用于确定价格的波动范围。

5. 使用布林带的交易信号
  • 买入信号:当价格跌破下轨时,表示市场可能处于超卖状态,价格有可能反弹,可以考虑买入。

  • 卖出信号:当价格突破上轨时,表示市场可能处于超买状态,价格有可能回调,可以考虑卖出。

  • 中轨作为趋势参考:价格在中轨之上运行,通常表示市场处于上涨趋势;价格在中轨之下运行,通常表示市场处于下跌趋势。

6. 总结

布林带(Bollinger Bands)是 A 股市场中常用的技术分析工具,通过计算价格的移动平均线和标准差来衡量价格的波动性和相对于均值的状态。布林带的上轨和下轨为交易者提供了买卖信号,帮助判断市场是否处于超买或超卖状态。布林带常与其他技术指标结合使用,以增加交易信号的可靠性和准确性。

相关推荐
高效匠人5 分钟前
强化学习-深度学习和强化学习领域
人工智能·深度学习
聚客AI7 分钟前
AI大模型应用实战之GPU加速实战:手把手教你配置TensorFlow/PyTorch深度学习环境
人工智能·python·掘金·日新计划
机器之心8 分钟前
冲击自回归,扩散模型正在改写下一代通用模型范式
人工智能
疯狂的小强呀11 分钟前
基于langchain的简单RAG的实现
python·langchain·rag检索增强
Cloud Traveler17 分钟前
智能测试新范式:GenAI 与 Playwright MCP 如何重塑 QA 流程
人工智能
zdy126357468819 分钟前
python第31天打卡
开发语言·python
别烦姐在搞大模型21 分钟前
一文带你 "看见" MCP 的过程,彻底理解 MCP 的概念
人工智能
用户7112839284728 分钟前
LangChain(三) LCEL
人工智能·langchain
愚农搬码40 分钟前
SpringBoot集成Milvus向量库实现CRUD
数据库·人工智能
AI大模型知识43 分钟前
如何微调推理大模型?以Qwen3/DeepSeek-R1为例
人工智能·llm