接收历史逐笔数据
历史逐笔数据的回调取决于 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)TRADES 字段
Section titled “TRADES 字段”| 字段 | 中文解释 |
|---|---|
time | Unix 时间戳 |
price | 成交价 |
size | 成交数量 |
exchange | 成交交易所 |
specialConditions | 特殊成交条件 |
AAPL TRADES 参考输出:
TRADES_ROWS=198DONE_FLAGS=TRADES:TrueTRADE=time=1781294040;price=291.15;size=30;exchange=NASDAQ;special= F ITRADE=time=1781294040;price=291.15;size=40;exchange=NASDAQ;special= FBID_ASK 字段
Section titled “BID_ASK 字段”| 字段 | 中文解释 |
|---|---|
time | Unix 时间戳 |
priceBid | 买价 |
priceAsk | 卖价 |
sizeBid | 买价数量 |
sizeAsk | 卖价数量 |
tickAttribBidAsk | bid/ask 附加属性 |
AAPL BID_ASK 参考输出:
BIDASK_ROWS=163DONE_FLAGS=BID_ASK:TrueBIDASK=time=1781294039;priceBid=291.14;priceAsk=291.15;sizeBid=1640;sizeAsk=1200;attrib=BidPastLow: 0, AskPastHigh: 0BIDASK=time=1781294040;priceBid=291.14;priceAsk=291.15;sizeBid=1640;sizeAsk=1240;attrib=BidPastLow: 0, AskPastHigh: 0MIDPOINT 在同一时间窗口没有收到回调:
REQUEST_SENT=True;whatToShow=MIDPOINT;start=20260612 15:54:00 US/Eastern;end=20260612 15:59:00 US/EasternMIDPOINT_ROWS=0DONE_FLAGS=NON_INFO_ERROR_COUNT=0done 标志
Section titled “done 标志”done=True 表示该请求批次结束。保存数据时可以等 done=True 后再统一入库,避免半截数据被策略误用。
如果等待超时后没有收到任何 historicalTicks* 回调,也没有非信息类错误码,程序仍应主动结束本次等待并记录状态。历史逐笔请求不要只靠错误码判断成败。