跳转到内容

总览

可用 Tick 类型指的是一档行情中可以请求或接收的具体字段。普通买价、卖价、最新价、成交量等字段通常不需要额外参数;部分字段需要在 reqMktData()genericTickList 中写入对应编号。

本组页面只讲常见且容易误用的几个字段:停牌、可做空、成交量数据、实时成交量和 IB 股息数据。

官方参考:Available Tick Types

app.reqMktData(
97802,
aapl_stock(),
"233",
False,
False,
[],
)

这里 "233" 就是 genericTickList。多个编号可以用逗号连接,例如 "233,236"

genericTickList 是“我要额外字段”的请求列表;回调里的 tickType 是 TWS 返回字段时使用的字段编号。两者相关,但不总是同一个数字。开发时应同时保存请求编号、genericTickList、回调 tickType 和原始值。

页面常见 tick / generic tick典型回调用途
停牌tick type 49tickGeneric()判断标的是否处于停牌或恢复交易状态。
可做空generic tick 236tickGeneric()判断股票可做空程度。
成交量数据基础 size ticktickSize()接收普通成交量、买卖盘数量等字段。
实时成交量generic tick 233tickString()接收实时成交量字符串。
IB 股息数据generic tick 456tickString()接收 IB 计算的股息相关字段。
回调说明
tickPrice()价格类字段。
tickSize()数量类字段。
tickString()字符串类字段,常见于 RTVolume、IB Dividends。
tickGeneric()通用数值字段,常见于 Shortable、Halted 等。
tickReqParams()TWS 接受行情请求后返回最小价格跳动、交易所映射和快照权限信息。
error()权限不足、字段不允许或请求未建立。

AAPL 分别请求基础行情、233236456。所有请求都到达 TWS,并返回 tickReqParams()

REQUESTS=97801:base:EMPTY,97802:rt_volume_233:233,97803:shortable_236:236,97805:ib_dividends_456:456
TICK_REQ_PARAMS_ROWS=4
TICK_REQ_PARAMS=reqId=97801;name=base;minTick=0.01;bboExchange=EMPTY;snapshotPermissions=0
TICK_REQ_PARAMS=reqId=97802;name=rt_volume_233;minTick=0.01;bboExchange=EMPTY;snapshotPermissions=0
TICK_REQ_PARAMS=reqId=97803;name=shortable_236;minTick=0.01;bboExchange=EMPTY;snapshotPermissions=0
TICK_REQ_PARAMS=reqId=97805;name=ib_dividends_456;minTick=0.01;bboExchange=EMPTY;snapshotPermissions=0

如果账户没有对应 API 顶层行情权限,就不会收到字段值:

PRICE_ROWS=0
SIZE_ROWS=0
STRING_ROWS=0
GENERIC_ROWS=0
ERROR=reqId=97801;name=base;code=10089;msg=请求的市场数据对于API来说需要额外订阅
ERROR=reqId=97802;name=rt_volume_233;code=10089;msg=请求的市场数据对于API来说需要额外订阅
ERROR=reqId=97803;name=shortable_236;code=10089;msg=请求的市场数据对于API来说需要额外订阅
ERROR=reqId=97805;name=ib_dividends_456;code=10089;msg=请求的市场数据对于API来说需要额外订阅

这说明请求结构是通的,限制在行情订阅权限。

先确认基础一档行情能返回价格和数量,再逐个添加 generic tick。不要一次请求很多字段;否则只看到错误时,很难判断是哪个字段、哪个权限或哪个合约导致问题。