跳转到内容

接收市场规则

请求市场规则后,TWS 会通过 marketRule() 回调返回一组价格区间。

def marketRule(self, marketRuleId, priceIncrements):
for item in priceIncrements:
print(item.lowEdge, item.increment)
字段中文意思
marketRuleId市场规则编号。
lowEdge该价格区间的起始价格。
increment该区间允许的最小价格跳动。

如果返回多行,表示不同价格区间有不同最小跳动。例如低价区间可能按 0.0001 跳,高价区间按 0.01 或更大跳。

MARKET_RULE=marketRuleId=4563;lowEdge=0.0;increment=0.01

这表示 AAPL 在该规则下,从 0.0 价格区间开始,合法价格应按 0.01 递增。100.00100.01 合法;100.005 不合法。

如果返回多条价格区间,应该选择“最后一个 lowEdge <= price 的规则”。例如:

def find_increment(price: float, rows: list[tuple[float, float]]) -> float:
selected_increment = rows[0][1]
for low_edge, increment in rows:
if price >= low_edge:
selected_increment = increment
else:
break
return selected_increment

实际项目里建议用 Decimal 保存和比较价格,避免浮点误差影响合法价格判断。