如何使用AKShare获取和分析股票日线行情数据?

企业微信

AKShare获取股票日线数据的核心函数

AKShare的stock_zh_a_hist函数用于获取A股历史行情,参数包括symbol(股票代码)、period(周期)、start_dateend_dateadjust(复权类型)。返回DataFrame包含日期、开盘、收盘、最高、最低、成交量等字段。

代码示例:

如何使用AKShare获取和分析股票日线行情数据?


import akshare as ak

df = ak.stock_zh_a_hist(symbol='000001', period='daily', start_date='20230101', end_date='20231231', adjust='qfq')

print(df.head())

输出数据包含14列,如日期、股票代码、开盘、收盘、最高、最低、涨跌幅、换手率等。需注意,列名以中文输出,需进行标准化处理。

数据清洗与预处理步骤

获取原始数据后,需执行以下清洗步骤:

  • 检查并处理缺失值,删除或填充NaN行。

  • 将列名转换为英文或统一格式,便于后续分析。

  • 将日期列转换为datetime类型,并设为索引,便于时间序列操作。

  • 按日期排序,确保数据时间顺序正确。

预处理代码:


import pandas as pd

df.columns = ['date', 'code', 'open', 'close', 'high', 'low', 'volume', 'amount', 'amplitude', 'pct_change', 'change', 'turnover']

df['date'] = pd.to_datetime(df['date'])

df = df.set_index('date').sort_index()

df = df.dropna(subset=['open', 'close', 'high', 'low', 'volume'])

计算常用技术指标

技术指标是股票分析的基础,常计算移动平均线(MA)、指数平滑异同移动平均线(MACD)、相对强弱指数(RSI)等。

移动平均线(MA)

使用pandas的rolling函数计算5日、20日、60日均线。


df['MA5'] = df['close'].rolling(window=5).mean()

df['MA20'] = df['close'].rolling(window=20).mean()

MACD指标

MACD由快线(DIF)、慢线(DEA)和柱状图构成,可自定义函数计算。


def MACD(df, fast=12, slow=26, signal=9):

    df['EMA_fast'] = df['close'].ewm(span=fast, adjust=False).mean()

    df['EMA_slow'] = df['close'].ewm(span=slow, adjust=False).mean()

    df['DIF'] = df['EMA_fast'] - df['EMA_slow']

    df['DEA'] = df['DIF'].ewm(span=signal, adjust=False).mean()

    df['MACD_bar'] = 2 * (df['DIF'] - df['DEA'])

    return df

df = MACD(df)

RSI指标

相对强弱指数衡量价格变动速度与幅度,计算周期常用14日。


def RSI(df, period=14):

    delta = df['close'].diff()

    gain = delta.clip(lower=0)

    loss = -delta.clip(upper=0)

    avg_gain = gain.rolling(window=period).mean()

    avg_loss = loss.rolling(window=period).mean()

    rs = avg_gain / avg_loss

    df['RSI'] = 100 - (100 / (1 + rs))

    return df

可视化分析行情趋势

通过图表直观观察价格走势和指标信号,可使用matplotlib或plotly绘制。


import matplotlib.pyplot as plt

plt.figure(figsize=(12,8))

plt.plot(df.index, df['close'], label='Close Price')

plt.plot(df.index, df['MA5'], label='MA5')

plt.plot(df.index, df['MA20'], label='MA20')

plt.legend()

plt.title('Stock Price and Moving Averages')

plt.show()

构建简单交易策略

基于技术指标构建策略,如金叉买入、死叉卖出。


df['Position'] = 0

df.loc[df['MA5'] > df['MA20'], 'Position'] = 1

df['Signal'] = df['Position'].diff()

buy_signals = df[df['Signal'] == 1]

sell_signals = df[df['Signal'] == -1]

通过回测评估策略绩效,计算收益率、最大回撤等。

数据更新与批量处理

使用循环批量获取多只股票数据,并更新到本地文件或数据库。


stock_list = ['000001', '600000', '000002']

for code in stock_list:

    df_new = ak.stock_zh_a_hist(symbol=code, period='daily', start_date='20240101', end_date='20240301', adjust='qfq')

    # 处理并保存数据

常见问题与注意事项

  • AKShare接口可能变动,需定期更新库版本。

  • 注意限流问题,大批量请求时可添加延时。

  • 数据字段中文,需根据实际返回调整列名。

进阶扩展:获取实时行情与财务数据

AKShare也支持实时行情获取,如stock_zh_a_spot_em,并可结合财务指标进行基本面分析。

通过AKShare高效获取股票日线数据,结合Python数据处理与可视化,可快速开展量化分析与策略开发。上述步骤覆盖从数据获取到策略生成的主流程,为深入探索市场规律提供工具基础。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/AKShare-gupiao-rixian-hangqing-395.html