vs code 代码提示不全_量化平台代码中,XSHG 和 XSHE代码的含义

3e2a77136b03d0264de4a9c028d83dca.png

2009年全国金融标准化技术委员会采标ISO 10383:2003 (Market Identification Code)为国家标准《证券和相关金融工具交易所和市场识别码》(GB/T23696-2009)

其中XSHG 代表 Shan(g)hai,XSHE 代表 Sh(e)nzhen。用来区别只使用6位代码的时候出现代码重名的问题。例如代码 000001,在上交所代表上证指数,在深交所则代表平安银行。

而按照此国家标准,代码全称 000001.XSHE 则代表深交所的平安银行,000001.XSHG 则代表上证指数。

为此常见的量化平台,例如聚宽提供了 API 函数 ,来进行常规的‘sh000001’,‘600519’等证券代码向ISO 10383:2003 (Market Identification Code)的归一化处理。

def normalize_code(code):
    """
    归一化证券代码

    :param code 如000001
    :return 证券代码的全称 如000001.XSHE
    """
    return JQDataClient.instance().normalize_code(**locals())

但是调用它需要登录聚宽账户,免费试用账户还有每天调用1000万次数据查询请求的限制。超过了会这样提示:

Exception: 您当天的查询条数超过了每日最大查询限制:1000万条;
付费可增加流量权限,详情请咨询管理员,微信号:马赛克马赛克

转换效果如下图所示:

0131c553aae5bb2ba6a8c0eaf2c36b00.png

幸亏它其实规则不复杂,所以我重新自己用本地Python代码实现了一遍。

class EXCHANGE(_const):
    XSHG = 'XSHG'
    SSE = 'XSHG'
    SH = 'XSHG'
    XSHE = 'XSHE'
    SZ = 'XSHE'
    SZE = 'XSHE'

def normalize_code(symbol, pre_close=None):
    """
    归一化证券代码

    :param code 如000001
    :return 证券代码的全称 如000001.XSHE
    """
    if (not isinstance(symbol, str)):
        return symbol

    if (symbol.startswith('sz') and (len(symbol) == 8)):
        ret_normalize_code = '{}.{}'.format(symbol[2:8], EXCHANGE.SZ)
    elif (symbol.startswith('sh') and (len(symbol) == 8)):
        ret_normalize_code = '{}.{}'.format(symbol[2:8], EXCHANGE.SH)
    elif (symbol.startswith('00') and (len(symbol) == 6)):
        if ((pre_close is not None) and (pre_close > 2000)):
            # 推断是上证指数
            ret_normalize_code = '{}.{}'.format(symbol, EXCHANGE.SH)
        else:
            ret_normalize_code = '{}.{}'.format(symbol, EXCHANGE.SZ)
    elif ((symbol.startswith('399') or symbol.startswith('159') or 
        symbol.startswith('150')) and (len(symbol) == 6)):
        ret_normalize_code = '{}.{}'.format(symbol, EXCHANGE.SH)
    elif ((len(symbol) == 6) and (symbol.startswith('399') or 
        symbol.startswith('159') or symbol.startswith('150') or 
        symbol.startswith('16') or symbol.startswith('184801') or 
        symbol.startswith('201872'))):
        ret_normalize_code = '{}.{}'.format(symbol, EXCHANGE.SZ)
    elif ((len(symbol) == 6) and (symbol.startswith('50') or 
        symbol.startswith('51') or symbol.startswith('60') or 
        symbol.startswith('688') or symbol.startswith('900') or 
        (symbol == '751038'))):
        ret_normalize_code = '{}.{}'.format(symbol, EXCHANGE.SH)
    elif ((len(symbol) == 6) and (symbol[:3] in ['000', '001', '002', 
                                                 '200', '300'])):
        ret_normalize_code = '{}.{}'.format(symbol, EXCHANGE.SZ)
    else:
        print(symbol)
        ret_normalize_code = symbol

    return ret_normalize_code

这是我的个人专栏《35岁程序员的退路:量化投资学习笔记》中的外篇内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值