接收直方图数据
histogramData() 一次回调会给出一个直方图数组。数组里的每个元素通常包含 price 和 size 两个核心字段。
官方参考:Histogram Data
def histogramData(self, reqId, items): """接收价格直方图数组。""" print(f"请求 {reqId} 返回 {len(items)} 个价格档位") for item in items[:5]: print(item.price, item.size)| 字段 | 中文解释 |
|---|---|
price | 价格档位 |
size | 该价格档位对应的数量 |
AAPL 1 week 参考输出:
HISTOGRAM_ROWS=reqId=4301;name=aapl_rth_1_week;count=2951HISTOGRAM=reqId=4301;price=296.0;size=180840HISTOGRAM=reqId=4301;price=297.0;size=60640HISTOGRAM=reqId=4301;price=298.0;size=57320HISTOGRAM=reqId=4301;price=299.0;size=32440HISTOGRAM=reqId=4301;price=300.0;size=6208801 day 请求也收到了回调,但数组为空:
CALLBACK_RECEIVED=reqId=4303;name=aapl_rth_1_day;value=TrueHISTOGRAM_ROWS=reqId=4303;name=aapl_rth_1_day;count=0你的程序应同时处理三种情况:收到非空数组、收到空数组、超时没有回调。
直方图没有时间序列顺序,不要按 K 线结构保存。更合适的结构是:
rows = [ {"reqId": reqId, "price": item.price, "size": item.size} for item in items]如果你要画图,可以把 price 做横轴,size 做纵轴。若要和 K 线结合,应明确它只是这段 period 的价格分布快照。