调试易盛tap发现行情订阅,不支持ICE的合约(YG1911.ICE),
订阅错误代码:SubscribeQuote:(72103, 7),查阅api文档是:品种不存在。但是debug发现品种是YG没有问题,哪位大神帮忙看看怎么回事。
调试易盛tap发现行情订阅,不支持ICE的合约(YG1911.ICE),
订阅错误代码:SubscribeQuote:(72103, 7),查阅api文档是:品种不存在。但是debug发现品种是YG没有问题,哪位大神帮忙看看怎么回事。
阅读2.05代码有个疑问:
为什么ICUS(ICE美国)和ICEU(ICE欧洲),定义枚举类型都是Exchange.ICE
枚举和字符串转换是是不是会出问题啊。
用Python的交易员 wrote:
- 测试环境大部分合约都没有行情,测试时我们发现CME的几个外汇是好的,比如JPY
- 类型转换这块目前我们没遇到问题,如果发现了请联系我们
刚刚研究vnpy,python也是小白,不太敢确定是否有问题。
debug时发现YG1911.ICE的交易所no(应该ICUS,结果获取到ICEU),
可能的问题EXCHANGE_VT2TAP上,debug信息如下:
ContractInfo(name='Mini Gold 1911', exchange_no=**'ICUS'**, commodity_type='F', commodity_no='YG', contract_no='1911')
tap_contract.Commodity.ExchangeNo = EXCHANGE_VT2TAP[req.exchange] 执行后:
tap_contract.Commodity
--CommodityNo='YG'
--CommodityType='F'
--ExchangeNo=‘ICEU’
因此做了下面修改,觉得应该是对的。
tap_contract.Commodity.ExchangeNo = contract_info.exchange_no
def subscribe(self, req: SubscribeRequest):
"""
Subscribe to new market data update.
"""
contract_info = contract_infos.get((req.symbol, req.exchange), None)
if not contract_info:
self.gateway.write_log(
f"找不到匹配的合约:{req.symbol}和{req.exchange.value}")
return
tap_contract = TapAPIContract()
# tap_contract.Commodity.ExchangeNo = EXCHANGE_VT2TAP[req.exchange]
tap_contract.Commodity.ExchangeNo = contract_info.exchange_no
tap_contract.Commodity.CommodityType = contract_info.commodity_type
tap_contract.Commodity.CommodityNo = contract_info.commodity_no
tap_contract.ContractNo1 = contract_info.contract_no
tap_contract.CallOrPutFlag1 = TAPI_CALLPUT_FLAG_NONE
tap_contract.CallOrPutFlag2 = TAPI_CALLPUT_FLAG_NONE
self.api.SubscribeQuote(tap_contract)
方便的话请在Github开个issue吧,我们下个版本来修复