跳转到内容

成交量数据

成交量数据在 TWS API 中可能来自不同字段。普通一档行情里的成交量、买盘数量、卖盘数量通常通过 tickSize() 返回;实时成交量字符串则需要 generic tick 233

本页讲普通数量类字段,RTVolume 单独在下一页说明。

官方参考:Available Tick Types

def tickSize(self, reqId, tickType, size):
print("数量字段", reqId, tickType, size)

tickType 用来区分这是买盘数量、卖盘数量、成交量还是其它数量字段。不要把所有 tickSize() 都当作总成交量。

普通成交量不需要 generic tick:

app.reqMktData(97801, aapl_stock(), "", False, False, [])

如果你需要更细的实时成交量字符串,再请求 233

app.reqMktData(97802, aapl_stock(), "233", False, False, [])
tick type中文含义回调
0买盘数量tickSize()
3卖盘数量tickSize()
5最近成交数量tickSize()
8当日成交量tickSize()

美股成交量字段有时以手数或批量单位表达,展示前要结合 TWS 设置和官方说明确认单位,不要把所有市场都按同一个乘数处理。

项目普通成交量RTVolume
请求参数genericTickList=""genericTickList="233"
常见回调tickSize()tickString()
数据形态数量字段字符串,可能包含多个分隔字段
适合用途基础行情展示更细的实时成交量解析

AAPL 基础一档行情请求到达 TWS,但没有收到数量字段:

SIZE_ROWS=0
ERROR=reqId=97801;name=base;code=10089;msg=请求的市场数据对于API来说需要额外订阅
ERROR=reqId=97801;name=base;code=300;msg=无法使用tickerId找到EId::97801

这属于市场数据权限问题。代码结构正确不代表一定能收到成交量字段。

程序里应把数量字段按 tickType 分开存储。例如:

size_ticks = {}
def tickSize(self, reqId, tickType, size):
size_ticks[(reqId, tickType)] = size

后续展示时再把 tick type 映射成中文名称,避免把买量、卖量、总成交量混在一起。