使用 Python 和 Akshare 绘制布林带技术分析

130 阅读2分钟

在量化交易中,布林带(Bollinger Bands)是一种广泛使用的技术分析工具,它能够帮助我们识别市场的超买和超卖情况。本文将介绍如何使用 Python 的 akshare 库获取 A 股数据,并结合 mplfinance 库绘制带有布林带的 K 线图。

1. 安装依赖

在开始之前,请确保已安装 aksharemplfinancepandasmatplotlib,可以使用以下命令进行安装:

pip install akshare mplfinance pandas matplotlib

2. 获取股票数据

akshare 是一个强大的金融数据接口库,我们可以使用 stock_zh_a_hist 方法获取指定股票的历史数据。例如,我们以 300750(宁德时代) 为例:

import akshare as ak
import pandas as pd

df = ak.stock_zh_a_hist(symbol="300750", period="daily", start_date="20241101", end_date='20250218', adjust="")

该数据包含了日期、开盘价、收盘价、最高价、最低价、成交量等信息。

3. 数据预处理

我们需要筛选相关列,并调整格式,以便后续绘图:

# 选择所需列
df = df.iloc[:, [0, 2, 3, 4, 5, 6]]
df['日期'] = pd.to_datetime(df['日期'])

# 调整列名
df.columns = ['Date', 'Open', 'Close', 'High', 'Low', 'Volume']
df.set_index('Date', inplace=True)

4. 计算布林带

布林带由中轨线(均线)、上轨线(均线 + 标准差 * 2)、下轨线(均线 - 标准差 * 2)组成,计算方法如下:

def Boll(data, n, m):
    mid = data['Close'].rolling(n).mean()
    upper = mid + m * data['Close'].rolling(n).std()
    lower = mid - m * data['Close'].rolling(n).std()
    return mid, upper, lower

if len(df) >= 20:
    df['mid'], df['upper'], df['lower'] = Boll(df, 20, 2)
else:
    raise ValueError("数据量不足 20,无法计算布林带")

5. 绘制带布林带的 K 线图

使用 mplfinance 绘制 K 线图,并叠加布林带:

import mplfinance as mpf
import matplotlib.pyplot as plt

apds = [
    mpf.make_addplot(df['upper'], color='red', linestyle='dashed'),
    mpf.make_addplot(df['mid'], color='blue', linestyle='dashed'),
    mpf.make_addplot(df['lower'], color='green', linestyle='dashed')
]

mpf.plot(
    df, type='candle', style='charles',
    title='Stock 300750 with Bollinger Bands',
    ylabel='Price', volume=True, addplot=apds,
    mav=(5, 10)
)

plt.show()

6. 结论

通过本文的示例,演示了如何使用 akshare 获取 A 股数据,并使用 mplfinance 绘制 K 线图和布林带。布林带是一种有效的技术指标,可用于分析市场趋势和波动性。