错误如图,行情订阅失败,找不到合约rb2005.SHFE,这是什么原因啊,谢谢各位大神。
错误如图,行情订阅失败,找不到合约rb2005.SHFE,这是什么原因啊,谢谢各位大神。
# JQData证券代码标准格式(后缀)
# 由于同一代码可能代表不同的交易品种,JQData给每个交易品种后面都添加了该市场特定的代码后缀,
# 用户在调用API时,需要将参数security传入带有该市场后缀的证券代码,如security='600519.XSHG',
# 以便于区分实际调用的交易品种。以下列出了每个交易市场的代码后缀和示例代码。
# 交易市场 代码后缀 示例代码 证券简称
# 上海证券交易所 .XSHG '600519.XSHG' 贵州茅台
# 深圳证券交易所 .XSHE '000001.XSHE' 平安银行
# 中金所 .CCFX 'IC9999.CCFX' 中证500主力合约
# 大商所 .XDCE 'A9999.XDCE' 豆一主力合约
# 上期所 .XSGE 'AU9999.XSGE' 黄金主力合约
# 郑商所 .XZCE 'CY8888.XZCE' 棉纱期货指数
# 上海国际能源期货交易所 .XINE 'SC9999.XINE' 原油主力合约
# CFFEX = "CFFEX" # China Financial Futures Exchange
# SHFE = "SHFE" # Shanghai Futures Exchange
# CZCE = "CZCE" # Zhengzhou Commodity Exchange
# DCE = "DCE" # Dalian Commodity Exchange
# INE = "INE" # Shanghai International Energy Exchange
# SSE = "SSE" # Shanghai Stock Exchange
# SZSE = "SZSE" # Shenzhen Stock Exchange
# SGE = "SGE" # Shanghai Gold Exchange
# WXE = "WXE" # Wuxi Steel Exchange
RQ,JQ和VNPY所用的交易所缩写都有细微差别,没看到你的代码,不确定是不是这个问题。
上面的里面,上半段是JQ的,下半段是VNPY的。VNPY自己在rqdata里面做了一个枚举常量来切换,jqdata或者也做枚举,或者做其他的形式,也需要做转换。这里稍不小心就容易出问题。
我直接在rqdata.py改了下面内容,假装rqdata就是jqdata,避免其他地方代码可能的代码修改。还没有全面考虑,上期的合约在回测中试过是OK的
def to_rq_symbol(self, symbol: str, exchange: Exchange):
"""
CZCE product of RQData has symbol like "TA1905" while
vt symbol is "TA905.CZCE" so need to add "1" in symbol.
"""
exchanges = {Exchange.CFFEX: 'CCFX',
Exchange.INE: 'XINE',
Exchange.SHFE: 'XSGE',
Exchange.CZCE: 'XZCE',
Exchange.DCE: 'XDCE',
Exchange.SZSE: 'XSHE',
Exchange.SSE: 'XSHG'}
if exchange is Exchange.CZCE:
for count, word in enumerate(symbol):
if word.isdigit():
break
# Check for index symbol
time_str = symbol[count:]
if time_str in ["88", "888", "99", '9999']:
return symbol
# noinspection PyUnboundLocalVariable
product = symbol[:count]
year = symbol[count]
month = symbol[count + 1:]
if year == "9":
year = "1" + year
else:
year = "2" + year
rq_symbol = f"{product}{year}{month}".upper()
else:
rq_symbol = symbol.upper()
return f"{rq_symbol}.{exchanges[exchange]}"