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

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数据处理与可视化,可快速开展量化分析与策略开发。上述步骤覆盖从数据获取到策略生成的主流程,为深入探索市场规律提供工具基础。