官方文档:https://tushare.pro/document/2?doc_id=27
功能描述:获取股票日行情数据,包括高开低收、成交量、成交额等数据
返回限量:单次请求最大返回6000行,足够获取某天所有A股上市公司的日行情。如果单次请求一支股票的话,也相当于23年的历史行情。
接口权限:基础积分每分钟内可调取500次
说明:
1. 每个交易日16:00-17:00更新;
2. 为了更快将大量股票许多交易日的日线行情加载到变量中,本文作者建议先将历史数据依据
trade_date进行遍历获取数据后存储在本地,然后再在每日收盘后依据trade_date获取当日的行情并存储在本地,使用时从本地加载将会快非常多。而且也会减轻Tushare的服务器压力,从而更好为大家服务。
输入参数:
名称 | 类型 | 必选 | 描述 |
ts_code | str | N | 股票代码(支持多个股票同时提取,逗号分隔) |
trade_date | str | N | 交易日期(YYYYMMDD) |
start_date | str | N | 开始日期(YYYYMMDD) |
end_date | str | N | 结束日期(YYYYMMDD) |
start_date和end_date字段组成了一个时间段,该时间区间左闭右闭(两端日期都包含),是对trade_date的限定。
输出参数:
名称 | 类型 | 默认显示 | 描述 |
ts_code | str | Y | 股票代码 |
trade_date | str | Y | 交易日期 |
open | float | Y | 开盘价 |
high | float | Y | 最高价 |
low | float | Y | 最低价 |
close | float | Y | 收盘价 |
pre_close | float | Y | 昨收价【除权价】 |
change | float | Y | 涨跌额 |
pct_chg | float | Y | 涨跌幅(%) 【基于除权后的昨收计算的涨跌幅:(今收-除权昨收)/除权昨收 】 |
vol | float | Y | 成交量 (手) |
amount | float | Y | 成交额 (千元) |
ah_vol | float | N | 盘后成交量 (手) |
ah_amount | float | N | 盘后成交额 (千元) |
vol和amount字段并不含盘后固定价格成交的数据,盘后固定价格成交数据记录在ah_vol和ah_amount字段中。在下面示例1和示例2进行了较为详细的讲解;
pre_close是前一个交易日收盘价的除权参考价,而非前一个交易日实际的收盘价。该字段作为当日股票价格变动的基准,涨跌幅/额、涨跌停价等均是以此为基础计算的。除此之外该字段在计算复权因子、验证分红配股等除息除权事件中起到了关键作用。在下面示例4中进行了展示;
示例:
示例1:传入trade_date参数,获取某一交易日全市场股票日行情
2026/07/06 A股市场上交所和深交所实施盘后固定价格交易机制(北交所暂不实施),Tushare的日行情数据接口中也包含了该数据。用户之前使用该接口很可能并没有对此进行适配,为了向前兼容,Tushare将盘后成交量(ah_vol)和盘后成交额(ah_amount)从机制实施后的总体统计数据中独立出来,并默认不展示。由此,vol和amount和以前一样统计的是9:15~15:00之间的成交数据,而ah_vol和ah_amount则统计盘后固定价格成交数据。因此,今后获取日行情的所有字段时需要显式传入全部字段名。
import tushare as ts pro = ts.pro_api() # 显式传递所有字段 fields = 'ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,ah_vol,ah_amount' df = pro.daily(trade_date='20260710', fields=fields) df输出结果:
ts_code trade_date open high low close pre_close change pct_chg vol amount ah_vol ah_amount 0 000001.SZ 20260710 10.50 10.51 10.40 10.45 10.49 -0.04 -0.3813 957320.35 999718.24932 638.0 666.710 1 000002.SZ 20260710 2.99 3.14 2.95 3.11 2.98 0.13 4.3624 2160145.13 665318.28634 901.0 280.211 2 000004.SZ 20260710 0.45 0.46 0.45 0.46 0.42 0.04 9.5238 36305.89 1667.18694 1.0 0.046 3 000006.SZ 20260710 6.86 7.39 6.83 7.08 6.84 0.24 3.5088 329705.44 237936.45909 14.0 9.912 4 000007.SZ 20260710 10.85 11.42 10.80 11.10 10.85 0.25 2.3041 71319.00 79701.60300 1.0 1.110 ... ... ... ... ... ... ... ... ... ... ... ... ... ... 5516 920978.BJ 20260710 20.41 20.71 20.10 20.41 20.22 0.19 0.9397 15223.42 31064.70322 NaN NaN 5517 920981.BJ 20260710 40.40 41.36 35.90 36.21 40.21 -4.00 -9.9478 64446.83 245896.82885 NaN NaN 5518 920982.BJ 20260710 115.00 121.70 113.09 118.20 115.30 2.90 2.5152 13458.45 158464.55291 NaN NaN 5519 920985.BJ 20260710 4.55 4.79 4.48 4.72 4.52 0.20 4.4248 32469.12 15227.60896 NaN NaN 5520 920992.BJ 20260710 11.28 12.06 10.98 12.03 11.27 0.76 6.7436 20566.98 24084.52592 NaN NaN 5521 rows × 13 columns示例2:计算全天的成交数据
如需全天的成交额,则需要将ah_amount和amount相加,全天的成交量也是将ah_vol和vol相加
注意:北交所暂未实施盘后固定价交易机制,因而有些盘后数据为空值,相加的时候需要注意。
df['all_vol'] = df['vol'].add(df['ah_vol'], fill_value=0) df['all_amount'] = df['amount'].add(df['ah_amount'], fill_value=0) df[['ts_code', 'trade_date', 'vol', 'ah_vol', 'all_vol', 'amount', 'ah_amount', 'all_amount']]输出结果:
ts_code trade_date vol ah_vol all_vol amount ah_amount all_amount 0 000001.SZ 20260710 957320.35 638.0 957958.35 999718.24932 666.710 1.000385e+06 1 000002.SZ 20260710 2160145.13 901.0 2161046.13 665318.28634 280.211 6.655985e+05 2 000004.SZ 20260710 36305.89 1.0 36306.89 1667.18694 0.046 1.667233e+03 3 000006.SZ 20260710 329705.44 14.0 329719.44 237936.45909 9.912 2.379464e+05 4 000007.SZ 20260710 71319.00 1.0 71320.00 79701.60300 1.110 7.970271e+04 ... ... ... ... ... ... ... ... ... 5516 920978.BJ 20260710 15223.42 NaN 15223.42 31064.70322 NaN 3.106470e+04 5517 920981.BJ 20260710 64446.83 NaN 64446.83 245896.82885 NaN 2.458968e+05 5518 920982.BJ 20260710 13458.45 NaN 13458.45 158464.55291 NaN 1.584646e+05 5519 920985.BJ 20260710 32469.12 NaN 32469.12 15227.60896 NaN 1.522761e+04 5520 920992.BJ 20260710 20566.98 NaN 20566.98 24084.52592 NaN 2.408453e+04 5521 rows × 8 columns示例3、传入证券代码和起始日期
如果要查看某支股票某天以来的日行情,可以指定start_date而不指定end_date(或者将end_date指定为今天,效果也一样)。注意,daily等接口返回的数据是按照日期倒序的。
df = pro.daily(ts_code='000001.SZ', start_date='20260101', fields=fields) df输出结果:
ts_code trade_date open high low close pre_close change pct_chg vol amount ah_vol ah_amount 0 000001.SZ 20260710 10.50 10.51 10.40 10.45 10.49 -0.04 -0.3813 957320.35 9.997182e+05 638.0 666.710 1 000001.SZ 20260709 10.55 10.59 10.43 10.49 10.60 -0.11 -1.0377 747191.01 7.853871e+05 288.0 302.112 2 000001.SZ 20260708 10.44 10.63 10.34 10.60 10.47 0.13 1.2416 950760.22 1.002625e+06 410.0 434.600 3 000001.SZ 20260707 10.46 10.51 10.35 10.47 10.50 -0.03 -0.2857 805221.15 8.404658e+05 423.0 442.881 4 000001.SZ 20260706 10.25 10.52 10.22 10.50 10.29 0.21 2.0408 1061048.63 1.103903e+06 46.0 48.300 ... ... ... ... ... ... ... ... ... ... ... ... ... ... 119 000001.SZ 20260109 11.53 11.53 11.44 11.46 11.51 -0.05 -0.4344 983390.04 1.128077e+06 NaN NaN 120 000001.SZ 20260108 11.64 11.65 11.49 11.51 11.64 -0.13 -1.1168 1100085.11 1.268647e+06 NaN NaN 121 000001.SZ 20260107 11.66 11.82 11.62 11.64 11.67 -0.03 -0.2571 966236.24 1.131166e+06 NaN NaN 122 000001.SZ 20260106 11.50 11.68 11.48 11.67 11.50 0.17 1.4783 1304648.42 1.512912e+06 NaN NaN 123 000001.SZ 20260105 11.42 11.51 11.41 11.50 11.41 0.09 0.7888 875491.18 1.003479e+06 NaN NaN 124 rows × 13 columns示例4:传递股票代码、起始日期和结束日期
在没有将日行情数据下载到本地的情况下,直接使用daily接口查看某支股票历史上一段时间的日行情,除了要指定start_date外还要指定end_date。日期区间是左闭右闭的。
本示例除了演示如何查看某支股票历史上一段时间的日行情外,还演示了
pre_close的深刻理解。观察20251015的pre_close和20251014的close,发现这两个不一样,而其余pre_close都和上一个交易日的close是一样的。这明确说明了pre_close字段作为“昨收价”,并非“前一个交易日真实的(名义)收盘价”,而是考虑了除权除息的“上一个交易日收盘价的除权参考价”。
df = pro.daily(ts_code='000001.SZ', start_date='20251010', end_date='20251020', fields=fields) df[['ts_code', 'trade_date', 'close', 'pre_close']]输出结果:
ts_code trade_date close pre_close 0 000001.SZ 20251020 11.42 11.40 1 000001.SZ 20251017 11.40 11.54 2 000001.SZ 20251016 11.54 11.40 3 000001.SZ 20251015 11.40 11.33 4 000001.SZ 20251014 11.57 11.40 5 000001.SZ 20251013 11.40 11.43 6 000001.SZ 20251010 11.43 11.40示例5:仅传递股票代码
如果不考虑盘后固定价格交易数据,仅传入股票代码(ts_code)可获得该股票最近超过23年的日行情数据。
df = pro.daily(ts_code='000001.SZ') df输出结果:
ts_code trade_date open high low close pre_close change pct_chg vol amount 0 000001.SZ 20260710 10.50 10.51 10.40 10.45 10.49 -0.04 -0.3813 957320.35 9.997182e+05 1 000001.SZ 20260709 10.55 10.59 10.43 10.49 10.60 -0.11 -1.0377 747191.01 7.853871e+05 2 000001.SZ 20260708 10.44 10.63 10.34 10.60 10.47 0.13 1.2416 950760.22 1.002625e+06 3 000001.SZ 20260707 10.46 10.51 10.35 10.47 10.50 -0.03 -0.2857 805221.15 8.404658e+05 4 000001.SZ 20260706 10.25 10.52 10.22 10.50 10.29 0.21 2.0408 1061048.63 1.103903e+06 ... ... ... ... ... ... ... ... ... ... ... ... 5995 000001.SZ 20010227 14.25 14.28 14.05 14.10 14.21 -0.11 -0.7700 23521.05 3.317735e+04 5996 000001.SZ 20010226 14.15 14.36 14.14 14.21 14.12 0.09 0.6400 18624.35 2.649251e+04 5997 000001.SZ 20010223 13.80 14.12 13.80 14.12 13.86 0.26 1.8800 18374.23 2.555811e+04 5998 000001.SZ 20010222 13.90 14.00 13.84 13.86 14.00 -0.14 -1.0000 34421.42 4.785641e+04 5999 000001.SZ 20010221 14.25 14.25 13.95 14.00 14.27 -0.27 -1.8900 36539.27 5.127413e+04 6000 rows × 11 columns示例6:传递多个股票代码
如果仅想获取几支特定股票的行情,可以向ts_code传入以英文逗号分割的股票代码列表。
df = pro.daily(trade_date='20260710', ts_code='000001.SZ,600519.SH,600036.SH,000002.SZ') df输出结果:
ts_code trade_date open high low close pre_close change pct_chg vol amount 0 000001.SZ 20260710 10.50 10.51 10.40 10.45 10.49 -0.04 -0.3813 957320.35 9.997182e+05 1 000002.SZ 20260710 2.99 3.14 2.95 3.11 2.98 0.13 4.3624 2160145.13 6.653183e+05 2 600036.SH 20260710 36.61 36.92 36.33 36.88 36.55 0.33 0.9029 793771.53 2.911441e+06 3 600519.SH 20260710 1182.20 1204.98 1170.28 1204.98 1182.19 22.79 1.9278 52212.55 6.223344e+06示例7:循环调用
实际使用数据的时候我们往往需要很多天很多股票的数据,由于接口每次仅返回6000条数据,故而我们需要使用到循环调用接口。我们推荐依据trade_date进行循环调用,理由是以前十几年的数据存储在本地调用仅需2s左右,新的一天数据调用一次接口也仅需要零点几秒。以下演示按照日期调用接口的方式。
示例代码中使用了给定的日期列表,实战中可使用Tushare的交易日历(
trade_cal)接口获取需要的交易日列表。
dates = ['20260706', '20260707', '20260708', '20260709', '20260710'] # 显式指定返回的字段 fields = 'ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,ah_vol,ah_amount' # 这里先用list将结果存起来,等所有数据下载完毕之后再一次性合并 # list添加的DataFrame的时候,添加进去的实际上是指针,并没有数据的转移,会很快 # 但如果每获得数据时就进行DataFrame的合并,可能会导致更多额外空间的分配 lst_data = [] for d in dates: df = pro.daily(trade_date=d) lst_data.append(df) df_data = pd.concat(lst_data, ignore_index=True) df_data输出结果:
ts_code trade_date open high low close pre_close change pct_chg vol amount 0 000001.SZ 20260706 10.25 10.52 10.22 10.50 10.29 0.21 2.0408 1061048.63 1.103903e+06 1 000002.SZ 20260706 3.08 3.11 3.05 3.07 3.09 -0.02 -0.6472 931973.11 2.868322e+05 2 000004.SZ 20260706 0.45 0.50 0.41 0.41 0.45 -0.04 -8.8889 69960.73 3.103588e+03 3 000006.SZ 20260706 7.41 7.42 7.08 7.09 7.41 -0.32 -4.3185 210631.59 1.516639e+05 4 000007.SZ 20260706 12.10 13.31 12.10 12.88 12.10 0.78 6.4463 177208.00 2.303126e+05 ... ... ... ... ... ... ... ... ... ... ... ... 27588 920978.BJ 20260710 20.41 20.71 20.10 20.41 20.22 0.19 0.9397 15223.42 3.106470e+04 27589 920981.BJ 20260710 40.40 41.36 35.90 36.21 40.21 -4.00 -9.9478 64446.83 2.458968e+05 27590 920982.BJ 20260710 115.00 121.70 113.09 118.20 115.30 2.90 2.5152 13458.45 1.584646e+05 27591 920985.BJ 20260710 4.55 4.79 4.48 4.72 4.52 0.20 4.4248 32469.12 1.522761e+04 27592 920992.BJ 20260710 11.28 12.06 10.98 12.03 11.27 0.76 6.7436 20566.98 2.408453e+04 27593 rows × 11 columns示例8:其他参数
对于上市比较早的股票,由于日行情数据大于6000条,仅传递股票代码是不能够获取所有日行情数据的,但一般也不会需要这么久的日行情。如果真要获取超过6000条数据的日行情,则可以通过加上offset和limit字段进行分页调取。
import pandas as pd df1 = pro.daily(ts_code='000001.SZ', limit=6000, offset=0) df2 = pro.daily(ts_code='000001.SZ', limit=6000, offset=6000) df_all = pd.concat([df1, df2], ignore_index=True) df_all输出结果:
ts_code trade_date open high low close pre_close change pct_chg vol amount 0 000001.SZ 20260710 10.50 10.51 10.40 10.45 10.49 -0.04 -0.3813 957320.35 9.997182e+05 1 000001.SZ 20260709 10.55 10.59 10.43 10.49 10.60 -0.11 -1.0377 747191.01 7.853871e+05 2 000001.SZ 20260708 10.44 10.63 10.34 10.60 10.47 0.13 1.2416 950760.22 1.002625e+06 3 000001.SZ 20260707 10.46 10.51 10.35 10.47 10.50 -0.03 -0.2857 805221.15 8.404658e+05 4 000001.SZ 20260706 10.25 10.52 10.22 10.50 10.29 0.21 2.0408 1061048.63 1.103903e+06 ... ... ... ... ... ... ... ... ... ... ... ... 8384 000001.SZ 19910410 47.56 47.56 47.56 47.56 47.80 -0.24 -0.5000 15.00 7.100000e+01 8385 000001.SZ 19910409 47.80 47.80 47.80 47.80 48.04 -0.24 -0.5000 4.00 1.900000e+01 8386 000001.SZ 19910408 48.04 48.04 48.04 48.04 48.52 -0.48 -0.9900 2.00 1.000000e+01 8387 000001.SZ 19910405 48.52 48.52 48.52 48.52 48.76 -0.24 -0.4900 2.00 1.000000e+01 8388 000001.SZ 19910404 48.76 48.76 48.76 48.76 49.00 -0.24 -0.4900 3.00 1.500000e+01 8389 rows × 11 columns说明:
本文说明
本文旨在对Tushare的A股日线行情daily数据接口进行介绍,提供更多参考示例和使用说明。
本接口可以获取股票日行情数据,包括高开低收、成交量、成交额等数据。本文介绍了接口不同参数一般的使用方法,并推荐了实战中将历史行情按照trade_date循环遍历获取后存储在本地,之后再在每日更新。本文还对pre_close字段、盘后固定价格成交数据进行了强调。
本文目的是为了让用户和AIGC工具能够更便捷、准确地使用该接口。大家在使用过程中遇到什么问题和建议可在线留言,作者会进行数据探索将结果更新到文章中,并将建议反馈给Tushare团队。本文另一个目的也是为了聚集大家的智慧以创建“我为人人,人人为我”的共创氛围。