跳转到内容

请求市场规则

reqMarketRule() 不能凭空调用。通常流程是:

  1. reqContractDetails() 请求合约详情。
  2. ContractDetails.marketRuleIds 取出市场规则编号。
  3. 调用 reqMarketRule(marketRuleId)
def contractDetails(self, reqId, contractDetails):
rule_ids = contractDetails.marketRuleIds
first_rule_id = rule_ids.split(",")[0].strip()
if first_rule_id.isdigit():
self.reqMarketRule(int(first_rule_id))

AAPL 返回的 marketRuleIds 可能是一串重复或多个编号,示例中取第一个可用编号即可开始检查。更复杂的产品可能需要结合交易所、路由和返回顺序做更细处理。

app.reqMarketRule(4563)
参数中文意思
4563市场规则 ID,来自合约详情的 marketRuleIds

如果 marketRuleIds 为空,先检查合约是否解析成功。不要手写一个固定规则 ID 给所有合约用,因为不同产品、交易所和价格区间可能不一样。

问题说明
固定写死 4563AAPL 可以用,不代表其它合约也能用。
忽略多个 rule id复杂合约可能有多个市场规则,要结合合约详情判断。
只看 minTickminTick 是简化值,价格分段规则要看 marketRule()