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

description
错误如图,行情订阅失败,找不到合约rb2005.SHFE,这是什么原因啊,谢谢各位大神。

Member
加入于:
帖子: 5
声望: 0
    # 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所用的交易所缩写都有细微差别,没看到你的代码,不确定是不是这个问题。

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

上面的里面,上半段是JQ的,下半段是VNPY的。VNPY自己在rqdata里面做了一个枚举常量来切换,jqdata或者也做枚举,或者做其他的形式,也需要做转换。这里稍不小心就容易出问题。

Member
avatar
加入于:
帖子: 6
声望: 3

我直接在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]}"
© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3