vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 10
声望: 1

simnow最近更新穿透式了,通知说下单需要填写ExchangeID字段。通知地址:http://www.simnow.com.cn/notification/id/62.action
目前最新版的vnpy2.0.5在simnow下单返回错误:
交易委托失败,代码:146,信息:CTP:缺少ExchangeID字段,请填入ExchangeID,CTP

看了下感觉可能涉及vnpy底层交易接口代码修改,是吗?如何加入ExchangeID字段?

Member
avatar
加入于:
帖子: 10
声望: 1

研究了下,在ctp_gateway.py的CtpTdApi对象中的send_Order下单方法中,在ctp_req字典中加入一项"ExchangeID": req.exchange.value.split('.')[-1],目前可以下单了。

Administrator
avatar
加入于:
帖子: 4122
声望: 229

已在DEV分支更新

Member
avatar
加入于:
帖子: 33
声望: 0

测试了一下楼主的办法,是可行的。我在cancel_order中也加入了"ExchangeID": req.exchange.value.split('.')[-1],否则会导致撤单失败。另外求助VNPY的管理者大神,能不能对这个BUG进行官方解释一波。

Member
加入于:
帖子: 11
声望: 0

req['ExchangeID'] = orderReq.exchange
1.92加这么一行就可以了

Member
avatar
加入于:
帖子: 2
声望: 0

目前生产最新版本为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
问题确实解决了!

Member
avatar
加入于:
帖子: 8
声望: 0

里昂 wrote:

研究了下,在ctp_gateway.py的CtpTdApi对象中的send_Order下单方法中,在ctp_req字典中加入一项"ExchangeID": req.exchange.value.split('.')[-1],目前可以下单了。
按你说的做了,仍然老样子,错误号146

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3