请求市场规则
reqMarketRule() 不能凭空调用。通常流程是:
- 用
reqContractDetails()请求合约详情。 - 从
ContractDetails.marketRuleIds取出市场规则编号。 - 调用
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 给所有合约用,因为不同产品、交易所和价格区间可能不一样。
| 问题 | 说明 |
|---|---|
固定写死 4563 | AAPL 可以用,不代表其它合约也能用。 |
| 忽略多个 rule id | 复杂合约可能有多个市场规则,要结合合约详情判断。 |
只看 minTick | minTick 是简化值,价格分段规则要看 marketRule()。 |