siat 3.4.32__py3-none-any.whl → 3.4.37__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- siat/common.py +4 -3
- siat/sector_china.py +101 -40
- {siat-3.4.32.dist-info → siat-3.4.37.dist-info}/METADATA +1 -1
- {siat-3.4.32.dist-info → siat-3.4.37.dist-info}/RECORD +7 -7
- {siat-3.4.32.dist-info → siat-3.4.37.dist-info}/WHEEL +1 -1
- {siat-3.4.32.dist-info → siat-3.4.37.dist-info}/LICENSE +0 -0
- {siat-3.4.32.dist-info → siat-3.4.37.dist-info}/top_level.txt +0 -0
siat/common.py
CHANGED
@@ -3799,8 +3799,9 @@ def df_display_CSS(df,titletxt='',footnote='',facecolor='papayawhip',decimals=2,
|
|
3799
3799
|
from IPython.display import display
|
3800
3800
|
display(style6)
|
3801
3801
|
|
3802
|
-
|
3803
|
-
|
3802
|
+
if not footnote=='':
|
3803
|
+
print(footnote)
|
3804
|
+
#print('') #空一行
|
3804
3805
|
|
3805
3806
|
return
|
3806
3807
|
|
@@ -3811,7 +3812,7 @@ if __name__=='__main__':
|
|
3811
3812
|
def upgrade_siat(module_list=['siat','akshare','pandas','pandas_datareader', \
|
3812
3813
|
'yfinance','yahooquery','urllib3','tabulate','twine', \
|
3813
3814
|
'mplfinance','openpyxl','pip','bottleneck','ipywidgets'], \
|
3814
|
-
pipcmd="pip install --upgrade",alternative=""):
|
3815
|
+
pipcmd="python -m pip install --upgrade --user",alternative=""):
|
3815
3816
|
"""
|
3816
3817
|
功能:一次性升级siat及其相关插件
|
3817
3818
|
|
siat/sector_china.py
CHANGED
@@ -198,6 +198,7 @@ def sector_code_china(sector_name):
|
|
198
198
|
|
199
199
|
#if found > 0: print(" ")
|
200
200
|
if indicator == "行业": indicator = "证监会行业"
|
201
|
+
if indicator == "概念": indicator = "新浪概念"
|
201
202
|
|
202
203
|
if len(sector_code)>0:
|
203
204
|
"""
|
@@ -575,13 +576,19 @@ if __name__=='__main__':
|
|
575
576
|
sector="new_dlhy"
|
576
577
|
sector="yysw"
|
577
578
|
sector="xyz"
|
579
|
+
|
580
|
+
ticker='000661.SZ'; sector="gn_swym"
|
578
581
|
|
579
|
-
def sector_position_sina(ticker,sector="new_dlhy"):
|
582
|
+
def sector_position_sina(ticker,sector="new_dlhy",return_result=False):
|
580
583
|
"""
|
581
584
|
功能:套壳sector_position_china
|
582
585
|
"""
|
583
586
|
df=sector_position_china(ticker=ticker,sector=sector)
|
584
|
-
|
587
|
+
|
588
|
+
if return_result:
|
589
|
+
return df
|
590
|
+
else:
|
591
|
+
return
|
585
592
|
|
586
593
|
def sector_position_china(ticker,sector="new_dlhy"):
|
587
594
|
"""
|
@@ -614,19 +621,21 @@ def sector_position_china(ticker,sector="new_dlhy"):
|
|
614
621
|
break
|
615
622
|
except:
|
616
623
|
continue
|
624
|
+
|
617
625
|
#未找到板块代码
|
618
626
|
if sector_name == '':
|
619
|
-
print(" #
|
627
|
+
print(" #Warning(sector_position_china): unsupported sector code",sector)
|
620
628
|
return None
|
621
629
|
|
622
630
|
#板块成份股
|
623
631
|
try:
|
624
|
-
|
632
|
+
#注意:启明星行业分类没有成份股明细
|
625
633
|
df = ak.stock_sector_detail(sector=sector)
|
626
634
|
except:
|
627
|
-
print(" #
|
628
|
-
|
629
|
-
|
635
|
+
print(" #Warning(sector_position_china): sector detail not available for",sector,'by',indicator)
|
636
|
+
if indicator !="启明星行业":
|
637
|
+
print(" Possible reason: data source is self-updating.")
|
638
|
+
print(" Solution: have a breath of fresh air and try later.")
|
630
639
|
return None
|
631
640
|
|
632
641
|
#清洗原始数据: #可能同时含有数值和字符串,强制转换成数值
|
@@ -641,32 +650,40 @@ def sector_position_china(ticker,sector="new_dlhy"):
|
|
641
650
|
#检查股票代码是否存在
|
642
651
|
sdf=df[df['code']==ticker1]
|
643
652
|
if len(sdf) == 0:
|
644
|
-
print(" #
|
645
|
-
print("
|
653
|
+
print(" #Warning(sector_position_china): retrieving",ticker,"failed in sector",sector,sector_name)
|
654
|
+
print(" Solution: make sure stock code correct, try later if network is slow")
|
646
655
|
return None
|
647
656
|
sname=list(sdf['name'])[0]
|
648
657
|
|
649
658
|
#确定比较范围
|
650
659
|
complist=['changepercent','turnoverratio','settlement','per','pb','nmc','mktcap']
|
660
|
+
vminlist=['settlement','per','pb','nmc','mktcap'] #板块最小值若为零需要标记的列
|
651
661
|
compnames=['涨跌幅%','换手率%','收盘价(元)','市盈率','市净率','流通市值(亿元)','总市值(亿元)']
|
652
|
-
compdf=pd.DataFrame(columns=['指标名称','指标数值','板块分位数%','板块中位数','板块最小值','板块最大值'])
|
662
|
+
compdf=pd.DataFrame(columns=['指标名称','指标数值','板块排名','板块分位数%','板块中位数','板块最小值','板块最大值'])
|
653
663
|
|
654
664
|
from scipy.stats import percentileofscore
|
655
665
|
|
656
666
|
for c in complist:
|
657
667
|
v=list(sdf[c])[0]
|
658
|
-
vlist=list(set(list(df[c])))
|
659
|
-
vlist
|
668
|
+
#vlist=list(set(list(df[c])))
|
669
|
+
vlist=list(df[c])
|
670
|
+
vlist.sort() #升序
|
660
671
|
vmin=round(min(vlist),2)
|
672
|
+
if vmin==0.00 and c in vminlist:
|
673
|
+
vmin='--'
|
674
|
+
|
661
675
|
vmax=round(max(vlist),2)
|
662
676
|
vmedian=round(np.median(vlist),2)
|
663
677
|
|
664
678
|
pos=vlist.index(v)
|
665
679
|
#pct=round((pos+1)/len(vlist)*100,2)
|
680
|
+
#sector_rank=str(len(vlist)-pos)+'/'+str(len(vlist))
|
681
|
+
sector_rank=str(len(vlist)-pos)
|
682
|
+
|
666
683
|
pct=percentileofscore(vlist,v)
|
667
684
|
|
668
685
|
s=pd.Series({'指标名称':compnames[complist.index(c)], \
|
669
|
-
'指标数值':v,'板块分位数%':pct,'板块中位数':vmedian, \
|
686
|
+
'指标数值':v,'板块排名':sector_rank,'板块分位数%':pct,'板块中位数':vmedian, \
|
670
687
|
'板块最小值':vmin,'板块最大值':vmax})
|
671
688
|
try:
|
672
689
|
compdf=compdf.append(s,ignore_index=True)
|
@@ -695,13 +712,13 @@ def sector_position_china(ticker,sector="new_dlhy"):
|
|
695
712
|
"""
|
696
713
|
if indicator=="行业": indicator="证监会行业"
|
697
714
|
|
698
|
-
titletxt="上市公司地位分析:"+sname+","+sector_name+"行业/板块("+indicator+"分类)"
|
715
|
+
titletxt="\n上市公司地位分析:"+sname+","+sector_name+"行业/板块("+indicator+"分类)"
|
699
716
|
import datetime; stoday = datetime.date.today()
|
700
717
|
footnote1=""
|
701
718
|
footnote2="成分股总数:"+str(len(df))+",数据来源:新浪财经,"+str(stoday)+"(截至昨日)"
|
702
719
|
footnote=footnote1+footnote2
|
703
720
|
|
704
|
-
print("") #空一行
|
721
|
+
#print("") #空一行
|
705
722
|
df_display_CSS(compdf,titletxt=titletxt,footnote=footnote,facecolor='papayawhip',decimals=2, \
|
706
723
|
first_col_align='left',second_col_align='right', \
|
707
724
|
last_col_align='right',other_col_align='right', \
|
@@ -932,7 +949,7 @@ if __name__=='__main__':
|
|
932
949
|
|
933
950
|
print_industry_component_sw(iname,numberPerLine=5,colalign='right')
|
934
951
|
|
935
|
-
def print_industry_component_sw(iname,numberPerLine=5,colalign='left'):
|
952
|
+
def print_industry_component_sw(iname,numberPerLine=5,colalign='left',return_result=False):
|
936
953
|
"""
|
937
954
|
打印申万行业的成分股,名称(代码)
|
938
955
|
"""
|
@@ -955,12 +972,15 @@ def print_industry_component_sw(iname,numberPerLine=5,colalign='left'):
|
|
955
972
|
import datetime as dt; stoday=dt.date.today()
|
956
973
|
ilist=list(cdf['name_code'])
|
957
974
|
|
958
|
-
titletxt=
|
975
|
+
titletxt=iname+"("+icode+")行业/板块成分股:计"+str(len(ilist))+'只,按行业指数权重降序排列,'+str(stoday)
|
959
976
|
print("\n"+titletxt,end='')
|
960
977
|
#表格
|
961
978
|
printInLine_md(ilist,numberPerLine=numberPerLine,colalign=colalign)
|
962
979
|
|
963
|
-
|
980
|
+
if return_result:
|
981
|
+
return ilist
|
982
|
+
else:
|
983
|
+
return
|
964
984
|
|
965
985
|
#==============================================================================
|
966
986
|
if __name__=='__main__':
|
@@ -981,8 +1001,10 @@ def print_industry_component_sw2(icode,numberPerLine=5,colalign='left'):
|
|
981
1001
|
|
982
1002
|
clist,cdf=industry_stock_sw(icode,top=1000)
|
983
1003
|
if cdf is None:
|
984
|
-
print(" Error(print_industry_component_sw2):
|
985
|
-
print("
|
1004
|
+
print(" #Error(print_industry_component_sw2): failed to retrieve industry for",icode)
|
1005
|
+
print(" Solution: make sure the industry code correct")
|
1006
|
+
print(" If the code is correct, upgrade akshare, restart jupyter and try again")
|
1007
|
+
|
986
1008
|
return
|
987
1009
|
|
988
1010
|
#cdf['icode']=cdf['证券代码'].apply(lambda x: x+'.SS' if x[:1] in ['6'] else (x+'.SZ' if x[:1] in ['0','3'] else x+'.BJ' ))
|
@@ -1289,7 +1311,7 @@ if __name__=='__main__':
|
|
1289
1311
|
period="day"
|
1290
1312
|
industry_list='all'
|
1291
1313
|
|
1292
|
-
def get_industry_sw(itype='1',period="day",industry_list='all',max_sleep=
|
1314
|
+
def get_industry_sw(itype='1',period="day",industry_list='all',max_sleep=15):
|
1293
1315
|
"""
|
1294
1316
|
功能:遍历某类申万指数,下载数据
|
1295
1317
|
itype: F表征指数,n=1/2/3行业指数,S风格指数,B大类风格,C金创类
|
@@ -1333,7 +1355,7 @@ def get_industry_sw(itype='1',period="day",industry_list='all',max_sleep=8):
|
|
1333
1355
|
total=len(ilist)
|
1334
1356
|
fail_list=[]
|
1335
1357
|
for i in ilist:
|
1336
|
-
print_progress_percent2(i,ilist,steps=5,leading_blanks=4)
|
1358
|
+
#print_progress_percent2(i,ilist,steps=5,leading_blanks=4)
|
1337
1359
|
#print(" Retrieving information for industry",i)
|
1338
1360
|
|
1339
1361
|
#抓取指数价格
|
@@ -1365,6 +1387,7 @@ def get_industry_sw(itype='1',period="day",industry_list='all',max_sleep=8):
|
|
1365
1387
|
current=ilist.index(i)
|
1366
1388
|
#print_progress_percent(current,total,steps=steps,leading_blanks=2)
|
1367
1389
|
|
1390
|
+
print_progress_percent2(i,ilist,steps=steps,leading_blanks=4)
|
1368
1391
|
#生成随机数睡眠,试图防止被反爬虫,不知是否管用!
|
1369
1392
|
random_int=random.randint(1,max_sleep)
|
1370
1393
|
time.sleep(random_int)
|
@@ -1398,7 +1421,7 @@ if __name__=='__main__':
|
|
1398
1421
|
industry_list=['850831.SW','801785.SW','801737.SW','801194.SW',
|
1399
1422
|
'801784.SW','801783.SW','801782.SW']
|
1400
1423
|
|
1401
|
-
def get_industry_sw2(industry_list,period="day",max_sleep=
|
1424
|
+
def get_industry_sw2(industry_list,period="day",max_sleep=15):
|
1402
1425
|
"""
|
1403
1426
|
功能:遍历指定的申万指数列表,下载数据
|
1404
1427
|
period="day"; choice of {"day", "week", "month"}
|
@@ -2234,8 +2257,8 @@ def industry_stock_sw(industry='801270.SW',top=5,printout=False):
|
|
2234
2257
|
try:
|
2235
2258
|
cdf = ak.index_component_sw(industry)
|
2236
2259
|
except:
|
2237
|
-
print(" #Warning(industry_stock_sw):
|
2238
|
-
print("
|
2260
|
+
print(" #Warning(industry_stock_sw): failed to retrieve component info for",industry)
|
2261
|
+
print(" Solution: upgrade akshare, restart jupyter and try again")
|
2239
2262
|
return None,None
|
2240
2263
|
|
2241
2264
|
# 删除'证券名称'为None的行
|
@@ -2956,6 +2979,7 @@ if __name__ =="__main__":
|
|
2956
2979
|
|
2957
2980
|
|
2958
2981
|
def industry_scan_china(sw_level='F', \
|
2982
|
+
indicator='Exp Ret%', \
|
2959
2983
|
start='MRY',end='default', \
|
2960
2984
|
RF=0, \
|
2961
2985
|
printout='smart', \
|
@@ -2969,7 +2993,7 @@ def industry_scan_china(sw_level='F', \
|
|
2969
2993
|
筛选方式printout:smart--收益前10名与后10名(默认),winner--仅限收益为正的行业,
|
2970
2994
|
loser--仅限收益为负的行业,50--收益前50名,-10--收益后10名,all--所有行业
|
2971
2995
|
"""
|
2972
|
-
indicator='Exp Ret%'
|
2996
|
+
#indicator='Exp Ret%'
|
2973
2997
|
|
2974
2998
|
print(" Collecting industry info, it may take very long time ... ...")
|
2975
2999
|
|
@@ -3125,7 +3149,7 @@ def industry_scan_china(sw_level='F', \
|
|
3125
3149
|
if printout=='all':
|
3126
3150
|
printout_txt='所有指数'
|
3127
3151
|
elif printout=='smart':
|
3128
|
-
printout_txt='
|
3152
|
+
printout_txt='前/后十个行业'
|
3129
3153
|
if len(df2) <=20:
|
3130
3154
|
printout_txt='所有指数'
|
3131
3155
|
elif printout=='winner':
|
@@ -3146,7 +3170,8 @@ def industry_scan_china(sw_level='F', \
|
|
3146
3170
|
printout_txt='未知筛选方式'
|
3147
3171
|
|
3148
3172
|
#titletxt="申万行业业绩排行榜:"+sw_level_txt+',共'+str(len(df_prt))+"个指数符合条件"
|
3149
|
-
titletxt="行业业绩排行榜:"+sw_level_txt+',筛选方式:'+printout_txt
|
3173
|
+
#titletxt="行业业绩排行榜:"+sw_level_txt+','+ectranslate(indicator)+',筛选方式:'+printout_txt
|
3174
|
+
titletxt="中国股市板块表现排行榜:"+sw_level_txt+','+printout_txt
|
3150
3175
|
#print("\n***",titletxt,'\n')
|
3151
3176
|
"""
|
3152
3177
|
alignlist=['center']+['left']*(len(list(df_prt))-1)
|
@@ -3154,7 +3179,7 @@ def industry_scan_china(sw_level='F', \
|
|
3154
3179
|
"""
|
3155
3180
|
#print("\n *** 数据来源:综合申万宏源/东方财富/新浪财经,",todaydt,"\b;分析期间:",fromdate+'至'+todate)
|
3156
3181
|
#footnote1="筛选方式:all-所有,smart-收益最高最低各10个,winner-收益为正,loser-收益为负"
|
3157
|
-
footnote2="
|
3182
|
+
footnote2="数据来源:申万宏源,统计期间:"+str(fromdate)+'至'+str(todate)+"(截至昨日)。"+str(todaydt)+"制表"
|
3158
3183
|
#footnote=footnote1+'\n'+footnote2
|
3159
3184
|
footnote=footnote2
|
3160
3185
|
|
@@ -3162,10 +3187,25 @@ def industry_scan_china(sw_level='F', \
|
|
3162
3187
|
titile_font_size=font_size
|
3163
3188
|
heading_font_size=data_font_size=str(int(font_size.replace('px',''))-1)+'px'
|
3164
3189
|
|
3190
|
+
df_prt['序号']=df_prt.index
|
3191
|
+
if indicator=='Exp Ret%':
|
3192
|
+
df_prt=df_prt[['序号','行业名称','行业代码','投资收益率%','投资收益波动率%','投资收益损失风险%','夏普比率','索替诺比率']]
|
3193
|
+
elif indicator=='Exp Ret Volatility%':
|
3194
|
+
df_prt=df_prt[['序号','行业名称','行业代码','投资收益波动率%','投资收益率%','投资收益损失风险%','夏普比率','索替诺比率']]
|
3195
|
+
elif indicator=='Exp Ret LPSD%':
|
3196
|
+
df_prt=df_prt[['序号','行业名称','行业代码','投资收益损失风险%','投资收益波动率%','投资收益率%','夏普比率','索替诺比率']]
|
3197
|
+
elif indicator=='sharpe':
|
3198
|
+
df_prt=df_prt[['序号','行业名称','行业代码','夏普比率','索替诺比率','投资收益率%','投资收益波动率%','投资收益损失风险%']]
|
3199
|
+
elif indicator=='sortino':
|
3200
|
+
df_prt=df_prt[['序号','行业名称','行业代码','索替诺比率','夏普比率','投资收益率%','投资收益波动率%','投资收益损失风险%']]
|
3201
|
+
|
3202
|
+
|
3203
|
+
|
3165
3204
|
df_display_CSS(df_prt,titletxt=titletxt,footnote=footnote,facecolor=facecolor, \
|
3166
|
-
first_col_align='
|
3205
|
+
first_col_align='center',second_col_align='left', \
|
3206
|
+
last_col_align='center',other_col_align='center', \
|
3167
3207
|
titile_font_size=titile_font_size,heading_font_size=heading_font_size, \
|
3168
|
-
|
3208
|
+
data_font_size=data_font_size)
|
3169
3209
|
|
3170
3210
|
return df2
|
3171
3211
|
|
@@ -3653,7 +3693,7 @@ def get_stock_industry_sw(ticker):
|
|
3653
3693
|
|
3654
3694
|
return industry
|
3655
3695
|
else:
|
3656
|
-
return
|
3696
|
+
return ''
|
3657
3697
|
|
3658
3698
|
#==============================================================================
|
3659
3699
|
if __name__ == '__main__':
|
@@ -3670,28 +3710,49 @@ def stock_peers_sw(ticker):
|
|
3670
3710
|
try:
|
3671
3711
|
hangye=get_stock_industry_sw(ticker)
|
3672
3712
|
except:
|
3673
|
-
print(" #Warning(stock_peers_sw):
|
3713
|
+
print(" #Warning(stock_peers_sw): industry info not found for",ticker)
|
3674
3714
|
return
|
3675
3715
|
|
3716
|
+
if hangye=='':
|
3717
|
+
print(" #Warning(stock_peers_sw): found empty industry for",ticker)
|
3718
|
+
return
|
3719
|
+
|
3720
|
+
ilist=[]; hangye_final=''
|
3676
3721
|
#三级行业优先
|
3677
3722
|
hangye3=hangye+'Ⅲ'
|
3678
3723
|
try:
|
3679
|
-
print_industry_component_sw(iname=hangye3)
|
3724
|
+
ilist=print_industry_component_sw(iname=hangye3,return_result=True)
|
3725
|
+
hangye_final=hangye3
|
3680
3726
|
except:
|
3681
3727
|
#二级行业次优先
|
3682
3728
|
hangye2=hangye+'Ⅱ'
|
3683
3729
|
try:
|
3684
|
-
print_industry_component_sw(iname=hangye2)
|
3730
|
+
ilist=print_industry_component_sw(iname=hangye2,return_result=True)
|
3731
|
+
hangye_final=hangye2
|
3685
3732
|
except:
|
3686
3733
|
try:
|
3687
|
-
print_industry_component_sw(iname=hangye)
|
3734
|
+
ilist=print_industry_component_sw(iname=hangye,return_result=True)
|
3735
|
+
hangye_final=hangye
|
3688
3736
|
except:
|
3689
3737
|
print("\n #Warning(stock_peers_sw): failed to search peers for",ticker)
|
3690
3738
|
print(" Possible solutions:")
|
3691
|
-
print("
|
3692
|
-
print("
|
3693
|
-
|
3694
|
-
|
3739
|
+
print(" Try first: upgrade akshare, restart Jupyter and try again")
|
3740
|
+
print(" If not working, uninstall anaconda and reinstall a newer version")
|
3741
|
+
|
3742
|
+
#查找股票在行业板块中的位置
|
3743
|
+
if not ilist=='':
|
3744
|
+
ticker6=ticker[:6]
|
3745
|
+
for i in ilist:
|
3746
|
+
if ticker6 in i:
|
3747
|
+
ticker_item=i
|
3748
|
+
ticker_pos=ilist.index(i)+1
|
3749
|
+
break
|
3750
|
+
|
3751
|
+
footnote0="注:"
|
3752
|
+
footnote1=ticker_item+"在申万行业"+hangye_final+"指数中的权重排名为"+str(ticker_pos)+'/'+str(len(ilist))
|
3753
|
+
footnote2="该指数的权重排名依据主要包括公司的市值规模、流动性以及市场代表性"
|
3754
|
+
footnote=footnote0+'\n'+footnote1+'\n'+footnote2
|
3755
|
+
print(footnote)
|
3695
3756
|
return
|
3696
3757
|
|
3697
3758
|
|
@@ -18,7 +18,7 @@ siat/capm_beta.py,sha256=cxXdRVBQBllhbfz1LeTJAIWvyRYhW54nhtNUXv4HwS0,29063
|
|
18
18
|
siat/capm_beta2.py,sha256=lUuCPVSxebkA2yye1PXu1V2Jd2UKEwD_kIA25DCIDTs,29750
|
19
19
|
siat/capm_beta_test.py,sha256=ImR0c5mc4hIl714XmHztdl7qg8v1E2lycKyiqnFj6qs,1745
|
20
20
|
siat/cmat_commons.py,sha256=Nj9Kf0alywaztVoMVeVVL_EZk5jRERJy8R8kBw88_Tg,38116
|
21
|
-
siat/common.py,sha256=
|
21
|
+
siat/common.py,sha256=OQ1Bh2hHVvdraOLBeUAhPC3Wlx38p7n2COknmtJALZQ,151771
|
22
22
|
siat/compare_cross.py,sha256=3iP9TH2h3w27F2ARZc7FjKcErYCzWRc-TPiymOyoVtw,24171
|
23
23
|
siat/compare_cross_test.py,sha256=xra5XYmQGEtfIZL2h-GssdH2hLdFIhG3eoCrkDrL3gY,3473
|
24
24
|
siat/concepts_iwencai.py,sha256=m1YEDtECRT6FqtzlKm91pt2I9d3Z_XoP59BtWdRdu8I,3061
|
@@ -94,7 +94,7 @@ siat/risk_evaluation.py,sha256=I6B3gty-t--AkDCO0tKF-291YfpnF-IkXcFjqNKCt9I,76286
|
|
94
94
|
siat/risk_evaluation_test.py,sha256=YEXM96gKzTfwN4U61AS4Rr1tV7KgUvn4rRC6f3iMw9s,3731
|
95
95
|
siat/risk_free_rate.py,sha256=ZMr4cHikPvXvywr54gGqiI3Nvb69am6tq3zj2hwzANE,12384
|
96
96
|
siat/risk_free_rate_test.py,sha256=CpmhUf8aEAEZeNu4gvWP2Mz2dLoIgBX5bI41vfUBEr8,4285
|
97
|
-
siat/sector_china.py,sha256=
|
97
|
+
siat/sector_china.py,sha256=SV1YVue8Z5U-fkCok1U3VCIqUvmULfCOw0ao9IqjfQE,140528
|
98
98
|
siat/sector_china_test.py,sha256=1wq7ef8Bb_L8F0h0W6FvyBrIcBTEbrTV7hljtpj49U4,5843
|
99
99
|
siat/security_price.py,sha256=2oHskgiw41KMGfqtnA0i2YjNNV6cYgtlUK0j3YeuXWs,29185
|
100
100
|
siat/security_price2.py,sha256=Y4suVC-4koUSI_n8kY0l0y4lo_CTcoeM_kwTHiIFzyM,26291
|
@@ -139,8 +139,8 @@ siat/valuation_china.py,sha256=EkZQaVkoBjM0c4MCNbaX-bMnlG0e3FXeaWczZDnkptU,67784
|
|
139
139
|
siat/valuation_market_china_test.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
|
140
140
|
siat/var_model_validation.py,sha256=R0caWnuZarrRg9939hxh3vJIIpIyPfvelYmzFNZtPbo,14910
|
141
141
|
siat/yf_name.py,sha256=9U_XfEeMlS3TrCrO3Bww21nuFgghbnO-cqDJMhQWqew,16193
|
142
|
-
siat-3.4.
|
143
|
-
siat-3.4.
|
144
|
-
siat-3.4.
|
145
|
-
siat-3.4.
|
146
|
-
siat-3.4.
|
142
|
+
siat-3.4.37.dist-info/LICENSE,sha256=NTEMMROY9_4U1szoKC3N2BLHcDd_o5uTgqdVH8tbApw,1071
|
143
|
+
siat-3.4.37.dist-info/METADATA,sha256=pLBbjRdg6Rh44OSiG0qTvjJkpPtp-3MraR6Yy77FPPk,8010
|
144
|
+
siat-3.4.37.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
145
|
+
siat-3.4.37.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
|
146
|
+
siat-3.4.37.dist-info/RECORD,,
|
File without changes
|
File without changes
|