跳转到内容

请求历史逐笔数据

reqHistoricalTicks() 用来请求历史逐笔成交、历史 bid/ask 报价或历史 midpoint。它要求时间参数写得很明确,不能同时乱填多个时间长度条件。

官方参考:Historical Time and Sales

app.reqHistoricalTicks(
96201, # reqId:请求编号
contract, # contract:合约对象
"20260612 15:54:00 US/Eastern", # startDateTime:开始时间
"20260612 15:59:00 US/Eastern", # endDateTime:结束时间
10, # numberOfTicks:请求条数上限
"TRADES", # whatToShow:TRADES / BID_ASK / MIDPOINT
1, # useRth:只使用常规交易时段
False, # ignoreSize:是否忽略只有 size 变化的报价
[], # miscOptions:保留为空
)
参数中文解释注意事项
reqId请求编号回调时原样返回
contract合约对象必须唯一可解析
startDateTime开始时间endDateTime 至少要明确一个合理窗口
endDateTime结束时间推荐先用短窗口测试
numberOfTicks请求条数上限不等于一定只返回这么多,需看 TWS 行为
whatToShow数据类型TRADESBID_ASKMIDPOINT
useRth是否只看常规交易时段回测口径要统一
ignoreSize是否忽略只有 size 变化的 bid/ask多用于 BID_ASK
miscOptions额外选项普通请求传空列表

脚本请求 AAPL 一个已完成交易日的 5 分钟窗口,TRADESBID_ASK 返回逐笔数据,MIDPOINT 没有在 15 秒内收到回调且没有业务错误:

REQUEST_SENT=True;whatToShow=TRADES;start=20260612 15:54:00 US/Eastern;end=20260612 15:59:00 US/Eastern
TRADES_ROWS=198
DONE_FLAGS=TRADES:True
REQUEST_SENT=True;whatToShow=BID_ASK;start=20260612 15:54:00 US/Eastern;end=20260612 15:59:00 US/Eastern
BIDASK_ROWS=163
DONE_FLAGS=BID_ASK:True
REQUEST_SENT=True;whatToShow=MIDPOINT;start=20260612 15:54:00 US/Eastern;end=20260612 15:59:00 US/Eastern
MIDPOINT_ROWS=0
DONE_FLAGS=
INFO_CODES=2104,2106,2158
NON_INFO_ERROR_COUNT=0

MIDPOINT 无回调可能和产品、数据源、时间窗口或账户权限有关。程序不要无限等待;应设置超时,记录 whatToShow、合约、起止时间、信息码和错误码。

历史逐笔常见问题之一是时间参数不合规。不完整时间参数可能触发:

code=10187;msg=2 out of startTime/endTime/timeLength parameters have to be specified

所以示例里明确写出 startDateTimeendDateTime,新手不要先尝试复杂的动态时间拼接。