跳转到主要内容

K 线数据

klines.get() 默认返回最近 100 根 K 线。如需更多数据,请显式设置 count 参数:
# 默认只返回 100 根
df = tf.klines.get("600000.SH", period="1d", as_dataframe=True)
print(len(df))  # 100

# 设置 count 获取更多
df = tf.klines.get("600000.SH", period="1d", count=10000, as_dataframe=True)
print(len(df))  # 取决于该标的可用数据量
也可以通过 start_timeend_time 指定时间范围来获取数据。
TickFlow 支持 5 种复权方式,通过 adjust 参数指定:
adjust说明算法
"none"不复权原始价格
"forward"前复权-比例(默认乘除法,价格 × 累计复权因子
"backward"后复权-比例乘除法,价格 × 累计复权因子
"forward_additive"前复权-差值加减法,价格 ± 累计差值
"backward_additive"后复权-差值加减法,价格 ± 累计差值
东方财富、同花顺等软件默认使用的是差值前复权(加减法),对应 adjust="forward_additive"TickFlow 的默认值 "forward" 是比例前复权(乘除法),两者结果不同。如需与这些软件的价格对齐,请使用 "forward_additive"
# 比例前复权(TickFlow 默认)
df_ratio = tf.klines.get("600000.SH", period="1d", count=1000, adjust="forward", as_dataframe=True)

# 差值前复权(东方财富/同花顺默认,价格与这些软件一致)
df_additive = tf.klines.get("600000.SH", period="1d", count=1000, adjust="forward_additive", as_dataframe=True)

# 不复权
df_raw = tf.klines.get("600000.SH", period="1d", count=1000, adjust="none", as_dataframe=True)

# 比例后复权
df_back = tf.klines.get("600000.SH", period="1d", count=1000, adjust="backward", as_dataframe=True)

# 差值后复权
df_back_add = tf.klines.get("600000.SH", period="1d", count=1000, adjust="backward_additive", as_dataframe=True)
比例 vs 差值的区别:比例复权保持涨跌幅不变(适合收益率计算),差值复权保持价差不变(适合与行情软件对比价格)。如需查看除权因子:
factors = tf.klines.ex_factors(["600000.SH"], as_dataframe=True)
print(factors)
付费订阅一般不会触发频率限制。如果遇到,大概率是用法问题——逐只标的循环调用单只接口会产生大量请求。推荐使用批量接口,一次请求获取多只标的的数据:
# ❌ 不推荐:逐只调用,100 只标的 = 100 次请求
for symbol in symbols:
    df = tf.klines.get(symbol, period="1d", count=1000, as_dataframe=True)

# ✅ 推荐:批量接口,100 只标的 = 1 次请求
dfs = tf.klines.batch(
    symbols,
    period="1d",
    count=1000,
    as_dataframe=True,
    show_progress=True,
)
# dfs 是 dict[str, DataFrame]
print(dfs["600000.SH"].tail())
日内分钟线同理:
# ✅ 批量获取日内分钟 K 线
dfs = tf.klines.intraday_batch(symbols, as_dataframe=True, show_progress=True)
周期参数值说明
1 分钟1m需付费订阅
5 分钟5m从 1m 聚合
10 分钟10m从 1m 聚合
15 分钟15m从 1m 聚合
30 分钟30m从 1m 聚合
60 分钟60m从 1m 聚合
日线1d免费服务可用
周线1w从日线聚合
月线1M从日线聚合
季线1Q从日线聚合
年线1Y从日线聚合
免费服务仅支持日线及以上周期,分钟级 K 线需付费订阅。

行情数据

请依次检查:1. 确认标的代码格式正确标的代码格式为 代码.市场后缀,例如 600000.SHAAPL.US00700.HK常见错误:
  • 600000 — 缺少市场后缀
  • SH600000 — 后缀位置错误
  • 600000.sh — 后缀必须大写
2. 确认系统中存在该标的使用标的信息查询接口确认:
inst = tf.instruments.get("600000.SH")
if inst:
    print(f"找到标的: {inst['symbol']} - {inst['name']}")
else:
    print("标的不存在,请检查代码是否正确")
3. 确认标的属于已支持的市场目前支持的市场后缀:SHSZBJ(A 股)、SHFDCEZCECFXINEGFE(期货)、US(美股)、HK(港股)。4. 确认数据时段
  • 实时行情仅在交易时段有更新
  • 免费服务的日 K 数据为盘后更新,盘中不会实时变动
免费服务付费服务
实时行情✅ 盘中实时更新
分钟 K 线
日 K 线✅ 盘后更新✅ 盘中实时更新
WebSocket 推送✅ 需开启 WebSocket 实时行情功能
频率限制较严格宽松
免费服务地址:https://free-api.tickflow.org
tf = TickFlow.free()  # 使用免费服务

标的代码

使用标的池接口查看:
# 列出所有标的池
universes = tf.universes.list()
for u in universes:
    print(f"{u['id']}: {u['name']} ({u['symbol_count']} 只)")

# 获取某个标的池的全部标的
a_shares = tf.universes.get("CN_Equity_A")
print(f"A 股共 {len(a_shares['symbols'])} 只")
格式为 代码.市场后缀(英文点号分隔),后缀必须大写。
后缀市场示例
SH上海证券交易所600000.SH
SZ深圳证券交易所000001.SZ
BJ北京证券交易所920662.BJ
SHF上海期货交易所au2604.SHF
DCE大连商品交易所i2605.DCE
ZCE郑州商品交易所CF505.ZCE
CFX中国金融期货交易所IF2504.CFX
US美股AAPL.US
HK港股00700.HK

WebSocket 实时行情

WebSocket 实时行情是独立的付费功能,需要:
  • 订阅 Expert 套餐(已包含 WebSocket 实时行情),或
  • 自定义套餐中单独开启「WebSocket 实时行情」功能
每个连接的最大订阅标的数由套餐决定(Expert 默认 100 个标的)。
  • 401:API Key 无效或过期,请检查 Key 是否正确
  • 403:当前套餐不包含 WebSocket 实时行情功能,需升级套餐
遇到 401/403 时不应自动重连,请先检查 API Key 和套餐权限。
不会。连接断开后服务端自动清除该连接的所有订阅。重连后需要重新发送 subscribe 恢复订阅。使用 Python SDK 时,SDK 会自动处理断线重连和订阅恢复。