IB Python API调用原生接口下单无报错但订单未生成问题咨询
IB Python API订单提交失败排查原因
核心问题
你当前代码未提交订单的最直接原因是未调用官方提供的订单发送接口,除此之外还有多处参数配置错误,具体如下:
- 缺失
placeOrder调用:你在start()方法中仅构造了合约、订单对象,没有执行self.placeOrder(self.nextOrderId, contract, order)将订单发送到TWS服务端,自然不会生成订单。 - 订单参数错误:你设置的是市价单(
orderType="MKT"),不需要填写lmtPrice参数,该参数仅限价单(LMT)、止损限价单等需要价格限制的订单类型必填。 - 合约参数错误:
primaryExchange字段不能设置为SMART,SMART是IB的智能路由系统并非实际交易所,你需要填写标的真实的上市交易所,可先在TWS客户端搜索该标的查询其主交易所配置。 - 冗余的手动订单ID赋值:你在
main中手动设置app.nextOrderId = 1无意义,IB API会通过nextValidId回调返回合法可用的订单ID,提交订单时直接使用回调返回的self.nextOrderId即可。 - TWS配置检查:确认TWS全局配置中API设置项开启了套接字客户端,端口和代码中填写的7497一致,关闭了只读API权限,允许本地主机连接。
修正后的start()方法示例
def start(self): contract = Contract() contract.symbol = "DAI" contract.secType = 'STK' contract.exchange = 'SMART' contract.currency = "EUR" # 替换为DAI实际的主交易所,比如如果是XETRA就填"IBIS" contract.primaryExchange = "IBIS" order = Order() order.action = "Buy" order.totalQuantity = 1 order.orderType = "MKT" # 发送订单 self.placeOrder(self.nextOrderId, contract, order)
内容的提问来源于stack exchange,提问作者micastik
相关产品推荐
相关产品推荐

