前言
在量化实践过程中,经常因为不同库使用不同的股票代码形式,所以需要来回转换股票代码,以符合作业环境。为方便不同形式的要求,现将常用的格式做了函数,方便调用。
一、A股股票代码规则
股票代码是股票交易的身份证,每个代码都对应着不同的公司。
以上海证券交易所、深圳证券交易所、北京证券交易所股票为例,A股股票代码有如下规则:
1、上海证券交易所:
600 、601、603、605三位开头是A股上海证券交易所主板股票,688三位开头是A股上海证券交易所科创板股票。
2、深圳证券交易所:
000、002、003三位开头是A股深圳证券交易所主板股票,300、301三位开头是A股深圳证券交易所创业板股票。
3、北京证券交易所:
43、83、87、88新三板转上来到北交所的股票基础层43、创新层83、精选层87、新上北交所88开头。
除了以上,还有一些特殊的代码开头。沪市B股股票代码以900开头,以美元计价交易。深市B股股票代码以200开头,以港元计价交易。另,北交所刚刚启用920开头代码。
二、股票代码转换
根据规律,可总结出,6和900开头为上证,0,3,2开头为深证、4、8、920开头为北交所的股票代码。基于此,结合股票代码的转化要求,如将300750,转为300750.SH,我们使用如下方法调用即可。
# 代码转换类函数
def code2symbol(code,kind="code.sh"):
'''根据code代码开头数字转为为标准的symbol'''
xcode = ''.join(c for c in code if c.isdigit())
kind_list = ['shcode','sh.code','code.sh','codesh']
# kind转为小写,在以上列表内,则自动按相应格式进行转换;否则只反馈6位数字代码。
if kind.lower() in kind_list:
prefix = ''.join(c for c in kind.replace('code','') if c.isalpha())
char = '.' if '.' in kind else ''
if kind.lower() == "shcode" or kind.lower() == "sh.code": symbol = f'sh{char}{xcode}' if (xcode[0] == "6" or xcode[:3] == "900") else f'sz{char}{xcode}' if (xcode[0] == "0" or xcode[0] == "3" or xcode[0] == "2") else f'bj{char}{xcode}' if (xcode[0] == "4" or xcode[0] == "8" or xcode[:3] == "920") else code
elif kind.lower() == "codesh" or kind.lower() == "code.sh": symbol = f'{xcode}{char}sh' if (xcode[0] == "6" or xcode[:3] == "900") else f'{xcode}{char}sz' if (xcode[0] == "0" or xcode[0] == "3" or xcode[0] == "2") else f'{xcode}{char}bj' if (xcode[0] == "4" or xcode[0] == "8" or xcode[:3] == "920") else code
return symbol if prefix[0].islower() else symbol.upper()
else:return xcode
if __name__ == '__main__':
code = '300750'
print(code2symbol(code,kind="code.SH"))
运行结果为:300750.SZ
总结
这个函数考虑了股票常用的各种形式,包括大小写,调用的时候选择相应的kind即可。
看到这里,如果有帮助到你,不妨复制粘贴使用前先点个关注点个赞!后续还会继续分享妙招给大家。