Tushare 投研第一步:日线行情与复权(数据探索版)

📅 2026/7/26 18:01:29
Tushare 投研第一步:日线行情与复权(数据探索版)
如需注册Tushare使用金融数据,可使用本文作者邀请链接(tushare.pro/weborder/#/login?reg=5),新注册用户可获得100积分。涉及到的接口:A股日线行情(daily)、每日指标(daily_basic)、复权因子(adj_factor)、指数日线行情(index_daily)、pro.query、交易日历(trade_cal)、通用行情接口(pro_bar)import config as cfg import tushare as ts import pandas as pd from datetime import datetime import os ts.set_token(cfg.TUSHARE_TOKEN) # 这里cfg.TUSHARE_TOKEN替换为你自己Tushare的token pro = ts.pro_api()一、A股日线行情(daily)、每日指标(daily_basic)、复权因子(adj_factor)、指数日线行情(index_daily)诸如A股日线行情(daily)、每日指标(daily_basic)、复权因子(adj_factor)等以股票代码(ts_code)和日期(trade_date)为键的接口(底层为数据表)一般都会提供ts_code、trade_date、start_date、end_date这四个参数。一般这四个参数都是可选的,如果都不传入(复权因子接口需要从ts_code和trade_date中两选一必须传入)则会从全量数据中获取6000条记录返回(目前是这么定义的)。按照我以往的经验,有三种情况最为常见:1、仅传入trade_date;2、传入ts_code和start_date;3、传入ts_code、start_date和end_date。我们在初步了解数据的时候一般会选择前两者,情况1是了解最近一个交易日市场上所有股票的行情,而情况2则是了解某一支具体的股票最近走势如何。1.1 仅传入交易日期# pct_chg 是百分数, vol 单位为手, amount 单位为千元 df = pro.daily(trade_date='20260707') df输出结果:ts_code trade_date open high low close pre_close change pct_chg vol amount 0 000001.SZ 20260707 10.46 10.51 10.35 10.47 10.50 -0.03 -0.2857 805221.15 840465.77805 1 000002.SZ 20260707 3.06 3.06 2.97 2.99 3.07 -0.08 -2.6059 1107307.22 332291.10494 2 000004.SZ 20260707 0.41 0.44 0.37 0.40 0.41 -0.01 -2.4390 77413.23 3102.42623 3 000006.SZ 20260707 7.00 7.08 6.75 6.80 7.09 -0.29 -4.0903 172966.75 118943.48775 4 000007.SZ 20260707 13.50 13.50 11.59 11.59 12.88 -1.29 -10.0155 167955.50 203058.41400 ... ... ... ... ... ... ... ... ... ... ... ... 5512 920978.BJ 20260707 21.55 22.30 21.41 21.51 21.63 -0.12 -0.5548 18195.31 39580.14844 5513 920981.BJ 20260707 46.24 46.79 42.76 42.87 45.55 -2.68 -5.8836 40377.43 177832.78056 5514 920982.BJ 20260707 127.40 128.55 122.34 123.09 127.95 -4.86 -3.7984 7605.70 94962.51021 5515 920985.BJ 20260707 4.80 4.88 4.72 4.76 4.80 -0.04 -0.8333 16494.85 7913.11432 5516 920992.BJ 20260707 11.68 11.85 11.50 11.51 11.72 -0.21 -1.7918 7472.57 8711.59352 5517 rows × 11 columns1.2 传入证券代码和起始日期# 注意,daily等表返回的数据是按照日期倒序的 df = pro.daily(ts_code='000001.SZ', start_date='20260701') df输出结果:ts_code trade_date open high low close pre_close change pct_chg vol amount 0 000001.SZ 20260707 10.46 10.51 10.35 10.47 10.50 -0.03 -0.2857 805221.15 8.404658e+05 1 000001.SZ 20260706 10.25 10.52 10.22 10.50 10.29 0.21 2.0408 1061048.63 1.103903e+06 2 000001.SZ 20260703 10.29 10.40 10.18 10.29 10.28 0.01 0.0973 863326.64 8.887894e+05 3 000001.SZ 20260702 10.20 10.36 10.17 10.28 10.16 0.12 1.1811 1004748.67 1.030886e+06 4 000001.SZ 20260701 10.05 10.18 9.99 10.16 10.05 0.11 1.0945 906889.82 9.158385e+051.3 传递股票代码、起始日期和结束日期本案例演示从一个股票的历史行情中理解pre_close,观察20251015日(按照下标第3行)的pre_close和20251014(第4行)的close,发现这两个不一样,而其余都是一样的。日期区间是左闭右闭的。df = pro.daily(ts_code='000001.SZ', start_date='20251010', end_date='20251020') df输出结果:ts_code trade_date open high low close pre_close change pct_chg vol amount 0 000001.SZ 20251020 11.41 11.45 11.27 11.42 11.40 0.02 0.1754 952641.10 1081829.700 1 000001.SZ 20251017 11.50 11.58 11.38 11.40 11.54 -0.14 -1.2132 1039666.32 1193518.555 2 000001.SZ 20251016 11.38 11.55 11.36 11.54 11.40 0.14 1.2281 1261936.87 1447841.585 3 000001.SZ 20251015 11.34 11.42 11.26 11.40 11.33 0.07 0.6178 1271061.03 1443458.105 4 000001.SZ 20251014 11.39 11.60 11.36 11.57 11.40 0.17 1.4912 1843428.36 2124120.304 5 000001.SZ 20251013 11.32 11.46 11.28 11.40 11.43 -0.03 -0.2625 1168801.73 1328180.364 6 000001.SZ 20251010 11.37 11.49 11.36 11.43 11.40 0.03 0.2632 1087947.75 1244213.5131.3.1 本案例演示了pre_close是除权后的昨收价,close是未除权的收盘价观察pct_chg_v2列可见使用 (close/pre_close - 1) * 100 之后四舍五入保留4位小数即得到当天涨跌幅,仅使用close来计算收益率的话会因分红、拆股等导致问题。观察20251015日(第3行)数据,发现使用close错位计算的涨跌幅是不对的,因为当天分红除权了。df['pct_chg_v2'] = (df['close'] / df['pre_close'] - 1) * 100 df['pct_chg_v3'] = ((df['close'] / df['close'].shift(-1) - 1) * 100).round(4) # 在中括号中传递一个字段列表(list),可以获取这个DataFrame中的部分列数据,在后面我们计算复权价格的时候会用到 df[['trade_date', 'close', 'pre_close', 'pct_chg', 'pct_chg_v2', 'pct_chg_v3']]输出结果:trade_date close pre_close pct_chg pct_chg_v2 pct_chg_v3 0 20251020 11.42 11.40 0.1754 0.175439 0.1754 1 20251017 11.40 11.54 -1.2132 -1.213172 -1.2132 2 20251016 11.54 11.40 1.2281 1.228070 1.2281 3 20251015 11.40 11.33 0.6178 0.617829 -1.4693 4 20251014 11.57 11.40 1.4912 1.491228 1.4912 5 20251013 11.40 11.43 -0.2625 -0.262467 -0.2625 6 20251010 11.43 11.40 0.2632 0.263158 NaN1.4 仅传递股票代码# 对于上市比较早的股票,由于日行情数据大于6000条,仅传递股票代码是不能够获取所有日行情数据的,但一般也不会需要这么久的日行情 df = pro.daily(ts_code='000001.SZ', offset=6000) df输出结果:ts_code trade_date open high low close pre_close change pct_chg vol amount 0 000001.SZ 20010215 14.28 14.35 14.14 14.15 14.21 -0.06 -0.42 13692.19 19457.1708 1 000001.SZ 20010214 14.26 14.32 14.20 14.21 14.30 -0.09 -0.63 13593.97 19399.0114 2 000001.SZ 20010213 14.41 14.45 14.30 14.30 14.39 -0.09 -0.63 15092.15 21663.7760 3 000001.SZ 20010212 14.40 14.50 14.12 14.39 14.39 0.00 0.00 23028.74 32847.6593 4 000001.SZ 20010209 14.15 14.50 14.15 14.39 14.13 0.26 1.84 20286.35 29095.1301 ... ... ... ...