请求直方图数据
reqHistogramData() 用来请求某个合约在一段时间内的价格直方图。它的参数比历史 K 线少,不需要 barSizeSetting,因为它不按时间切 bar。
官方参考:Histogram Data
Python 示例
Section titled “Python 示例”from ibapi.contract import Contract
def make_aapl_contract(): """创建 AAPL 股票合约。""" contract = Contract() contract.symbol = "AAPL" contract.secType = "STK" contract.exchange = "SMART" contract.currency = "USD" contract.primaryExchange = "NASDAQ" return contract
contract = make_aapl_contract()
app.reqHistogramData( 4301, # reqId:请求编号 contract, # contract:合约对象 True, # useRTH:True 表示只统计常规交易时段 "1 week", # period:统计最近 1 周)| 参数 | 中文解释 | 说明 |
|---|---|---|
tickerId / reqId | 请求编号 | 回调时用于识别请求 |
contract | 合约对象 | 必须能被 TWS 识别 |
useRTH | 是否只使用常规交易时段 | True 只统计常规交易时段,False 包含更多时段 |
period | 统计窗口 | 例如 1 day、1 week。可用值受 TWS 支持范围影响。 |
同一合约分别测试 1 week、1 day,TWS 返回历史数据服务器正常的系统提示,并触发 histogramData() 回调:
REQUEST_SENT=reqId=4301;symbol=AAPL;useRTH=True;period=1 weekREQUEST_SENT=reqId=4302;symbol=AAPL;useRTH=False;period=1 weekREQUEST_SENT=reqId=4303;symbol=AAPL;useRTH=True;period=1 dayCONNECTED=TrueCONTRACT=AAPL STK SMART NASDAQ USDCALLBACK_RECEIVED=reqId=4301;name=aapl_rth_1_week;value=TrueHISTOGRAM_ROWS=reqId=4301;name=aapl_rth_1_week;count=2951CALLBACK_RECEIVED=reqId=4302;name=aapl_all_1_week;value=TrueHISTOGRAM_ROWS=reqId=4302;name=aapl_all_1_week;count=2999CALLBACK_RECEIVED=reqId=4303;name=aapl_rth_1_day;value=TrueHISTOGRAM_ROWS=reqId=4303;name=aapl_rth_1_day;count=0NON_INFO_ERROR_COUNT=0所以直方图示例代码应当带超时处理。没有错误码不等于已经拿到数据;只有收到 histogramData() 才说明本次请求有明确结果。数组为空也要作为一种结果处理。
直方图仍依赖历史数据权限和合约可用性。建议先用 reqContractDetails() 确认合约,再用一个较短 period 测试返回结果。不要一开始就对大量合约批量请求,否则很容易把问题混在限频、权限和合约解析里。