Files
backtrader/venv/Lib/site-packages/tushare/util/format_stock_code.py
2026-01-17 21:21:30 +08:00

123 lines
3.5 KiB
Python

# -*- coding: utf-8 -*-
"""
Created on 2021-12-13 16:29:25
---------
@summary: 股票代码 code 格式化
---------
@author: yangyx01
"""
import re
def format_stock_code(x, special=""):
"""
股票代码 code 格式化
@param x:
@param special:
@return:
"""
x = str(x)
x = "".join(filter(str.isdigit, x))
stock_len = 6
hk_stock_len = 5
if special:
x = str(x)
if "行业" in special or "概念" in special:
x = x.zfill(stock_len) if len(x) < stock_len else x
return '%s.TI' % x
elif special == "港股":
r = re.search(r"(\d+)", str(x), re.S | re.M)
if not r:
return x
else:
x = r.group(1)
x = x.zfill(hk_stock_len) if len(x) < hk_stock_len else x
return '%s.HK' % x
elif special == "场外基金" or special == "热基":
x = x.zfill(stock_len) if len(x) < stock_len else x
return '%s.OF' % x
elif special == "可转债":
if str(x).startswith('11'):
x = x.zfill(stock_len) if len(x) < stock_len else x
return '%s.SH' % x
elif str(x).startswith('12'):
x = x.zfill(stock_len) if len(x) < stock_len else x
return '%s.SZ' % x
if not x[0].isdigit():
return x.upper()
if str(x[0:3]) in ['920'] or str(x[0]) in ['8', '4']:
x = x.zfill(stock_len) if len(x) < stock_len else x
return '%s.BJ' % x
if str(x[0]) in ['5', '6'] or str(x[0:3]) in ['900']:
x = x.zfill(stock_len) if len(x) < stock_len else x
return '%s.SH' % x
else:
x = x.zfill(stock_len) if len(x) < stock_len else x
return '%s.SZ' % x
def a_symbol_verify(x):
l = str(x).upper().split(".")
if not x[-1].isdigit():
return True
elif len(l) == 2:
return True
else:
return False
def symbol_verify(x):
ss = x.split(",")
if len(ss) > 1:
if a_symbol_verify(ss[0]):
return x
else:
raise '请按照 "000001.SZ,000001.SZ,000001.SZ" 格式传入symbol'
else:
if a_symbol_verify(x):
return x
else:
raise '请按照 "000001.SZ" 格式传入symbol'
def verify_stock_or_index(x):
"""
判断代码是否是 股票 True 指数 False
@param x:
@return:
"""
x = str(x).upper()
if x.startswith('39') and x.endswith('SZ'):
return True
elif x.startswith('30') and x.endswith('SZ'):
return True
elif x.startswith('0') and x.endswith('SH'):
return False
elif x.startswith('0') and x.endswith('SZ'):
return True
elif x.endswith("SH"):
return False
# elif x.startswith('6') and x.endswith('SH'):
# return True
elif x.startswith('8') and x.endswith('BJ'):
return True
elif x.startswith('4') and x.endswith('BJ'):
return True
elif x.startswith('920') and x.endswith('BJ'):
return True
elif x.startswith('9') and x.endswith('CSI'):
return False
else:
return True
if __name__ == '__main__':
# s = symbol_verify("13.SH")
# # s = symbol_verify("sh13")
# s = symbol_verify("sz000001")
# s = symbol_verify("000001.SZ")
# s = symbols_f("000001", special="港股")
# s = verify_stock_or_index(x="399005.SZ")
s = format_stock_code(x="sz92052")
print(s)