def test_RPSIndex_rpsTopN2(self): # 显示rps排名前10%的ETF中文名称 fn = 'zxgETF.txt' # code列表 code = read_zxg(fn) rpsday = [20, 50] end = self.end # end = "2020-06-24" rpsIndex = RPSIndex(code, self.start, end, rpsday) n = 10 rps = rpsIndex.rpsTopN2(startday=end, percentN=n) rps2 = rpsIndex.rpsTopN(end, n) self.assertTrue(len(rps) > 0) self.assertTrue( len(rps) == len(rps2), "长度不同 {} {}\n{} {}".format(len(rps), len(rps2), rps, rps2)) try: self.assertTrue( rps.sort_values(rps.columns[0], ascending=False).equals(rps2), "排序后不相等 {} {}".format(rps, rps2)) except: self.assertTrue(rps.equals(rps2), "不相等 {} {}".format(rps, rps2)) print(rps) print("总数: {}".format(len(rps))) dfInfo = codeInfo(list(rps.index.levels[1])) print(dfInfo.name)
def test_ETFName(self): """文件zxgFile,增加中文名称 """ zxgFile = "zxgETF.txt" code = read_zxg(zxgFile) dfInfo = codeInfo(list(code)) print(dfInfo) dfInfo[['code', 'name']].to_csv(zxgFile, index=False, sep=" ", header=None)
def test_xls2zxg(self): xlsfile = "担保品20200210.xls" zxgfile = "/tmp/{}.txt".format(xlsfile) xls2zxg(xlsfile, zxgfile) codes = read_zxg(zxgfile, length=15) self.assertTrue(len(codes) > 10, "读取数量太少:{}".format(codes)) print(codes[:10]) for code in codes: if code.startswith("159"): print(code)
def test_rps_ETF_selectCode(self): # 显示rps排名前10%的中文名称 fn = 'zxgETF.txt' # code列表 code = read_zxg(fn) rpsday = [20, 50] rpsIndex = RPSIndex(code, self.start, self.end, rpsday) rps = rpsIndex.selectCode(code) # print(rps.tail()) print(rps)
def test_xls2Code(self): xlsfile = "担保品20200210.xls" zxgfile = "/tmp/{}.txt".format(xlsfile) xls2zxg(xlsfile, zxgfile) codes = read_zxg(zxgfile) self.assertTrue(len(codes) > 10, "读取数量太少:{}".format(codes)) print(codes[:10]) codes2 = xls2Code(xlsfile) self.assertTrue(codes == codes2, "返回结果不想等") for code in codes2: self.assertTrue(len(code) == 6)
def test_rps_name_exclude_topn2(self): """测试另一种计算排名靠前的方式 """ # 显示rps排名前10%的中文名称(去除某些品种) code = self.code codeexclude = read_zxg('zxgExclude.txt') # 排除某些股票 code = setdiff_sorted(code, codeexclude) rpsday = [20, 50] # rpsday = [20, 50, 120] data = self.data2 data = data.loc[(slice(None), code), :] dfrps = self._getRPS(rpsday, data) theday = datetime.date.today() n = 5 dfrpstopn2 = pd.concat([ dfrps.loc[(dfrps[item] >= 100 - n)] for item in dfrps.columns ]).sort_index() # rps排名前5% dftopn = self._getRPSTopN(code, dfrps, theday, n=n) codetop = list(dftopn['code']) # index列表 用于处理中文名称 indexList = qa.QA_fetch_index_list_adv() # for c in codetop: # # 打印股票代码及中文名 # print(c, indexList.loc[c]['name']) # print("排名靠前的数量:{}".format(len(codetop))) # 插入中文名 dftopn.insert(2, 'name', dftopn['code'].apply(lambda x: indexList.loc[x]['name'])) print(dftopn.head(10)) # dfrpstopn2 = self._getRPSTopN2(code, dfrpstopn2, theday, theday, n) dfrpstopn2 = self._getRPSTopN2(code, dfrpstopn2, theday, theday, n) dftopn2 = dfrpstopn2.reset_index() dftopn2.insert( 2, 'name', dftopn2['code'].apply(lambda x: indexList.loc[x]['name'])) codetop2 = list(dftopn2['code']) difflist = self.diffList(codetop, codetop2) self.assertTrue(len(difflist) <= 1, "代码差别: {}".format(difflist)) if len(difflist) > 0: print(difflist) # 删除多的代买,只是为了方便对比测试。实际使用不需要删除 if difflist in codetop: dftopn = dftopn[dftopn['code'] != difflist[0]] else: # dftopn2= dftopn2[dftopn2['code'] != difflist[0]].reset_index(drop=True) dftopn2.drop(dftopn2['code'] == difflist[0]).reset_index( drop=True) obo = self.differOneByOne( dftopn2.sort_values(['code']), dftopn.sort_values(['code']).reset_index(drop=True)) self.assertTrue(len(obo) == 0, "{}".format(obo))
def test_read_zxg(self): """测试读取自选股列表 """ fn = 'zxg.txt' # code列表 code = read_zxg(fn) if len(code) == 0: # 自选股为空 self.assertTrue(not os.path.exists(fn), "找到文件:{}".format(fn)) else: self.assertTrue(os.path.exists(fn), "没找到文件:{}".format(fn)) print("自选列表:{}".format(code))
def test_rps_ETF_selectCode(self): # rps筛选特定code fn = 'zxgETF.txt' # code列表 code = read_zxg(fn) rpsday = [20, 50] rpsIndex = RPSIndex(code, self.start, self.end, rpsday) rps = rpsIndex.selectCode(code) # print(rps.tail()) # print(rps) self.assertTrue( len(rpsIndex.selectCode(code[:2])) == 2 * len(rpsIndex.selectCode(code[:1])), "两倍长度")
def test_readzxg_name(self): """代码对应的指数名称 """ fn = 'zxg.txt' # code列表 code = read_zxg(fn) data = qa.QA_fetch_index_list_adv() print(data.columns) # print(data[['code', 'name']]) for c in code: print(c, data.loc[c]['name']) df =codeInfo(code) print(df.head()) self.assertTrue(len(code) == len(df), "股票代码个数和股票信息的个数相同")
def test_rps_ETFTOPN(self): # 显示rps排名前10%的ETF中文名称 fn = 'zxgETF.txt' # code列表 code = read_zxg(fn) rpsday = [20, 50] rpsIndex = RPSIndex(code, self.start, self.end, rpsday) n = 10 rps = rpsIndex.rpsTopN(self.end, n) self.assertTrue(len(rps) > 0) print(rps) print("总数: {}".format(len(rps))) dfInfo = codeInfo(list(rps.index.levels[1])) print(dfInfo.name)
def test_RPSIndex_rpsTopN2_2(self): # 一段时间内,显示rps排名前10%的ETF中文名称 fn = 'zxgETF.txt' # code列表 code = read_zxg(fn) rpsday = [20, 50] rpsIndex = RPSIndex(code, self.start, self.end, rpsday) n = 10 start = self.end - datetime.timedelta(10) rps = rpsIndex.rpsTopN2(startday=start, lastday=self.end, percentN=n) self.assertTrue(len(rps) > 0) # for day in reversed(rps.index.levels[0]): for day in rps.index.levels[0]: if day == pd.to_datetime(datetime.date(2020, 6, 30)): continue print("对比日期: {}".format(day)) rps2 = rpsIndex.rpsTopN(day, n) df = rps.loc[(slice(pd.Timestamp(day), pd.Timestamp(day))), :] self.assertTrue( len(df) == len(rps2), "长度不同 {} {}\n{} {}".format(len(df), len(rps2), rps, rps2)) try: obo = self.differOneByOne(df, rps2) self.assertTrue(len(obo) == 0, "{} {}".format(df, rps2)) self.assertTrue(df.equals(rps2), "不相等 {} {}".format(df, rps2)) except Exception as e: df = df.sort_values(by=df.columns[0], ascending=False, inplace=False) obo = self.differOneByOne(df, rps2) self.assertTrue(len(obo) == 0, "{} {}".format(df, rps2)) self.assertTrue(df.equals(rps2), "不相等 {} {}".format(df, rps2)) print(rps) print("总数: {}".format(len(rps))) dfInfo = codeInfo(list(rps.index.levels[1])) print(dfInfo.name)
def test_rps_name_exclude(self): """880035 创业涨跌 880025 中小涨跌 880005 涨跌家数 880928 抗流感 880655 医疗器械 880630 半导体 880410 医药商业 880654 医药商业 000857 500医药 880880 近期强势 399676 深医药EW 880491 半导体 399976 CS新能车 880653 生物制品 399441 生物医药 880402 生物制药 000121 医药主题 000131 上证高新 399993 CSWD生科 880773 最近闪崩 880878 百元股 880403 中成药 880652 中药 399803 工业4.0 000075 医药等权 399678 深次新股 880398 医疗保健 399674 深A医药 399667 创业板G 880920 免疫治疗 399989 中证医疗 880927 抗癌 000863 CS精准医 000109 380医药 880913 基因概念 399685 深成医药 880966 消费电子 880557 生物疫苗 000991 全指医药 880952 芯片 880400 医药 399618 深证医药 880024 中小均价 399647 深医药50 399386 1000医药 000037 上证医药 000841 800医药 399295 创业蓝筹 000808 医药生物 000933 中证医药 880642 视听器材 399673 创业板50 880854 预高送转 399417 新能源车 880902 特斯拉 399249 综企指数 880716 光刻机 399808 中证新能 880534 锂电池 880556 IP变现 880961 小米概念 399811 CSSW电子 880608 动物保健 880870 两年新股 399412 国证新能 399643 创业新兴 880836 配股股 399635 创业板EW 399326 成长40 880944 无人驾驶 880574 苹果概念 399017 SME创新 399638 深证环保 880935 智能电视 399691 创业专利 399804 中证体育 880590 网络游戏 880942 虚拟现实 399682 深成工业 880780 融资增加 399388 1000信息 399016 深证创新 399339 深证科技 排名靠前的数量:83 """ # 显示rps排名前10%的中文名称(去除某些品种) code = self.code codeexclude = read_zxg('zxgExclude.txt') # 排除某些股票 code = setdiff_sorted(code, codeexclude) rpsday = [20, 50] # rpsday = [20, 50, 120] data = self.data2 data = data.loc[(slice(None), code), :] dfrps = self._getRPS(rpsday, data) theday = datetime.date.today() # rps排名前5% dftopn = self._getRPSTopN(code, dfrps, theday, n=5) codetop = list(dftopn['code']) indexList = qa.QA_fetch_index_list_adv() for c in codetop: # 打印股票代码及中文名 print(c, indexList.loc[c]['name']) print("排名靠前的数量:{}".format(len(codetop))) # 插入中文名 dftopn.insert(2, 'name', dftopn['code'].apply(lambda x: indexList.loc[x]['name'])) print(dftopn.head(10)) # 保存到文件 dftopn.to_csv('/tmp/rpstop.csv', encoding='utf-8', index=False)