金融数据---获取股票日线数据

发布于:2025-09-14 ⋅ 阅读:(32) ⋅ 点赞:(0)

获取股票日线的数据方式有很多,包括东方财富,同花顺,tushare,这里我们就利用东方财富的数据,是免费的开源获取,第一步先安装akshare,pip安装就可以

py -m pip install akshare

Akshare 股票数据获取函数说明

函数概述

以下代码使用 Akshare 库获取中国 A 股市场的历史日线数据,并以 DataFrame 格式输出结果。

import akshare as ak

# 定义股票代码和时间范围
symbol = 'sh000001'  # 上证指数代码
start_date = '20240101'  # 开始日期:2024年1月1日
end_date = '20500101'  # 结束日期:2050年1月1日(实际获取到最新可用数据)

# 获取股票历史数据
df = ak.stock_zh_a_daily(symbol=symbol, start_date=start_date, end_date=end_date)

# 打印数据框
print(df)
参数详细说明

1. 股票代码 (symbol)

  • 格式:市场代码 + 股票代码
  • 示例sh000001(上证指数)
  • 常见市场前缀
    • sh:上海证券交易所
    • sz:深圳证券交易所
    • bj:北京证券交易所

2. 时间范围参数

  • start_date:数据开始日期,格式为 YYYYMMDD
  • end_date:数据结束日期,格式为 YYYYMMDD
  • 注意:如果结束日期设置为未来日期,函数会自动返回到最新可用数据

函数返回值

ak.stock_zh_a_daily() 函数返回一个 Pandas DataFrame,包含以下列:

列名 说明 数据类型
date 交易日期 datetime64[ns]
open 开盘价 float64
high 最高价 float64
low 最低价 float64
close 收盘价 float64
volume 成交量 float64
outstanding_share 流通股本 float64
turnover 换手率 float64

完整示例代码

import akshare as ak
import pandas as pd

def get_stock_data(symbol, start_date, end_date):
    """
    获取指定股票代码在指定时间范围内的日线数据
    
    参数:
    symbol (str): 股票代码,如 'sh000001'
    start_date (str): 开始日期,格式 'YYYYMMDD'
    end_date (str): 结束日期,格式 'YYYYMMDD'
    
    返回:
    pandas.DataFrame: 包含股票日线数据的DataFrame
    """
    try:
        # 获取股票数据
        df = ak.stock_zh_a_daily(symbol=symbol, start_date=start_date, end_date=end_date)
        
        # 重置索引,使日期成为一列
        df.reset_index(inplace=True)
        
        print(f"成功获取 {symbol} 从 {start_date} 到 {end_date} 的数据")
        print(f"数据形状: {df.shape}")
        
        return df
        
    except Exception as e:
        print(f"获取数据时出错: {e}")
        return None

# 使用示例
if __name__ == "__main__":
    # 设置参数
    symbol = 'sh000001'  # 上证指数
    start_date = '20240101'  # 开始日期
    end_date = '20500101'  # 结束日期(实际获取到最新数据)
    
    # 获取数据
    stock_data = get_stock_data(symbol, start_date, end_date)
    
    # 显示数据前几行
    if stock_data is not None:
        print("\n数据前5行:")
        print(stock_data.head())
        
        print("\n数据基本信息:")
        print(stock_data.info())

注意事项

  1. 数据延迟:Akshare 的数据通常有15分钟延迟,实时数据可能需要权限或付费
  2. 日期格式:必须使用 YYYYMMDD 格式,例如 20240101 表示2024年1月1日
  3. 数据范围:结束日期设置为未来日期时,会自动获取到最新可用数据
  4. 错误处理:添加了异常处理,防止因网络问题或参数错误导致程序崩溃
  5. 数据完整性:返回的数据包含基本的日线信息,适合大多数技术分析需求

输出结果

           date     open     high      low    close        volume        amount  outstanding_share  turnover
0    2024-01-02  2972.78  2976.27  2962.28  2962.28  3.041418e+10  3.459507e+11       1.940555e+10  1.567293
1    2024-01-03  2957.11  2971.28  2953.29  2967.25  2.854559e+10  3.210184e+11       1.940555e+10  1.471002
2    2024-01-04  2965.51  2966.68  2936.64  2954.35  2.649809e+10  2.962913e+11       1.940555e+10  1.365491
3    2024-01-05  2949.82  2967.97  2916.72  2929.18  3.010402e+10  3.259170e+11       1.940555e+10  1.551310
4    2024-01-08  2923.46  2924.46  2887.54  2887.54  2.702751e+10  2.907306e+11       1.940555e+10  1.392772
..          ...      ...      ...      ...      ...           ...           ...                ...       ...
407  2025-09-05  3761.88  3817.16  3745.31  3812.51  6.262234e+10  9.790617e+11       1.940560e+10  3.227024
408  2025-09-08  3811.67  3833.14  3803.60  3826.84  6.600669e+10  1.025884e+12       1.940560e+10  3.401425
409  2025-09-09  3816.66  3834.67  3791.72  3807.29  6.002394e+10  9.177953e+11       1.940560e+10  3.093124
410  2025-09-10  3806.58  3827.00  3794.06  3812.22  5.345398e+10  8.211136e+11       1.940560e+10  2.754565
411  2025-09-11  3806.06  3875.31  3796.44  3875.31  6.170129e+10  1.016794e+12       1.940560e+10  3.179561

[412 rows x 9 columns]