跳转到主要内容

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数据为历史数据,盘中不会实时更新
免费服务适合:
  • 历史数据回测
  • 研究学习
  • 日级别策略开发(收盘后)
如需实时行情、分钟K线或更高频率访问,请继续阅读下方的完整服务配置。

完整服务(需注册)

1

获取 API Key

访问 tickflow.org 登录后,在控制台一键生成你的 API Key。
2

配置认证

有两种方式配置 API Key:
from tickflow import TickFlow

tf = TickFlow(api_key="your-api-key")
3

发起第一个请求

from tickflow import TickFlow

tf = TickFlow(api_key="your-api-key")

# 获取沪深 A 股实时行情
quotes = tf.quotes.get(symbols=["600000.SH", "000001.SZ"])

for q in quotes:
    print(f"{q['symbol']}: {q['last_price']}")
如果看到股票价格输出,说明 SDK 已配置成功!

标的代码格式与支持市场

所有按标的查询的接口(行情、K 线等)均使用统一标的代码,格式为:代码.市场后缀(中间为英文点号)。

标的代码格式

  • 格式:代码.市场后缀
  • 示例:
    • 股票:600000.SH(浦发银行)、000001.SZ(平安银行)、920662.BJ(方盛股份)
    • ETF:510300.SH(沪深 300 ETF)、159915.SZ(创业板 ETF)
    • 指数:000001.SH(上证指数)、399006.SZ(创业板指数)
    • 期货:au2604.SHF(上期所黄金主力合约)、i2605.DCE(大商所铁矿石主力合约)等
代码部分使用交易所官方代码(如 6 位 A 股代码、合约代码等),市场后缀见下表。

支持的市场(后缀)

后缀市场说明
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_timeend_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())
也可以同时使用 countend_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)或单独开启。市场深度频道额外需要「市场深度」权限。
通过 WebSocket 订阅标的后,服务端会持续推送行情变动,适合低延迟、持续接收行情更新的场景。 SDK 提供 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())

下一步

完整示例

查看更多使用场景和代码示例

最佳实践

了解生产环境的最佳实践