Documentation Index
Fetch the complete documentation index at: https://docs.tickflow.org/llms.txt
Use this file to discover all available pages before exploring further.
安装
使用 pip 安装 TickFlow Python SDK:pip install "tickflow[all]" --upgrade
SDK 支持 Python 3.9+,推荐使用 Python 3.10 或更高版本。
免费服务(快速体验)
如果你只需要日K线数据和标的信息(不需要实时行情),可以直接使用免费服务,无需注册:from tickflow import TickFlow
# 使用免费服务(无需 API key)
tf = TickFlow.free()
# 查询日K线数据
df = tf.klines.get("600000.SH", period="1d", count=100, as_dataframe=True)
print(df.tail())
# 查询标的信息
instruments = tf.instruments.batch(symbols=["600000.SH", "000001.SZ"])
for inst in instruments:
print(f"{inst['symbol']}: {inst['name']}")
免费服务特点:
- ✅ 无需注册,直接使用
- ✅ 提供历史日K线数据(1d、1w、1M、1Q、1Y)
- ✅ 提供标的信息、交易所、标的池查询
- ❌ 不提供实时行情
- ❌ 不提供分钟级K线(1m、5m、15m、30m、60m)
- ⚠️ 日K数据为历史数据,盘中不会实时更新
- 历史数据回测
- 研究学习
- 日级别策略开发(收盘后)
完整服务(需注册)
获取 API Key
访问 tickflow.org 登录后,在控制台一键生成你的 API Key。
配置认证
有两种方式配置 API Key:
- 直接传入
- Windows 环境变量
- Linux/Mac 环境变量
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
powershell
$env:TICKFLOW_API_KEY="your-api-key"
cmd
set TICKFLOW_API_KEY=your-api-key
export TICKFLOW_API_KEY="your-api-key"
from tickflow import TickFlow
# 自动读取 TICKFLOW_API_KEY 环境变量
tf = TickFlow()
标的代码格式与支持市场
所有按标的查询的接口(行情、K 线等)均使用统一标的代码,格式为:代码.市场后缀(中间为英文点号)。
标的代码格式
- 格式:
代码.市场后缀 - 示例:
- 股票:
600000.SH(浦发银行)、000001.SZ(平安银行)、920662.BJ(方盛股份) - ETF:
510300.SH(沪深 300 ETF)、159915.SZ(创业板 ETF) - 指数:
000001.SH(上证指数)、399006.SZ(创业板指数) - 期货:
au2604.SHF(上期所黄金主力合约)、i2605.DCE(大商所铁矿石主力合约)等
- 股票:
支持的市场(后缀)
| 后缀 | 市场 | 说明 |
|---|---|---|
| SH | 上海证券交易所 | 沪市 A 股、ETF、债券等 |
| SZ | 深圳证券交易所 | 深市 A 股、创业板、ETF 等 |
| BJ | 北京证券交易所 | 北交所股票 |
| SHF | 上海期货交易所 | 上期所期货 |
| DCE | 大连商品交易所 | 大商所期货 |
| ZCE | 郑州商品交易所 | 郑商所期货 |
| CFX | 中国金融期货交易所 | 中金所股指/国债期货 |
| INE | 上海国际能源交易中心 | 原油等期货 |
| GFE | 广州期货交易所 | 广期所期货 |
| US | 美股 | 美国证券市场 |
| HK | 港股 | 香港联交所 |
目前支持状态
- A 股(SH / SZ / BJ):已支持。可查实时行情、日 K、分钟 K、日内分时、财务数据、标的池(如
CN_Equity_A)等。 - 国内期货(SHF / DCE / ZCE / CFX / INE / GFE):支持主力合约查询。按合约代码 + 后缀查询(如
au2604.SHF)。 - 美股(US):已支持。实时行情、全量历史日 K 线(支持前复权/后复权)、除权因子、标的池(
US_Equity)。 - 港股(HK):已支持。实时行情、全量历史日 K 线(支持前复权/后复权)、除权因子、标的池(
HK_Equity)。
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
# 多市场示例
symbols = [
"600000.SH", # 沪市
"000001.SZ", # 深市
"AAPL.US", # 美股
"00700.HK", # 港股
]
quotes = tf.quotes.get(symbols=symbols, as_dataframe=True)
print(quotes)
symbol region last_price prev_close open ... ext.name ext.change_pct ext.change_amount ext.amplitude ext.turnover_rate
0 00700.HK HK 518.00 522.50 523.00 ... 腾讯控股 -0.008612 -4.50 0.016268 0.000578
1 000001.SZ CN 11.12 11.06 11.04 ... 平安银行 0.005425 0.06 0.011754 0.002192
2 AAPL.US US 273.05 270.23 270.39 ... 苹果 0.010436 2.82 0.014747 0.002238
3 600000.SH CN 9.77 9.78 9.78 ... 浦发银行 -0.001022 -0.01 0.012270 0.000951
[4 rows x 18 columns]
基础用法
标的信息
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
# 查询单只标的
inst = tf.instruments.get("600000.SH")
print(f"{inst['symbol']}: {inst['name']} ({inst['exchange']})")
print(f"类型: {inst.get('type')}, 上市日期: {inst.get('ext', {}).get('listing_date')}")
print(f"原始数据: {inst}")
print("-" * 50)
# 批量查询(跨市场)
insts = tf.instruments.batch(["600000.SH", "000001.SZ", "AAPL.US", "00700.HK"])
for i in insts:
print(f"{i['symbol']}: {i['name']}")
print(f"原始数据: {i}")
print("-" * 50)
600000.SH: 浦发银行 (SH)
类型: stock, 上市日期: 1999-11-10
原始数据: {'symbol': '600000.SH', 'exchange': 'SH', 'code': '600000', 'name': '浦发银行', 'region': 'CN', 'type': 'stock', 'ext': {'type': 'cn_equity', 'listing_date': '1999-11-10', 'total_shares': 33305838300.0, 'float_shares': 33305838300.0, 'tick_size': 0.01, 'limit_up': 9.85, 'limit_down': 8.06}}
--------------------------------------------------
600000.SH: 浦发银行
原始数据: {'symbol': '600000.SH', 'exchange': 'SH', 'code': '600000', 'name': '浦发银行', 'region': 'CN', 'type': 'stock', 'ext': {'type': 'cn_equity', 'listing_date': '1999-11-10', 'total_shares': 33305838300.0, 'float_shares': 33305838300.0, 'tick_size': 0.01, 'limit_up': 9.85, 'limit_down': 8.06}}
--------------------------------------------------
000001.SZ: 平安银行
原始数据: {'symbol': '000001.SZ', 'exchange': 'SZ', 'code': '000001', 'name': '平安银行', 'region': 'CN', 'type': 'stock', 'ext': {'type': 'cn_equity', 'listing_date': '1991-04-03', 'total_shares': 19405918198.0, 'float_shares': 19405600653.0, 'tick_size': 0.01, 'limit_up': 11.95, 'limit_down': 9.77}}
--------------------------------------------------
AAPL.US: 苹果
原始数据: {'symbol': 'AAPL.US', 'exchange': 'US', 'code': 'AAPL', 'name': '苹果', 'region': 'US', 'type': 'stock', 'ext': {'type': 'us_equity', 'total_shares': 14687356000.0, 'float_shares': 14662412877.0}}
--------------------------------------------------
00700.HK: 腾讯控股
原始数据: {'symbol': '00700.HK', 'exchange': 'HK', 'code': '00700', 'name': '腾讯控股', 'region': 'HK', 'type': 'stock', 'ext': {'type': 'hk_equity', 'total_shares': 9118000574.0, 'float_shares': 9118000574.0}}
--------------------------------------------------
标的池
# 列出所有标的池
universes = tf.universes.list()
top10_universes = universes[:10]
for u in top10_universes:
print(f"{u['id']}: {u['name']} ({u['symbol_count']} 只)")
# 获取标的池详情(含全部标的代码)
universe = tf.universes.get("CN_Equity_A")
print(f"A 股共 {len(universe['symbols'])} 只")
etf_universe = tf.universes.get("CN_ETF")
print(f"ETF 共 {len(etf_universe['symbols'])} 只")
CN_Equity_SW1_490306: SW1非银金融 (3 只)
CN_Equity_SW2_370604: SW2医疗服务 (12 只)
CN_Equity_SW2_220803: SW2农化制品 (27 只)
CN_Equity_SW2_220202: SW2化学原料 (17 只)
CN_Equity_SW1_450603: SW1商贸零售 (5 只)
CN_Equity_SW2_640704: SW2自动化设备 (15 只)
CN_Equity_SW1_630705: SW1电力设备 (8 只)
CN_Equity_SW3_110404: SW3宠物食品 (2 只)
CN_Equity_SW3_110704: SW3其他养殖 (4 只)
CN_Equity_SW3_450601: SW3综合电商 (2 只)
A 股共 5502 只
ETF 共 1443 只
K 线获取
单次单标的最多获取 10000 根 K 线
非批量
单只标的日 K、周 K 等,使用tf.klines.get(symbol, ...):
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
# 获取日 K 线,返回原始数据
klines = tf.klines.get("600000.SH", period="1d", count=10000)
print(f"最新收盘价: {klines['close'][-1]}")
# 获取日 K 线,返回 DataFrame(需安装 pandas)
df = tf.klines.get("600000.SH", period="1d", count=10000, as_dataframe=True)
print(df.tail(5))
# 获取分钟 K 线(1m/5m/15m/30m/60m)
df = tf.klines.get("600000.SH", period="1m", count=100, as_dataframe=True)
print(df.tail(5))
最新收盘价: 9.89
symbol name timestamp trade_date trade_time open high low close volume amount
6395 600000.SH 浦发银行 1775145600000 2026-04-03 2026-04-03 00:00:00 10.25 10.25 10.08 10.12 411518 417211984.0
6396 600000.SH 浦发银行 1775491200000 2026-04-07 2026-04-07 00:00:00 10.12 10.17 9.95 9.98 378826 380103392.0
6397 600000.SH 浦发银行 1775577600000 2026-04-08 2026-04-08 00:00:00 10.00 10.11 9.95 10.09 482724 484910420.0
6398 600000.SH 浦发银行 1775664000000 2026-04-09 2026-04-09 00:00:00 10.07 10.12 9.93 9.93 460942 460220739.0
6399 600000.SH 浦发银行 1775750400000 2026-04-10 2026-04-10 00:00:00 9.93 9.95 9.86 9.89 426585 422430500.0
symbol name timestamp trade_date trade_time open high low close volume amount
95 600000.SH 浦发银行 1775804160000 2026-04-10 2026-04-10 14:56:00 9.89 9.90 9.89 9.90 2880 2849894.0
96 600000.SH 浦发银行 1775804220000 2026-04-10 2026-04-10 14:57:00 9.90 9.90 9.88 9.89 14223 14065504.0
97 600000.SH 浦发银行 1775804280000 2026-04-10 2026-04-10 14:58:00 9.90 9.90 9.90 9.90 29 28710.0
98 600000.SH 浦发银行 1775804340000 2026-04-10 2026-04-10 14:59:00 9.90 9.90 9.90 9.90 0 0.0
99 600000.SH 浦发银行 1775804400000 2026-04-10 2026-04-10 15:00:00 9.89 9.89 9.89 9.89 8404 8311556.0
批量(推荐)
多只标的一次性拉取,使用tf.klines.batch(symbols, ...),适合大量标的:
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
# 批量获取多只股票的 K 线
symbols = ["600000.SH", "000001.SZ", "600519.SH"]
dfs = tf.klines.batch(symbols, period="1d", count=10000, as_dataframe=True, show_progress=True)
print(list(dfs.keys()))
print(dfs["600000.SH"].tail())
['000001.SZ', '600519.SH', '600000.SH']
symbol name timestamp trade_date trade_time open high low close volume amount
6373 600000.SH 浦发银行 1772553600000 2026-03-04 2026-03-04 00:00:00 9.69 9.70 9.43 9.60 1617556 1.544304e+09
6374 600000.SH 浦发银行 1772640000000 2026-03-05 2026-03-05 00:00:00 9.56 9.81 9.56 9.78 1197453 1.163685e+09
6375 600000.SH 浦发银行 1772726400000 2026-03-06 2026-03-06 00:00:00 9.74 9.90 9.71 9.89 727260 7.147781e+08
6376 600000.SH 浦发银行 1772985600000 2026-03-09 2026-03-09 00:00:00 9.83 10.02 9.77 9.85 1168405 1.156617e+09
6377 600000.SH 浦发银行 1773072000000 2026-03-10 2026-03-10 00:00:00 9.83 9.99 9.80 9.97 528753 5.234518e+08
复权方式
通过adjust 参数指定复权类型:
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
# 比例前复权(默认)
df = tf.klines.get("600000.SH", period="1d", count=1000, adjust="forward", as_dataframe=True)
# 差值前复权(与东方财富、同花顺等软件一致)
df = tf.klines.get("600000.SH", period="1d", count=1000, adjust="forward_additive", as_dataframe=True)
# 不复权
df = tf.klines.get("600000.SH", period="1d", count=1000, adjust="none", as_dataframe=True)
# 比例后复权
df = tf.klines.get("600000.SH", period="1d", count=1000, adjust="backward", as_dataframe=True)
# 差值后复权
df = tf.klines.get("600000.SH", period="1d", count=1000, adjust="backward_additive", as_dataframe=True)
adjust | 说明 | 适用场景 |
|---|---|---|
"forward" | 比例前复权(默认) | 收益率计算、量化回测 |
"forward_additive" | 差值前复权 | 与东方财富/同花顺价格对齐 |
"backward" | 比例后复权 | 长期收益对比 |
"backward_additive" | 差值后复权 | 与行情软件后复权价格对齐 |
"none" | 不复权 | 原始价格 |
东方财富、同花顺等软件默认使用差值前复权。如需价格一致,请使用
adjust="forward_additive"。时间区间
通过start_time 和 end_time 指定时间范围(毫秒时间戳):
import datetime
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
# 用毫秒时间戳指定范围
start = int(datetime.datetime(2025, 1, 1).timestamp() * 1000)
end = int(datetime.datetime(2025, 12, 31).timestamp() * 1000)
df = tf.klines.get("600000.SH", period="1d", start_time=start, end_time=end, as_dataframe=True)
print(f"2025 年共 {len(df)} 个交易日")
print(df.tail())
count 和 end_time,获取某个时间点之前的 N 根 K 线:
import datetime
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
# 获取 2025-06-30 之前的最近 60 根日 K
end = int(datetime.datetime(2025, 6, 30).timestamp() * 1000)
df = tf.klines.get("600000.SH", period="1d", count=60, end_time=end, as_dataframe=True)
print(df.tail())
除权因子
查看标的的历史除权因子:from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
factors = tf.klines.ex_factors(["600000.SH", "000001.SZ"], as_dataframe=True)
print(factors)
日内分时
当日分钟 K 线(1 分钟、5 分钟等),按单只或批量调用。非批量
单只标的当日分钟线,使用tf.klines.intraday(symbol, ...):
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
# 获取当日 1 分钟 K 线
df = tf.klines.intraday("600000.SH", as_dataframe=True)
print(f"今日已有 {len(df)} 根分钟 K 线")
print(df.tail())
print("-" * 50)
# 指定 count 参数,获取当日最新5根分钟K线
df_last_1 = tf.klines.intraday("600000.SH", as_dataframe=True, count=1)
print("获取当日最新 1 根分钟K线")
print(df_last_1.tail())
print("-" * 50)
# 获取当日 5 分钟 K 线
df_5m = tf.klines.intraday("600000.SH", period="5m", as_dataframe=True)
print(f"今日已有 {len(df_5m)} 根 5 分钟 K 线")
print(df_5m.tail())
今日已有 202 根分钟 K 线
symbol name timestamp trade_date trade_time open high low close volume amount
197 600000.SH 浦发银行 1773123420000 2026-03-10 2026-03-10 14:17:00 9.97 9.97 9.96 9.96 1878 1871400.0
198 600000.SH 浦发银行 1773123480000 2026-03-10 2026-03-10 14:18:00 9.97 9.97 9.96 9.97 2090 2083325.0
199 600000.SH 浦发银行 1773123540000 2026-03-10 2026-03-10 14:19:00 9.97 9.97 9.96 9.97 1311 1306814.0
200 600000.SH 浦发银行 1773123600000 2026-03-10 2026-03-10 14:20:00 9.97 9.97 9.96 9.97 1819 1813426.0
201 600000.SH 浦发银行 1773123660000 2026-03-10 2026-03-10 14:21:00 9.97 9.97 9.96 9.97 496 494470.0
--------------------------------------------------
获取当日最新 1 根分钟K线
symbol name timestamp trade_date trade_time open high low close volume amount
0 600000.SH 浦发银行 1773123660000 2026-03-10 2026-03-10 14:21:00 9.97 9.97 9.96 9.97 496 494470.0
--------------------------------------------------
今日已有 41 根 5 分钟 K 线
symbol name timestamp trade_date trade_time open high low close volume amount
36 600000.SH 浦发银行 1773122700000 2026-03-10 2026-03-10 14:05:00 9.95 9.97 9.95 9.97 11766 11722589.0
37 600000.SH 浦发银行 1773123000000 2026-03-10 2026-03-10 14:10:00 9.96 9.97 9.96 9.97 5950 5930976.0
38 600000.SH 浦发银行 1773123300000 2026-03-10 2026-03-10 14:15:00 9.96 9.97 9.96 9.96 13054 13012628.0
39 600000.SH 浦发银行 1773123600000 2026-03-10 2026-03-10 14:20:00 9.96 9.97 9.96 9.97 10810 10773740.0
40 600000.SH 浦发银行 1773123900000 2026-03-10 2026-03-10 14:25:00 9.97 9.97 9.96 9.97 496 494470.0
批量
多只标的当日分钟线,使用tf.klines.intraday_batch(symbols, ...):
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
# 批量获取多只股票的当日分钟 K 线
symbols = ["600000.SH", "000001.SZ", "600519.SH"]
dfs = tf.klines.intraday_batch(symbols, as_dataframe=True, show_progress=True)
print(f"成功获取 {len(dfs)} 只股票的日内数据")
# 展示浦发银行当日最新5根分钟K线
print(dfs["600000.SH"].tail())
成功获取 3 只股票的日内数据
symbol name timestamp trade_date trade_time open high low close volume amount
200 600000.SH 浦发银行 1773123600000 2026-03-10 2026-03-10 14:20:00 9.97 9.97 9.96 9.97 1819 1813426.0
201 600000.SH 浦发银行 1773123660000 2026-03-10 2026-03-10 14:21:00 9.97 9.97 9.96 9.96 881 878056.0
202 600000.SH 浦发银行 1773123720000 2026-03-10 2026-03-10 14:22:00 9.96 9.97 9.96 9.96 618 615792.0
203 600000.SH 浦发银行 1773123780000 2026-03-10 2026-03-10 14:23:00 9.97 9.97 9.96 9.97 649 646777.0
204 600000.SH 浦发银行 1773123840000 2026-03-10 2026-03-10 14:24:00 9.96 9.97 9.96 9.97 1328 1323983.0
获取实时行情
按标的代码查询
quotes = tf.quotes.get(symbols=["600000.SH", "000001.SZ"], as_dataframe=True)
print(quotes)
symbol region last_price prev_close open ... ext.name ext.change_pct ext.change_amount ext.amplitude ext.turnover_rate
0 600000.SH CN 9.89 9.98 9.98 ... 浦发银行 -0.009018 -0.09 0.015030 0.002103
1 000001.SZ CN 10.91 10.96 10.96 ... 平安银行 -0.004562 -0.05 0.008212 0.002860
[2 rows x 18 columns]
按标的池查询
# 获取全部 A 股行情
quotes_df_a = tf.quotes.get(universes=["CN_Equity_A"], as_dataframe=True)
print(quotes_df_a)
# 获取全部沪深 ETF 行情
quotes_df_etf = tf.quotes.get(universes=["CN_ETF"], as_dataframe=True)
print(quotes_df_etf)
symbol region last_price prev_close open ... ext.name ext.change_pct ext.change_amount ext.amplitude ext.turnover_rate
0 600916.SH CN 10.50 10.66 10.69 ... 中国黄金 -0.015009 -0.16 0.026266 0.025402
1 301363.SZ CN 29.16 29.14 29.37 ... 美好医疗 0.000686 0.02 0.024708 0.011435
2 600649.SH CN 4.79 4.84 4.86 ... 城投控股 -0.010331 -0.05 0.022727 0.013862
3 603681.SH CN 21.73 21.88 21.88 ... 永冠新材 -0.006856 -0.15 0.027422 0.025814
4 301137.SZ CN 61.56 59.15 58.56 ... 哈焊华通 0.040744 2.41 0.071851 0.072857
... ... ... ... ... ... ... ... ... ... ... ...
5479 300127.SZ CN 35.83 35.19 35.51 ... 银河磁体 0.018187 0.64 0.020176 0.014084
5480 600249.SH CN 5.84 5.80 5.84 ... 两面针 0.006897 0.04 0.013793 0.008029
5481 600456.SH CN 39.64 39.17 39.50 ... 宝钛股份 0.011999 0.47 0.023487 0.017193
5482 603095.SH CN 20.30 20.41 20.60 ... 越剑智能 -0.005390 -0.11 0.030867 0.016026
5483 002181.SZ CN 10.72 10.46 10.57 ... 粤 传 媒 0.024857 0.26 0.032505 0.034027
[5484 rows x 18 columns]
symbol region last_price prev_close open ... ext.name ext.change_pct ext.change_amount ext.amplitude ext.turnover_rate
0 159974.SZ CN 1.980 1.978 1.960 ... 央企创新ETF富国 0.001011 0.002 0.014156 0.014264
1 159637.SZ CN 0.924 0.910 0.914 ... 新能源车ETF东财 0.015385 0.014 0.019780 0.011927
2 159258.SZ CN 1.159 1.137 1.144 ... 机器人ETF南方 0.019349 0.022 0.014072 0.013587
3 159351.SZ CN 1.252 1.232 1.237 ... A500ETF嘉实 0.016234 0.020 0.012175 0.097820
4 159692.SZ CN 1.229 1.221 1.226 ... 证券ETF东财 0.006552 0.008 0.008190 0.025241
... ... ... ... ... ... ... ... ... ... ... ...
1393 159775.SZ CN 0.910 0.892 0.900 ... 电池ETF建信 0.020179 0.018 0.017937 0.150701
1394 512750.SH CN 1.452 1.452 1.443 ... 基本面50ETF嘉实 0.000000 0.000 0.008264 0.005310
1395 563000.SH CN 1.051 1.036 1.040 ... 中国A50ETF易方达 0.014479 0.015 0.010618 0.012222
1396 512050.SH CN 1.239 1.220 1.225 ... A500ETF基金 0.015574 0.019 0.013115 0.224107
1397 516390.SH CN 1.007 0.992 0.998 ... 新能源车ETF汇添富 0.015121 0.015 0.017137 0.037805
[1398 rows x 18 columns]
市场深度(五档行情)
市场深度为 Pro / Expert 套餐功能,也可单独订阅。
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
depth = tf.depth.get("600000.SH")
print(depth)
{'symbol': '600000.SH',
'region': 'CN',
'timestamp': 1776754802000,
'bid_prices': [9.72, 9.71, 9.7, 9.69, 9.68],
'bid_volumes': [3192, 3870, 26168, 5849, 5480],
'ask_prices': [9.73, 9.74, 9.75, 9.76, 9.77],
'ask_volumes': [74, 1602, 1148, 1209, 1109]}
| 字段 | 说明 |
|---|---|
bid_prices | 买入价(买1-买5,降序) |
bid_volumes | 买入量 |
ask_prices | 卖出价(卖1-卖5,升序) |
ask_volumes | 卖出量 |
财务数据
财务数据为 Expert 套餐功能,也可单独订阅。
利润表
income_df = tf.financials.income(["000001.SZ"], as_dataframe=True)
print(income_df.tail(3))
symbol period_end announce_date total_assets ... accounts_payable inventory minority_interest goodwill
127 000001.SZ 2025-09-30 2025-10-25 5.766764e+12 ... NaN NaN NaN 7.568000e+09
128 000001.SZ 2025-12-31 2026-03-21 5.925777e+12 ... NaN NaN NaN 7.568000e+09
129 000001.SZ 2026-03-31 2026-04-25 6.033962e+12 ... NaN NaN NaN 7.568000e+09
[3 rows x 20 columns]
资产负债表
balance_df = tf.financials.balance_sheet(["000001.SZ"], as_dataframe=True)
print(balance_df.tail(3))
symbol period_end announce_date total_assets ... accounts_payable inventory minority_interest goodwill
127 000001.SZ 2025-09-30 2025-10-25 5.766764e+12 ... NaN NaN NaN 7.568000e+09
128 000001.SZ 2025-12-31 2026-03-21 5.925777e+12 ... NaN NaN NaN 7.568000e+09
129 000001.SZ 2026-03-31 2026-04-25 6.033962e+12 ... NaN NaN NaN 7.568000e+09
[3 rows x 20 columns]
现金流量表
cashflow_df = tf.financials.cash_flow(["000001.SZ"], as_dataframe=True)
print(cashflow_df.tail(3))
symbol period_end announce_date ... net_financing_cash_flow capex net_cash_change
130 000001.SZ 2025-09-30 2025-10-25 ... -8.058100e+10 1.288000e+09 -2.210800e+10
131 000001.SZ 2025-12-31 2026-03-21 ... -1.492360e+11 2.893000e+09 8.568900e+10
132 000001.SZ 2026-03-31 2026-04-25 ... -3.563400e+10 1.720000e+08 -5.219500e+10
[3 rows x 8 columns]
核心财务指标
metrics_df = tf.financials.metrics(["000001.SZ"], as_dataframe=True)
print(metrics_df.tail(3))
symbol period_end announce_date eps_basic ... revenue_yoy net_income_yoy debt_to_asset_ratio roe_diluted
83 000001.SZ 2025-09-30 2025-10-25 1.87 ... -9.7811 -3.4987 91.0187 8.28
84 000001.SZ 2025-12-31 2026-03-21 2.07 ... -10.3978 -4.2127 90.6985 9.15
85 000001.SZ 2026-03-31 2026-04-25 0.67 ... 4.6516 3.0292 90.9830 2.83
[3 rows x 13 columns]
股本表
shares_df = tf.financials.shares(["600000.SH", "000001.SZ"], as_dataframe=True)
print(shares_df.tail(3))
symbol period_end announce_date total_shares float_shares
327 000001.SZ 2024-12-31 2025-03-15 1.940592e+10 1.940557e+10
328 000001.SZ 2025-03-31 2025-03-31 1.940592e+10 1.940557e+10
329 000001.SZ 2025-06-30 2025-08-23 1.940592e+10 1.940560e+10
更多过滤条件
- 仅获取最新一期数据
latest = tf.financials.income(["600519.SH", "000001.SZ"], latest=True)
for symbol, records in latest.items():
if records:
print(f"{symbol} 最新营收: {records[0].get('revenue')}")
600519.SH 最新营收: 130903889634.88
000001.SZ 最新营收: 131442000000.0
- 按时间范围过滤
income_df = tf.financials.income(
["000001.SZ"],
start_date="2024-01-01",
end_date="2025-12-31",
as_dataframe=True,
)
print(income_df)
symbol period_end announce_date revenue ... net_income net_income_attributable basic_eps diluted_eps
0 000001.SZ 2024-03-31 2024-04-20 3.877000e+10 ... 1.493200e+10 1.493200e+10 0.66 0.66
1 000001.SZ 2024-06-30 2024-08-16 7.713200e+10 ... 2.587900e+10 2.587900e+10 1.23 1.23
2 000001.SZ 2024-09-30 2024-10-19 1.115820e+11 ... 3.972900e+10 3.972900e+10 1.94 1.94
3 000001.SZ 2024-12-31 2025-03-15 1.466950e+11 ... 4.450800e+10 4.450800e+10 2.15 2.15
4 000001.SZ 2025-03-31 2025-04-19 3.370900e+10 ... 1.409600e+10 1.409600e+10 0.62 0.62
5 000001.SZ 2025-06-30 2025-08-23 6.938500e+10 ... 2.487000e+10 2.487000e+10 1.18 1.18
6 000001.SZ 2025-09-30 2025-10-25 1.006680e+11 ... 3.833900e+10 3.833900e+10 1.87 1.87
7 000001.SZ 2025-12-31 2026-03-21 1.314420e+11 ... 4.263300e+10 4.263300e+10 2.07 2.07
[8 rows x 14 columns]
WebSocket 实时推送
WebSocket 为付费功能,需要订阅包含 WebSocket 实时行情的套餐(如 Expert)或单独开启。市场深度频道额外需要「市场深度」权限。
tf.stream(统一推送),按频道订阅行情和盘口:
基本用法
import datetime
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
stream = tf.stream
@stream.on_quotes
def on_quotes(quotes):
for q in quotes:
ts = datetime.datetime.fromtimestamp(q["timestamp"] / 1000)
ext = q.get("ext", {})
name = ext.get("name", "")
change_pct = ext.get("change_pct")
change_str = f"{change_pct:+.2%}" if change_pct is not None else "N/A"
print(
f"[{ts:%H:%M:%S}] {q['symbol']} {name} "
f"最新:{q['last_price']} 涨跌:{change_str} "
f"开:{q['open']} 高:{q['high']} 低:{q['low']} 昨收:{q['prev_close']} "
f"量:{q['volume']} 额:{q['amount']:.0f}"
)
@stream.on_depth
def on_depth(depths):
for d in depths:
print(
f"[盘口] {d['symbol']} "
f"买1:{d['bid_prices'][0]}×{d['bid_volumes'][0]} "
f"卖1:{d['ask_prices'][0]}×{d['ask_volumes'][0]}"
)
@stream.on_error
def on_error(msg):
print(f"错误: {msg}")
# 按频道订阅
stream.subscribe("quotes", ["600000.SH", "000001.SZ"])
stream.subscribe("depth", ["600000.SH", "000001.SZ"])
stream.connect() # 阻塞直到 close() 或 Ctrl+C
[11:30:00] 600000.SH 浦发银行 最新:9.62 涨跌:-1.03% 开:9.71 高:9.73 低:9.61 昨收:9.72 量:366689 额:353371300
[11:30:00] 000001.SZ 平安银行 最新:11.04 涨跌:-0.36% 开:11.08 高:11.09 低:11.02 昨收:11.08 量:275295 额:304075500
[盘口] 600000.SH 买1:9.62×1287 卖1:9.63×3667
[盘口] 000001.SZ 买1:11.04×265 卖1:11.05×536
depth 频道需要「市场深度」权限(Pro / Expert 或单独订阅)。无权限时订阅会收到错误提示,不影响其他频道。非阻塞模式
在后台线程运行 WebSocket,主线程继续执行其他逻辑:import time
from tickflow import TickFlow
tf = TickFlow(api_key="your-api-key")
stream = tf.stream
@stream.on_quotes
def on_quotes(quotes):
for q in quotes:
print(f"{q['symbol']}: {q['last_price']}")
stream.subscribe("quotes", ["600000.SH"])
stream.connect(block=False) # 后台线程运行
time.sleep(10)
stream.subscribe("quotes", ["000001.SZ"]) # 动态追加订阅
time.sleep(30)
stream.close()
异步用法
import asyncio
import datetime
from tickflow import AsyncTickFlow
async def main():
async with AsyncTickFlow(api_key="your-api-key") as tf:
stream = tf.stream
@stream.on_quotes
def on_quotes(quotes):
for q in quotes:
ts = datetime.datetime.fromtimestamp(q["timestamp"] / 1000)
ext = q.get("ext", {})
name = ext.get("name", "")
print(f"[{ts:%H:%M:%S}] {q['symbol']} {name}: {q['last_price']}")
await stream.subscribe("quotes", ["600000.SH", "000001.SZ"])
await stream.connect()
asyncio.run(main())
如果只需获取某一时刻的行情快照,使用 REST 接口
tf.quotes.get() 更为简单。完整的 WebSocket 协议说明和多语言示例请参考 WebSocket 文档。异步使用
对于高并发场景,使用异步客户端:import asyncio
from tickflow import AsyncTickFlow
async def main():
async with AsyncTickFlow(api_key="your-api-key") as tf:
# 异步获取数据
df = await tf.klines.get("600000.SH", as_dataframe=True)
print(df.tail())
# 并发获取多只股票,仅演示,如需大量获取K线数据,请使用批量接口,tf.klines.batch
tasks = [
tf.klines.get(s, as_dataframe=True)
for s in ["600000.SH", "000001.SZ"]
]
results = await asyncio.gather(*tasks)
asyncio.run(main())
下一步
完整示例
查看更多使用场景和代码示例
最佳实践
了解生产环境的最佳实践
