接收组成交易所
smartComponents() 是 reqSmartComponents() 的回调,用来返回 BBO 代码对应的组成交易所映射。
Python 示例
Section titled “Python 示例”def smartComponents(self, reqId, smartComponentMap): """接收 SMART 组成交易所映射。""" for bit_number, exchange, exchange_letter in smartComponentMap: print( reqId, # 请求编号 bit_number, # 交易所位编号 exchange, # 交易所名称或代码 exchange_letter, # 交易所字母标识 )| 字段 | 中文解释 | 使用建议 |
|---|---|---|
reqId | 请求编号。 | 对应 reqSmartComponents() 传入的编号。 |
bit_number | 交易所位编号,通常用于映射。 | 保存原值,不要把它当交易所排序。 |
exchange | 交易所名称或代码。 | 可用于展示和排查 SMART BBO 来源。 |
exchange_letter | 交易所字母标识。 | 保存原值,不要自行翻译或重编码。 |
| 字段 | 建议 |
|---|---|
bboExchange | 和映射结果一起保存,方便后续复用 |
exchange | 用作展示或排查 |
exchange_letter | 保留原始值,不要自行翻译 |
updated_at | 记录映射获取时间 |
没有回调怎么办
Section titled “没有回调怎么办”如果请求前没有拿到有效 bboExchange,或者账户行情权限不足,可能收不到 smartComponents()。AAPL 参考输出如下:
CONNECTED=TrueTICK_REQ_PARAMS_ROWS=1TICK_REQ_PARAMS=tickerId=97301;minTick=0.01;bboExchange=;snapshotPermissions=0SMART_COMPONENT_ROWS=0ERROR=reqId=97301;code=10089;msg=请求的市场数据对于API来说需要额外订阅。点击“市场数据连接”对话框中的链接获取更多详情。:AAPL NASDAQ.NMS/TOP/ALLERROR=reqId=97302;code=321;msg=确认请求时出错。:-'V':导致- Invalid BBO exchange/security type codeERROR=reqId=97301;code=300;msg=无法使用tickerId找到EId::97301遇到这种情况,应先回到一档行情请求,确认 tickReqParams() 中的 bboExchange 是否非空,再排查组成交易所接口本身。
保存结构示例
Section titled “保存结构示例”smart_component_rows = []
def smartComponents(self, reqId, smartComponentMap): for bit_number, exchange, exchange_letter in smartComponentMap: row = { "reqId": reqId, "bitNumber": bit_number, "exchange": exchange, "exchangeLetter": exchange_letter, } smart_component_rows.append(row)这类映射数据变化频率不高,可以作为参考表保存。真正的一档报价仍然来自 tickPrice()、tickSize()、tickString() 等行情回调。