跳转到内容

接收直方图数据

histogramData() 一次回调会给出一个直方图数组。数组里的每个元素通常包含 pricesize 两个核心字段。

官方参考: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=2951
HISTOGRAM=reqId=4301;price=296.0;size=180840
HISTOGRAM=reqId=4301;price=297.0;size=60640
HISTOGRAM=reqId=4301;price=298.0;size=57320
HISTOGRAM=reqId=4301;price=299.0;size=32440
HISTOGRAM=reqId=4301;price=300.0;size=620880

1 day 请求也收到了回调,但数组为空:

CALLBACK_RECEIVED=reqId=4303;name=aapl_rth_1_day;value=True
HISTOGRAM_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 的价格分布快照。