simnow最近更新穿透式了,通知说下单需要填写ExchangeID字段。通知地址:http://www.simnow.com.cn/notification/id/62.action
目前最新版的vnpy2.0.5在simnow下单返回错误:
交易委托失败,代码:146,信息:CTP:缺少ExchangeID字段,请填入ExchangeID,CTP
看了下感觉可能涉及vnpy底层交易接口代码修改,是吗?如何加入ExchangeID字段?
simnow最近更新穿透式了,通知说下单需要填写ExchangeID字段。通知地址:http://www.simnow.com.cn/notification/id/62.action
目前最新版的vnpy2.0.5在simnow下单返回错误:
交易委托失败,代码:146,信息:CTP:缺少ExchangeID字段,请填入ExchangeID,CTP
看了下感觉可能涉及vnpy底层交易接口代码修改,是吗?如何加入ExchangeID字段?
研究了下,在ctp_gateway.py的CtpTdApi对象中的send_Order下单方法中,在ctp_req字典中加入一项"ExchangeID": req.exchange.value.split('.')[-1],目前可以下单了。
已在DEV分支更新
测试了一下楼主的办法,是可行的。我在cancel_order中也加入了"ExchangeID": req.exchange.value.split('.')[-1],否则会导致撤单失败。另外求助VNPY的管理者大神,能不能对这个BUG进行官方解释一波。
req['ExchangeID'] = orderReq.exchange
1.92加这么一行就可以了
目前生产最新版本为CTP V6.3.17_P4_20190628),客户端在使用tradeapi时,
业务指令中有InvestorID和exchangeID的域都必须填写,之前没有填写的后台将会返回错误。
其中:交易所编号ExchangeID全部大写CFFEX、CZCE、DCE、INE、SHFE;
`
def cancelOrder(self, cancelOrderReq):
"""撤单"""
self.reqID += 1
req = {}
req['ExchangeID'] = cancelOrderReq.exchange # 交易委托失败,代码:146,信息:CTP:缺少ExchangeID字段,请填入ExchangeID
req['InstrumentID'] = cancelOrderReq.symbol
req['ExchangeID'] = cancelOrderReq.exchange
def sendOrder(self, orderReq):
"""发单"""
self.reqID += 1
self.orderRef += 1
req = {}
req['ExchangeID'] = orderReq.exchange # 交易委托失败,代码:146,信息:CTP:缺少ExchangeID字段,请填入ExchangeID
req['InstrumentID'] = orderReq.symbol
req['LimitPrice'] = orderReq.price
`
vnpy\trader\gateway\ctpGateway\ctpGateway.py
问题确实解决了!
里昂 wrote:
研究了下,在ctp_gateway.py的CtpTdApi对象中的send_Order下单方法中,在ctp_req字典中加入一项"ExchangeID": req.exchange.value.split('.')[-1],目前可以下单了。
按你说的做了,仍然老样子,错误号146