跳转到内容

接收历史逐笔数据

历史逐笔数据的回调取决于 whatToShow。写代码时不要只实现一个回调然后期待所有类型都进来。

官方参考:Historical Time and Sales

def historicalTicksLast(self, reqId, ticks, done):
"""接收 TRADES 历史逐笔成交。"""
for tick in ticks:
print(tick.time, tick.price, tick.size, tick.exchange)
def historicalTicksBidAsk(self, reqId, ticks, done):
"""接收 BID_ASK 历史逐笔报价。"""
for tick in ticks:
print(tick.time, tick.priceBid, tick.priceAsk, tick.sizeBid, tick.sizeAsk)
def historicalTicks(self, reqId, ticks, done):
"""接收 MIDPOINT 历史逐笔中点价。"""
for tick in ticks:
print(tick.time, tick.price, tick.size)
字段中文解释
timeUnix 时间戳
price成交价
size成交数量
exchange成交交易所
specialConditions特殊成交条件

AAPL TRADES 参考输出:

TRADES_ROWS=198
DONE_FLAGS=TRADES:True
TRADE=time=1781294040;price=291.15;size=30;exchange=NASDAQ;special= F I
TRADE=time=1781294040;price=291.15;size=40;exchange=NASDAQ;special= F
字段中文解释
timeUnix 时间戳
priceBid买价
priceAsk卖价
sizeBid买价数量
sizeAsk卖价数量
tickAttribBidAskbid/ask 附加属性

AAPL BID_ASK 参考输出:

BIDASK_ROWS=163
DONE_FLAGS=BID_ASK:True
BIDASK=time=1781294039;priceBid=291.14;priceAsk=291.15;sizeBid=1640;sizeAsk=1200;attrib=BidPastLow: 0, AskPastHigh: 0
BIDASK=time=1781294040;priceBid=291.14;priceAsk=291.15;sizeBid=1640;sizeAsk=1240;attrib=BidPastLow: 0, AskPastHigh: 0

MIDPOINT 在同一时间窗口没有收到回调:

REQUEST_SENT=True;whatToShow=MIDPOINT;start=20260612 15:54:00 US/Eastern;end=20260612 15:59:00 US/Eastern
MIDPOINT_ROWS=0
DONE_FLAGS=
NON_INFO_ERROR_COUNT=0

done=True 表示该请求批次结束。保存数据时可以等 done=True 后再统一入库,避免半截数据被策略误用。

如果等待超时后没有收到任何 historicalTicks* 回调,也没有非信息类错误码,程序仍应主动结束本次等待并记录状态。历史逐笔请求不要只靠错误码判断成败。