在股票证券行业待久了,coding的时候经常会遇到这样的需求:
自动拉取当天的最新股票市场全量symbol数据,然后对这些全量的股票数据进行处理,首先要先对symbol按交易所进行区分/分类,然后再对区分出来的A股进行细化分类,分类成上交所还是深交所。
针对这样常见的需求,我写了一个工具类(前提是你对股票业务已经很熟了),方便以后工作开发使用,记录下。
需求一:根据全量股票数据判断该symbol是哪类股票----A股/港股/美股
java python双版本
Java版本:
public static String judgeSymbol(String symbol) {
if (!symbol.startsWith("SH") && !symbol.startsWith("SZ")) {
//判断symbol是否为数字且它的位数,6位代表A股,5位代表港股
if (!StringUtils.isEmpty(symbol) && StringUtils.isNumeric(symbol) && symbol.length() == 5) {
return "HK";
} else if (!StringUtils.isEmpty(symbol) && StringUtils.isNumeric(symbol) && symbol.length() == 6) {
return "A";
}
//即为美股
else {
return "US";
}
}
if(symbol.startsWith("SH") || symbol.startsWith("SZ")){
return "A";
}
return "";
}
python版本:
def judgeSymbol(symbol):
if not symbol.startswith("SH") and not symbol.startswith("SZ"):
if symbol != "" and symbol.isnumeric() and len(symbol) == 5:
return "HK"
elif symbol != "" and symbol.isnumeric() and len(symbol) == 6:
return "A"
else:
return "US"
if symbol.startsWith("SH") or symbol.startsWith("SZ"):
return "A"
return ""
需求二:对A股再进行细化分类,判定该A股股票是上交所(SH)还是深交所(SZ)
java版本
增加JudgeSymbol逻辑,只针对A股,港股和美股不需要带交易所前缀
String exchangeOfSymbol = JudgeSymbol.judgeSymbol(symbol);
if("A".equals(exchangeOfSymbol)){
//A股判定完,还得判定是SH还是SZ打头
if(symbol.startsWith("6") || symbol.startsWith("9")){
symbol = "SH" + symbol;
}else {
symbol = "SZ" + symbol;
}
}
def addPreForSymbol(symbol):
exchangeOfSymbol = judgeSymbol(symbol)
if "A" == exchangeOfSymbol:
if symbol.startswith("6") or symbol.startswith("9"):
symbol_new = "SH" + symbol
else:
symbol_new = "SZ" + symbol
return symbol_new
return ""