使用ib_insync修改IBKR TWS订单时遇Error 105问题求助
解决IBKR TWS修改订单时的Error 105问题
Error 105的本质是修改后的订单与TWS端保存的原订单存在未被允许的属性差异——哪怕只改了auxPrice,也可能因为订单对象的隐式属性不一致触发校验失败。以下是针对性的解决步骤:
不要直接修改从
ib.openOrders()获取的订单对象
ib_insync返回的订单实例带有内部状态,直接修改可能导致属性校验不通过。先通过深拷贝创建原订单的精确副本:import copy target_order = None for order in ib.openOrders(): # 替换为你的订单识别逻辑,比如按orderId、订单类型筛选 if order.orderId == YOUR_TARGET_ORDER_ID and order.orderType in ('STP', 'STP LMT'): target_order = copy.deepcopy(order) break使用
ib.modifyOrder()替代placeOrder()
ib_insync提供了专门的modifyOrder()方法处理订单修改,它会自动处理与TWS的校验逻辑,比直接调用placeOrder()更稳定:if target_order: target_order.auxPrice = NEW_TAKE_PROFIT_PRICE ib.modifyOrder(target_order)严格保证非修改字段与原订单完全一致
除了auxPrice,原订单的orderId、clientId、action、totalQuantity、orderType、tif、lmtPrice(如果是止损限价单)等所有属性必须和TWS端的原订单完全匹配。可以打印订单属性排查差异:original_order = next(o for o in ib.openOrders() if o.orderId == YOUR_TARGET_ORDER_ID) # 打印所有属性排查差异 print("原订单属性:", original_order.__dict__) print("修改后订单属性:", target_order.__dict__)检查TWS API设置
确认TWS/IB Gateway的API设置中,已勾选Enable Active X and Socket Clients,且未限制订单修改权限(在Global Configuration > API > Settings中查看)。
内容的提问来源于stack exchange,提问作者funtra512
相关产品推荐
相关产品推荐

