接收市场扫描器参数
scannerParameters(xml) 是 reqScannerParameters() 的返回回调。它只返回一个参数:XML 字符串。
这段 XML 不是给人直接阅读的,实际开发中应该用 XML 解析器提取需要的值。不要用字符串截取去猜位置,因为 TWS 版本更新后 XML 节点顺序可能变化。
官方参考:IBKR Campus - Receive Market Scanner Parameters
def scannerParameters(self, xml: str) -> None: # xml 很大,正式程序里建议保存或解析,不要完整打印到日志。 self.parameters_xml = xml self.parameters_done.set()import xml.etree.ElementTree as ET
def summarize_scanner_xml(xml: str) -> None: """提取扫描器 XML 中常用节点,帮助确认可用参数。""" root = ET.fromstring(xml)
instruments = [] locations = [] scan_codes = []
for element in root.iter(): tag = element.tag.lower() text = (element.text or "").strip() code = element.attrib.get("code") or element.attrib.get("name") or text
if not code: continue if "instrument" in tag: instruments += [code] elif "location" in tag: locations += [code] elif "scan" in tag and "code" in tag: scan_codes += [code]
print("产品类型数量:", len(instruments)) print("市场范围数量:", len(locations)) print("扫描规则数量:", len(scan_codes)) print("前几个市场范围:", locations[:8])PARAMETERS_ROOT=ScanParameterResponseINSTRUMENT_COUNT=784SAMPLE_INSTRUMENTS=STK,STK,STK,STK,STK,STK,STK,STKLOCATION_COUNT=321SAMPLE_LOCATIONS=STK.US,STK.US.MAJOR,STK.NYSE,STK.AMEX,STK.ARCA,STK.NASDAQ,STK.NASDAQ.NMS,STK.NASDAQ.SCMSCAN_CODE_COUNT=771SAMPLE_SCAN_CODES=SCAN_etfAssets_DESC,SCAN_etfAssets_ASC,SCAN_etfExpense_DESC不同 TWS 版本返回的数量可能不同。开发时重点不是数字完全一致,而是确认你要用的 instrument、locationCode、scanCode 是否存在且可以组合。
常用字段含义
Section titled “常用字段含义”| 字段 | 中文说明 |
|---|---|
instrument | 产品类型,例如股票、期货、指数、期权组合等。 |
locationCode | 市场或地区范围,例如美国主要股票市场。 |
scanCode | 扫描规则,例如涨幅榜、成交量活跃、最活跃等。 |
| filter / setting | 额外过滤条件,例如价格、成交量、市值、期权成交量等。 |
常见过滤条件形态
Section titled “常见过滤条件形态”过滤条件会出现在 XML 的 FilterList 中。不同产品和扫描规则支持的过滤项不同,常见形态包括:
| 过滤方向 | 例子 | 中文含义 |
|---|---|---|
| 价格范围 | abovePrice、belowPrice | 只返回价格高于或低于某个值的合约。 |
| 成交量 | aboveVolume | 只返回成交量高于某个值的合约。 |
| 市值 | usdMarketCapAbove | 只返回美元市值高于某个值的合约。 |
| 涨跌幅 | 依扫描类型而定 | 按涨跌幅、波动率或其它指标筛选。 |
| 期权相关 | 依扫描类型而定 | 期权成交量、隐含波动率等条件。 |
XML 中的节点和属性很多,不同扫描类型支持的过滤条件也不同。写界面或配置文件时,最好把 instrument、locationCode、scanCode 作为一组保存,避免用户选择到彼此不匹配的组合。
先把 XML 解析成下拉选项或配置表,再让用户选择组合。这样比把 STK.US.MAJOR、HOT_BY_VOLUME 写死在界面里更可靠。
写第一个扫描器时,可以先使用常见组合 STK、STK.US.MAJOR、HOT_BY_VOLUME,等能返回结果后再逐步增加价格、成交量或市值过滤。