siat 3.2.52__py3-none-any.whl → 3.2.54__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/beta_adjustment.py +1 -1
- siat/capm_beta2.py +3 -3
- siat/common.py +11 -0
- siat/luchy_draw.py +3 -3
- siat/risk_adjusted_return.py +1 -1
- siat/risk_adjusted_return2.py +93 -75
- siat/security_trend2.py +1 -1
- siat/stock.py +4 -4
- siat/stock_technical.py +35 -24
- siat/translate.py +8 -4
- {siat-3.2.52.dist-info → siat-3.2.54.dist-info}/METADATA +1 -1
- {siat-3.2.52.dist-info → siat-3.2.54.dist-info}/RECORD +14 -14
- {siat-3.2.52.dist-info → siat-3.2.54.dist-info}/WHEEL +0 -0
- {siat-3.2.52.dist-info → siat-3.2.54.dist-info}/top_level.txt +0 -0
siat/beta_adjustment.py
CHANGED
@@ -991,7 +991,7 @@ def compare_mhamada(tickers,market_index="000001.SS"):
|
|
991
991
|
|
992
992
|
import pandas as pd
|
993
993
|
df=pd.DataFrame()
|
994
|
-
print("Starting to
|
994
|
+
print("Starting to retrieve and calculate Hamada ratios, please wait ......")
|
995
995
|
for t in tickers:
|
996
996
|
|
997
997
|
with HiddenPrints():
|
siat/capm_beta2.py
CHANGED
@@ -285,7 +285,7 @@ def compare_mticker_1beta(ticker,start,end, \
|
|
285
285
|
RF=RF[0]
|
286
286
|
if isinstance(regression_period,list):
|
287
287
|
regression_period=regression_period[0]
|
288
|
-
print(" Starting to
|
288
|
+
print(" Starting to retrieve and calculate capm beta, please wait ......")
|
289
289
|
|
290
290
|
#计算日历日regression_period对应的交易日数
|
291
291
|
regtrddays=int(252 / 365 * regression_period)
|
@@ -406,7 +406,7 @@ def compare_1ticker_mRF(ticker,start,end, \
|
|
406
406
|
RF=[RF]
|
407
407
|
if isinstance(regression_period,list):
|
408
408
|
regression_period=regression_period[0]
|
409
|
-
print(" Starting to
|
409
|
+
print(" Starting to retrieve and calculate capm beta on different RF, please wait ......")
|
410
410
|
|
411
411
|
#计算日历日regression_period对应的交易日数
|
412
412
|
regtrddays=int(252 / 365 * regression_period)
|
@@ -525,7 +525,7 @@ def compare_1ticker_mregression_period(ticker,start,end, \
|
|
525
525
|
RF=RF[0]
|
526
526
|
if isinstance(regression_period,int):
|
527
527
|
regression_period=[regression_period]
|
528
|
-
print(" Starting to
|
528
|
+
print(" Starting to retrieve and calculate capm beta on different regression period, please wait ......")
|
529
529
|
|
530
530
|
#预处理ticker_type
|
531
531
|
ticker_type=ticker_type_preprocess_mticker_mixed(ticker,ticker_type)
|
siat/common.py
CHANGED
@@ -2436,6 +2436,17 @@ def descriptive_statistics2(df,titletxt,footnote,decimals=4,sortby='tpw_mean', \
|
|
2436
2436
|
titile_font_size=font_size
|
2437
2437
|
heading_font_size=data_font_size=str(int(font_size.replace('px',''))-1)+'px'
|
2438
2438
|
|
2439
|
+
dst6.rename(columns={"比较对象":text_lang("比较对象","Securities"), \
|
2440
|
+
"最小值":text_lang("最小值","Minimum"), \
|
2441
|
+
"最大值":text_lang("最大值","Maximum"), \
|
2442
|
+
"中位数":text_lang("中位数","Median"), \
|
2443
|
+
"平均值":text_lang("平均值","Mean"), \
|
2444
|
+
"标准差":text_lang("标准差","Std Dev"), \
|
2445
|
+
"近期优先加权平均":text_lang("近期优先加权平均","RWA"), \
|
2446
|
+
"期间趋势":text_lang("期间趋势","Periodic Trend"), \
|
2447
|
+
"近期趋势":text_lang("近期趋势","Recent Trend"), \
|
2448
|
+
"推荐标记":text_lang("推荐标记","Recommendation")},inplace=True)
|
2449
|
+
|
2439
2450
|
df_display_CSS(dst6,titletxt=titletxt,footnote=footnote,facecolor=facecolor, \
|
2440
2451
|
titile_font_size=titile_font_size,heading_font_size=heading_font_size, \
|
2441
2452
|
data_font_size=data_font_size)
|
siat/luchy_draw.py
CHANGED
@@ -195,7 +195,7 @@ def lucky_draw_header_modify(course,file_path="current",pickle_path="current", \
|
|
195
195
|
'skiprows':skiprows,'column':column,'draw_limit':draw_limit, \
|
196
196
|
'absent_limit':absent_limit,'pass_limit':pass_limit}
|
197
197
|
|
198
|
-
pickle_write(header_dict,
|
198
|
+
pickle_write(header_dict,header_path,overlap_confirm=False)
|
199
199
|
print(header_path,"is modified in",cur_dir)
|
200
200
|
|
201
201
|
return
|
@@ -282,7 +282,7 @@ def lucky_draw_detail_add(course,name):
|
|
282
282
|
|
283
283
|
#写回明细文件
|
284
284
|
if added:
|
285
|
-
pickle_write(df,
|
285
|
+
pickle_write(df,detail_path,overlap_confirm=False)
|
286
286
|
|
287
287
|
return
|
288
288
|
|
@@ -326,7 +326,7 @@ def lucky_draw_detail_remove(course,name):
|
|
326
326
|
|
327
327
|
#写回明细文件
|
328
328
|
if found:
|
329
|
-
pickle_write(df,
|
329
|
+
pickle_write(df,detail_path,overlap_confirm=False)
|
330
330
|
|
331
331
|
return
|
332
332
|
|
siat/risk_adjusted_return.py
CHANGED
@@ -1250,7 +1250,7 @@ def compare_mrar(tickers,rar_name,start,end, \
|
|
1250
1250
|
|
1251
1251
|
import pandas as pd
|
1252
1252
|
df=pd.DataFrame()
|
1253
|
-
print(" Starting to
|
1253
|
+
print(" Starting to retrieve and calculate",rar_name,"ratio, please wait ......")
|
1254
1254
|
for t in tickers:
|
1255
1255
|
|
1256
1256
|
pf={'Market':(market,market_index),t:1.0}
|
siat/risk_adjusted_return2.py
CHANGED
@@ -598,7 +598,7 @@ def compare_1ticker_mrar(ticker,start,end,rar=['sharpe','sortino','treynor','alp
|
|
598
598
|
regression_period=regression_period[0]
|
599
599
|
|
600
600
|
tname=ticker_name(ticker,ticker_type)
|
601
|
-
print(" Starting to
|
601
|
+
print(" Starting to retrieve and calculate different rar for",tname,"\b, please wait ......\n")
|
602
602
|
|
603
603
|
#预处理ticker_type
|
604
604
|
ticker_type=ticker_type_preprocess_mticker_mixed(ticker,ticker_type)
|
@@ -635,7 +635,7 @@ def compare_1ticker_mrar(ticker,start,end,rar=['sharpe','sortino','treynor','alp
|
|
635
635
|
|
636
636
|
footnote1="注:基于"+ectranslate(ret_type)+","
|
637
637
|
if RF !=0:
|
638
|
-
footnote2="年化无风险利率为"+str(round(RF*100,4))+'%。'
|
638
|
+
footnote2="年化无风险利率为"+str(round(RF*100,4))+text_lang('%。','%')
|
639
639
|
else:
|
640
640
|
footnote2="不考虑年化无风险利率时。"
|
641
641
|
|
@@ -644,7 +644,7 @@ def compare_1ticker_mrar(ticker,start,end,rar=['sharpe','sortino','treynor','alp
|
|
644
644
|
footnote3="贝塔系数回归期间"+str(regression_period)+"个自然日"
|
645
645
|
|
646
646
|
import datetime; todaydt = datetime.date.today()
|
647
|
-
footnote4="数据来源: 综合新浪/
|
647
|
+
footnote4=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)
|
648
648
|
if footnote3 !='':
|
649
649
|
footnotex=footnote1+footnote2+footnote3+'\n'+footnote4
|
650
650
|
else:
|
@@ -654,8 +654,8 @@ def compare_1ticker_mrar(ticker,start,end,rar=['sharpe','sortino','treynor','alp
|
|
654
654
|
if graph:
|
655
655
|
y_label=''
|
656
656
|
import datetime; todaydt = datetime.date.today()
|
657
|
-
x_label="数据来源: 综合新浪/
|
658
|
-
title_txt="风险调整收益:"+tname
|
657
|
+
x_label=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)
|
658
|
+
title_txt=text_lang("风险调整收益:","Risk-adjusted Return: ")+tname
|
659
659
|
|
660
660
|
draw_lines(df1,y_label,x_label=footnotex, \
|
661
661
|
axhline_value=axhline_value,axhline_label=axhline_label, \
|
@@ -667,25 +667,22 @@ def compare_1ticker_mrar(ticker,start,end,rar=['sharpe','sortino','treynor','alp
|
|
667
667
|
#制表
|
668
668
|
recommenddf=pd.DataFrame()
|
669
669
|
if printout:
|
670
|
-
#删除含有Nan的行
|
671
|
-
df1.dropna(inplace=True)
|
672
|
-
|
673
670
|
if sortby=='tpw_mean':
|
674
|
-
sortby_txt='按推荐标记+近期优先加权平均值降序排列'
|
671
|
+
sortby_txt=text_lang('按推荐标记+近期优先加权平均值降序排列',"by Recommend + RWA, Descending")
|
675
672
|
elif sortby=='min':
|
676
|
-
sortby_txt='按推荐标记+最小值降序排列'
|
673
|
+
sortby_txt=text_lang('按推荐标记+最小值降序排列',"by Recommend + Min, Descending")
|
677
674
|
elif sortby=='mean':
|
678
|
-
sortby_txt='按推荐标记+平均值降序排列'
|
675
|
+
sortby_txt=text_lang('按推荐标记+平均值降序排列',"by Recommend + Mean, Descending")
|
679
676
|
elif sortby=='median':
|
680
|
-
sortby_txt='按推荐标记+中位数值降序排列'
|
677
|
+
sortby_txt=text_lang('按推荐标记+中位数值降序排列',"by Recommend + Median, Descending")
|
681
678
|
elif sortby=='trailing':
|
682
|
-
sortby_txt='按推荐标记+短期均值走势降序排列'
|
679
|
+
sortby_txt=text_lang('按推荐标记+短期均值走势降序排列',"by Recommend + Recent Trend, Descending")
|
683
680
|
|
684
681
|
#title_txt='***** 风险调整收益评估:'+tname+','+sortby_txt+' *****'
|
685
|
-
title_txt='
|
682
|
+
title_txt=text_lang('风险调整收益评估:基于',"Risk-adjusted Return Evaluation: Based on ")+ectranslate(rar)+text_lang(',',', ')+sortby_txt
|
686
683
|
|
687
|
-
footnote6='
|
688
|
-
footnote7="
|
684
|
+
footnote6=text_lang('期间为',"Period: ")+str(start)+text_lang('至'," to ")+str(end)+text_lang(";近期指近","; Recent = ")+str(trailing)+text_lang("个交易日。趋势变化率阈值:", " days. Trend threshhold ")+str(trend_threshold)
|
685
|
+
footnote7=text_lang("近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星","Recommend max 5 stars. RWA = Recent Weighted Average")
|
689
686
|
footnotey=footnote6+footnote7+'\n'+footnotex
|
690
687
|
|
691
688
|
recommenddf=descriptive_statistics2(df1,title_txt,footnotey,decimals=4, \
|
@@ -752,7 +749,7 @@ def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
|
|
752
749
|
RF=RF[0]
|
753
750
|
if isinstance(regression_period,list):
|
754
751
|
regression_period=regression_period[0]
|
755
|
-
print(" Starting to
|
752
|
+
print(" Starting to retrieve and calculate",rar,"\b, please wait ......\n")
|
756
753
|
|
757
754
|
#预处理ticker_type
|
758
755
|
ticker_type_list=ticker_type_preprocess_mticker_mixed(ticker,ticker_type)
|
@@ -795,19 +792,35 @@ def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
|
|
795
792
|
axhline_label='零线' #显示零线,但不标注图例
|
796
793
|
#df1.rename(columns={c:ticker_name(c)},inplace=True)
|
797
794
|
|
798
|
-
#共同脚注
|
799
|
-
|
795
|
+
#共同脚注
|
796
|
+
rar_text=ectranslate(rar)
|
797
|
+
if check_language()=="English":
|
798
|
+
if rar != "alpha":
|
799
|
+
rar_text=rar_text.title()+" Ratio"
|
800
|
+
else:
|
801
|
+
#rar_text=rar_text.title()
|
802
|
+
rar_text="Jensen Alpha"
|
803
|
+
|
804
|
+
footnote1=text_lang("注:","")+rar_text.capitalize()+text_lang("基于"," is based on ")+ectranslate(ret_type)+text_lang("。",", ")
|
800
805
|
if RF !=0:
|
801
|
-
footnote2="年化无风险利率"+str(round(RF*100,4))+'%。'
|
806
|
+
footnote2=text_lang("年化无风险利率","annual RF = ")+str(round(RF*100,4))+text_lang('%。','%')
|
802
807
|
else:
|
803
|
-
footnote2="假设年化无风险利率为零。"
|
808
|
+
footnote2=text_lang("假设年化无风险利率为零。","assuming annual RF = 0.")
|
804
809
|
|
805
810
|
footnote3=''
|
806
811
|
if rar.lower() in ['treynor','alpha']:
|
807
|
-
|
812
|
+
mktidx_text=''
|
813
|
+
if mktidx != 'auto':
|
814
|
+
mktidx_text=ticker_name(mktidx)
|
815
|
+
|
816
|
+
if mktidx != 'auto':
|
817
|
+
footnote3=text_lang("CAPM回归期间","\nCAPM regression period ")+str(regression_period)+text_lang("个自然日,"," days, ")+ \
|
818
|
+
text_lang("市场指数基于","using ")+mktidx_text
|
819
|
+
else:
|
820
|
+
footnote3=text_lang("CAPM回归期间","\nCAPM regression period ")+str(regression_period)+text_lang("个自然日"," days")
|
808
821
|
|
809
822
|
import datetime; todaydt = datetime.date.today()
|
810
|
-
footnote4="数据来源: 综合新浪/
|
823
|
+
footnote4=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)
|
811
824
|
if footnote3 !='':
|
812
825
|
footnotex=footnote1+footnote2+footnote3+'\n'+footnote4
|
813
826
|
else:
|
@@ -815,8 +828,9 @@ def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
|
|
815
828
|
|
816
829
|
#绘图
|
817
830
|
if graph:
|
818
|
-
|
819
|
-
|
831
|
+
|
832
|
+
title_txt=text_lang("风险调整收益:","Risk-adjusted Return: ")+rar_text
|
833
|
+
y_label=rar_text
|
820
834
|
|
821
835
|
draw_lines(df1,y_label,x_label=footnotex, \
|
822
836
|
axhline_value=axhline_value,axhline_label=axhline_label, \
|
@@ -826,24 +840,24 @@ def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
|
|
826
840
|
facecolor=facecolor,loc=loc1)
|
827
841
|
|
828
842
|
#制表
|
829
|
-
|
843
|
+
recommenddf=pd.DataFrame()
|
830
844
|
if printout:
|
831
845
|
if sortby=='tpw_mean':
|
832
|
-
sortby_txt='按推荐标记+近期优先加权平均值降序排列'
|
846
|
+
sortby_txt=text_lang('按推荐标记+近期优先加权平均值降序排列',"by Recommend + RWA, Descending")
|
833
847
|
elif sortby=='min':
|
834
|
-
sortby_txt='按推荐标记+最小值降序排列'
|
848
|
+
sortby_txt=text_lang('按推荐标记+最小值降序排列',"by Recommend + Min, Descending")
|
835
849
|
elif sortby=='mean':
|
836
|
-
sortby_txt='按推荐标记+平均值降序排列'
|
850
|
+
sortby_txt=text_lang('按推荐标记+平均值降序排列',"by Recommend + Mean, Descending")
|
837
851
|
elif sortby=='median':
|
838
|
-
sortby_txt='按推荐标记+中位数值降序排列'
|
852
|
+
sortby_txt=text_lang('按推荐标记+中位数值降序排列',"by Recommend + Median, Descending")
|
839
853
|
elif sortby=='trailing':
|
840
|
-
sortby_txt='按推荐标记+短期均值走势降序排列'
|
854
|
+
sortby_txt=text_lang('按推荐标记+短期均值走势降序排列',"by Recommend + Recent Trend, Descending")
|
841
855
|
|
842
856
|
#title_txt='***** 风险调整收益评估:基于'+ectranslate(rar)+','+sortby_txt+' *****'
|
843
|
-
title_txt='风险调整收益评估:基于'+
|
857
|
+
title_txt=text_lang('风险调整收益评估:基于',"Risk-adjusted Return Evaluation: Based on ")+rar_text+text_lang(',',', ')+sortby_txt
|
844
858
|
|
845
|
-
footnote6='期间为'+str(start)+'至'+str(end)+";近期指近"+str(trailing)+"个交易日。趋势变化率阈值:"+str(trend_threshhold)
|
846
|
-
footnote7="近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星"
|
859
|
+
footnote6=text_lang('期间为',"Period: ")+str(start)+text_lang('至'," to ")+str(end)+text_lang(";近期指近","; Recent = ")+str(trailing)+text_lang("个交易日。趋势变化率阈值:", " days. Trend threshhold ")+str(trend_threshhold)
|
860
|
+
footnote7=text_lang("近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星","Recommend max 5 stars. RWA = Recent Weighted Average")
|
847
861
|
footnotey=footnote6+'\n'+footnote7+'\n'+footnotex
|
848
862
|
|
849
863
|
#不能简单删除含有Nan的行,否则导致清空df1,应该进行填充
|
@@ -937,15 +951,15 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
|
|
937
951
|
pd.set_option('display.width', 180) #设置打印宽度(**重要**)
|
938
952
|
|
939
953
|
if sortby=='tpw_mean':
|
940
|
-
sortby_txt='
|
954
|
+
sortby_txt=text_lang('按推荐标记+近期优先加权平均值降序排列',"by Recommend + RWA, Descending")
|
941
955
|
elif sortby=='min':
|
942
|
-
sortby_txt='
|
956
|
+
sortby_txt=text_lang('按推荐标记+最小值降序排列',"by Recommend + Min, Descending")
|
943
957
|
elif sortby=='mean':
|
944
|
-
sortby_txt='
|
958
|
+
sortby_txt=text_lang('按推荐标记+平均值降序排列',"by Recommend + Mean, Descending")
|
945
959
|
elif sortby=='median':
|
946
|
-
sortby_txt='
|
960
|
+
sortby_txt=text_lang('按推荐标记+中位数值降序排列',"by Recommend + Median, Descending")
|
947
961
|
elif sortby=='trailing':
|
948
|
-
sortby_txt='
|
962
|
+
sortby_txt=text_lang('按推荐标记+短期均值走势降序排列',"by Recommend + Recent Trend, Descending")
|
949
963
|
|
950
964
|
df1=df.copy()
|
951
965
|
df1.reset_index(drop=True,inplace=True)
|
@@ -953,7 +967,7 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
|
|
953
967
|
|
954
968
|
# 处理表格标题
|
955
969
|
#titletxt='===风险调整收益综合对比:'+sortby_txt+'==='
|
956
|
-
titletxt='风险调整收益综合对比:'+sortby_txt
|
970
|
+
titletxt=text_lang('风险调整收益综合对比:',"Risk-adjusted Return Overall Evaluation: ")+sortby_txt
|
957
971
|
"""
|
958
972
|
#print("\n"+titletxt)
|
959
973
|
df2=df1.style.set_caption(titletxt).set_table_styles(
|
@@ -1023,21 +1037,21 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
|
|
1023
1037
|
"""
|
1024
1038
|
|
1025
1039
|
#脚注
|
1026
|
-
footnote1="风险调整收益基于"+ectranslate(ret_type)+","
|
1040
|
+
footnote1=text_lang("风险调整收益基于","Based on ")+ectranslate(ret_type)+text_lang(",",', ')
|
1027
1041
|
if RF !=0:
|
1028
|
-
footnote2="年化无风险利率"+str(round(RF*100,4))+'%'
|
1042
|
+
footnote2=text_lang("年化无风险利率","annual RF = ")+str(round(RF*100,4))+'%'
|
1029
1043
|
else:
|
1030
|
-
footnote2="假设年化无风险利率为零"
|
1044
|
+
footnote2=text_lang("假设年化无风险利率为零","assuming annual RF = 0")
|
1031
1045
|
|
1032
1046
|
footnote3=''
|
1033
1047
|
if 'treynor' in rar or 'alpha' in rar:
|
1034
1048
|
if mktidx=='auto':
|
1035
1049
|
mktidx=get_market_index_code(ticker[0] if isinstance(ticker,list) else ticker)
|
1036
1050
|
mktidx_name=ticker_name(mktidx)
|
1037
|
-
footnote3="
|
1051
|
+
footnote3=text_lang("CAPM基于","CAPM based on ")+mktidx_name+text_lang(",回归期间",", regression in ")+str(regression_period)+text_lang("个自然日"," days")
|
1038
1052
|
|
1039
1053
|
import datetime; todaydt = datetime.date.today()
|
1040
|
-
footnote4="数据来源: 综合新浪/
|
1054
|
+
footnote4=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)+text_lang("统计",'')
|
1041
1055
|
if footnote3 !='':
|
1042
1056
|
footnotex=footnote1+footnote2+'\n'+footnote3+'\n'+footnote4
|
1043
1057
|
else:
|
@@ -1045,8 +1059,12 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
|
|
1045
1059
|
|
1046
1060
|
#print("\n"+footnotex)
|
1047
1061
|
#print(footnotex)
|
1048
|
-
|
1049
|
-
|
1062
|
+
if check_language()=="English":
|
1063
|
+
df1.rename(columns={"比较对象":"Securities","sharpe":"Sharpe Ratio","sortino":"Sortino Ratio","alpha":"Jensen Alpha","treynor":"Treynor Ratio","综合推荐":"Overall Recommendation"},inplace=True)
|
1064
|
+
|
1065
|
+
df_display_CSS(df1,titletxt=titletxt,footnote=footnotex,decimals=4, \
|
1066
|
+
first_col_align='left',second_col_align='center', \
|
1067
|
+
last_col_align='center',other_col_align='center')
|
1050
1068
|
|
1051
1069
|
return df
|
1052
1070
|
|
@@ -1103,7 +1121,7 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
|
|
1103
1121
|
RF=RF[0]
|
1104
1122
|
if isinstance(regression_period,list):
|
1105
1123
|
regression_period=regression_period[0]
|
1106
|
-
print(" Starting to
|
1124
|
+
print(" Starting to retrieve and calculate",rar,"for",ticker_name(ticker,ticker_type),"on different types of return, please wait ......\n")
|
1107
1125
|
|
1108
1126
|
df=pd.DataFrame()
|
1109
1127
|
for t in ret_type:
|
@@ -1117,7 +1135,7 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
|
|
1117
1135
|
break
|
1118
1136
|
else:
|
1119
1137
|
dft=df_tmp[[rar]]
|
1120
|
-
dft.rename(columns={rar:"基于"+ectranslate(t)},inplace=True)
|
1138
|
+
dft.rename(columns={rar:text_lang("基于","Based on ")+ectranslate(t)},inplace=True)
|
1121
1139
|
|
1122
1140
|
if len(df)==0: #第一个
|
1123
1141
|
df=dft
|
@@ -1138,16 +1156,16 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
|
|
1138
1156
|
#共同脚注
|
1139
1157
|
footnote1="注:"
|
1140
1158
|
if RF !=0:
|
1141
|
-
footnote2="年化无风险利率为"+str(round(RF*100,4))+'%。'
|
1159
|
+
footnote2="年化无风险利率为"+str(round(RF*100,4))+text_lang('%。','%')
|
1142
1160
|
else:
|
1143
|
-
footnote2="假设年化无风险利率为零。"
|
1161
|
+
footnote2=text_lang("假设年化无风险利率为零。","Assume annual RF = 0")
|
1144
1162
|
|
1145
1163
|
footnote3=''
|
1146
1164
|
if rar.lower() in ['treynor','alpha']:
|
1147
1165
|
footnote3="贝塔系数回归期间"+str(regression_period)+"个自然日"
|
1148
1166
|
|
1149
1167
|
import datetime; todaydt = datetime.date.today()
|
1150
|
-
footnote4="数据来源: 综合新浪/
|
1168
|
+
footnote4=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)
|
1151
1169
|
if footnote3 !='':
|
1152
1170
|
footnotex=footnote1+footnote2+footnote3+'\n'+footnote4
|
1153
1171
|
else:
|
@@ -1156,7 +1174,7 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
|
|
1156
1174
|
#绘图
|
1157
1175
|
if graph:
|
1158
1176
|
|
1159
|
-
title_txt="风险调整收益:"+ticker_name(ticker,ticker_type)
|
1177
|
+
title_txt=text_lang("风险调整收益:","Risk-adjusted Return: ")+ticker_name(ticker,ticker_type)
|
1160
1178
|
y_label=ectranslate(rar)
|
1161
1179
|
|
1162
1180
|
draw_lines(df1,y_label,x_label=footnotex, \
|
@@ -1170,21 +1188,21 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
|
|
1170
1188
|
recommenddf=pd.DataFrame()
|
1171
1189
|
if printout:
|
1172
1190
|
if sortby=='tpw_mean':
|
1173
|
-
sortby_txt='按推荐标记+近期优先加权平均值降序排列'
|
1191
|
+
sortby_txt=text_lang('按推荐标记+近期优先加权平均值降序排列',"by Recommend + RWA, Descending")
|
1174
1192
|
elif sortby=='min':
|
1175
|
-
sortby_txt='按推荐标记+最小值降序排列'
|
1193
|
+
sortby_txt=text_lang('按推荐标记+最小值降序排列',"by Recommend + Min, Descending")
|
1176
1194
|
elif sortby=='mean':
|
1177
|
-
sortby_txt='按推荐标记+平均值降序排列'
|
1195
|
+
sortby_txt=text_lang('按推荐标记+平均值降序排列',"by Recommend + Mean, Descending")
|
1178
1196
|
elif sortby=='median':
|
1179
|
-
sortby_txt='按推荐标记+中位数值降序排列'
|
1197
|
+
sortby_txt=text_lang('按推荐标记+中位数值降序排列',"by Recommend + Median, Descending")
|
1180
1198
|
elif sortby=='trailing':
|
1181
|
-
sortby_txt='按推荐标记+短期均值走势降序排列'
|
1199
|
+
sortby_txt=text_lang('按推荐标记+短期均值走势降序排列',"by Recommend + Recent Trend, Descending")
|
1182
1200
|
|
1183
1201
|
#title_txt='***** 风险调整收益评估:'+'基于'+ectranslate(rar)+','+ticker_name(ticker,ticker_type)+','+sortby_txt+' *****'
|
1184
|
-
title_txt='
|
1202
|
+
title_txt=text_lang('风险调整收益评估:基于',"Risk-adjusted Return Evaluation: Based on ")+ectranslate(rar)+text_lang(',',', ')+sortby_txt
|
1185
1203
|
|
1186
|
-
footnote6='
|
1187
|
-
footnote7="
|
1204
|
+
footnote6=text_lang('期间为',"Period: ")+str(start)+text_lang('至'," to ")+str(end)+text_lang(";近期指近","; Recent = ")+str(trailing)+text_lang("个交易日。趋势变化率阈值:", " days. Trend threshhold ")+str(trend_threshhold)
|
1205
|
+
footnote7=text_lang("近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星","Recommend max 5 stars. RWA = Recent Weighted Average")
|
1188
1206
|
footnotey=footnote6+footnote7+'\n'+footnotex
|
1189
1207
|
|
1190
1208
|
#删除含有Nan的行
|
@@ -1250,7 +1268,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
|
|
1250
1268
|
RF=[RF]
|
1251
1269
|
if isinstance(regression_period,list):
|
1252
1270
|
regression_period=regression_period[0]
|
1253
|
-
print(" Starting to
|
1271
|
+
print(" Starting to retrieve and calculate",rar,"for",ticker_name(ticker,ticker_type),"on different RF, please wait ......\n")
|
1254
1272
|
|
1255
1273
|
df=pd.DataFrame()
|
1256
1274
|
for t in RF:
|
@@ -1264,7 +1282,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
|
|
1264
1282
|
break
|
1265
1283
|
else:
|
1266
1284
|
dft=df_tmp[[rar]]
|
1267
|
-
dft.rename(columns={rar:"基于无风险利率"+str(round(t*100,4))+'%'},inplace=True)
|
1285
|
+
dft.rename(columns={rar:text_lang("基于无风险利率","Based on RF=")+str(round(t*100,4))+'%'},inplace=True)
|
1268
1286
|
|
1269
1287
|
if len(df)==0: #第一个
|
1270
1288
|
df=dft
|
@@ -1283,7 +1301,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
|
|
1283
1301
|
#df1.rename(columns={c:"基于无风险利率"+c},inplace=True)
|
1284
1302
|
|
1285
1303
|
#共同脚注
|
1286
|
-
footnote1="注:"+ectranslate(rar)+"基于"+ectranslate(ret_type)+'。'
|
1304
|
+
footnote1=text_lang("注:","")+ectranslate(rar)+text_lang("基于"," is based on ")+ectranslate(ret_type)+'。'
|
1287
1305
|
footnote2=""
|
1288
1306
|
|
1289
1307
|
footnote3=""
|
@@ -1291,7 +1309,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
|
|
1291
1309
|
footnote3="贝塔系数回归期间"+str(regression_period)+"个自然日"
|
1292
1310
|
|
1293
1311
|
import datetime; todaydt = datetime.date.today()
|
1294
|
-
footnote4="数据来源: 综合新浪/
|
1312
|
+
footnote4=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)
|
1295
1313
|
if footnote3 !='':
|
1296
1314
|
footnotex=footnote1+footnote3+'\n'+footnote4
|
1297
1315
|
else:
|
@@ -1300,7 +1318,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
|
|
1300
1318
|
#绘图
|
1301
1319
|
if graph:
|
1302
1320
|
|
1303
|
-
title_txt="风险调整收益:"+ticker_name(ticker,ticker_type)
|
1321
|
+
title_txt=text_lang("风险调整收益:","Risk-adjusted Return: ")+ticker_name(ticker,ticker_type)
|
1304
1322
|
y_label=ectranslate(rar)
|
1305
1323
|
|
1306
1324
|
draw_lines(df1,y_label,x_label=footnotex, \
|
@@ -1314,21 +1332,21 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
|
|
1314
1332
|
recommenddf=pd.DataFrame()
|
1315
1333
|
if printout:
|
1316
1334
|
if sortby=='tpw_mean':
|
1317
|
-
sortby_txt='按推荐标记+近期优先加权平均值降序排列'
|
1335
|
+
sortby_txt=text_lang('按推荐标记+近期优先加权平均值降序排列',"by Recommend + RWA, Descending")
|
1318
1336
|
elif sortby=='min':
|
1319
|
-
sortby_txt='按推荐标记+最小值降序排列'
|
1337
|
+
sortby_txt=text_lang('按推荐标记+最小值降序排列',"by Recommend + Min, Descending")
|
1320
1338
|
elif sortby=='mean':
|
1321
|
-
sortby_txt='按推荐标记+平均值降序排列'
|
1339
|
+
sortby_txt=text_lang('按推荐标记+平均值降序排列',"by Recommend + Mean, Descending")
|
1322
1340
|
elif sortby=='median':
|
1323
|
-
sortby_txt='按推荐标记+中位数值降序排列'
|
1341
|
+
sortby_txt=text_lang('按推荐标记+中位数值降序排列',"by Recommend + Median, Descending")
|
1324
1342
|
elif sortby=='trailing':
|
1325
|
-
sortby_txt='按推荐标记+短期均值走势降序排列'
|
1343
|
+
sortby_txt=text_lang('按推荐标记+短期均值走势降序排列',"by Recommend + Recent Trend, Descending")
|
1326
1344
|
|
1327
1345
|
#title_txt='***** 风险调整收益评估:'+'基于'+ectranslate(rar)+','+ticker_name(ticker,ticker_type)+','+sortby_txt+' *****'
|
1328
|
-
title_txt='
|
1346
|
+
title_txt=text_lang('风险调整收益评估:基于',"Risk-adjusted Return Evaluation: Based on ")+ectranslate(rar)+text_lang(',',', ')+sortby_txt
|
1329
1347
|
|
1330
|
-
footnote6='期间为'+str(start)+'至'+str(end)+";近期指近"+str(trailing)+"个交易日。趋势变化率阈值:"+str(trend_threshhold)
|
1331
|
-
footnote7="
|
1348
|
+
footnote6=text_lang('期间为',"Period: ")+str(start)+text_lang('至'," to ")+str(end)+text_lang(";近期指近","; Recent = ")+str(trailing)+text_lang("个交易日。趋势变化率阈值:", " days. Trend threshhold ")+str(trend_threshhold)
|
1349
|
+
footnote7=text_lang("近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星","Recommend max 5 stars. RWA = Recent Weighted Average")
|
1332
1350
|
footnotey=footnote6+footnote7+'\n'+footnotex
|
1333
1351
|
|
1334
1352
|
#删除含有Nan的行
|
@@ -1374,7 +1392,7 @@ if __name__=='__main__':
|
|
1374
1392
|
rars=compare_rar_security(ticker,start,end,rar,ret_type,RF,printout=True)
|
1375
1393
|
|
1376
1394
|
def compare_rar_security(ticker,start,end,rar='sharpe', \
|
1377
|
-
ret_type="Annual Ret%", \
|
1395
|
+
ret_type="Annual Adj Ret%", \
|
1378
1396
|
RF=0, \
|
1379
1397
|
regression_period=365, \
|
1380
1398
|
graph=True,loc1='best', \
|
siat/security_trend2.py
CHANGED
@@ -97,7 +97,7 @@ def security_trend(ticker,indicator='Close',adjust='', \
|
|
97
97
|
|
98
98
|
dividend=False,split=False, \
|
99
99
|
|
100
|
-
ret_type='Annual Ret%',RF=0,regression_period=365,market_index="auto", \
|
100
|
+
ret_type='Annual Adj Ret%',RF=0,regression_period=365,market_index="auto", \
|
101
101
|
sortby='tpw_mean',trailing=7,trend_threshhold=0.05, \
|
102
102
|
|
103
103
|
band_area='', \
|
siat/stock.py
CHANGED
@@ -1350,7 +1350,7 @@ def comp_1security_2measures(df,measure1,measure2,twinx=False, \
|
|
1350
1350
|
titletxt=text_lang("证券趋势分析:","Security Trend: ")+tname
|
1351
1351
|
|
1352
1352
|
import datetime; todaydt = datetime.date.today()
|
1353
|
-
footnote1=text_lang("
|
1353
|
+
footnote1=text_lang("数据来源:综合Sina/EM/Stooq/Yahoo,","Source: Sina/EM/Stooq/Yahoo, ")
|
1354
1354
|
footnote=footnote1+str(todaydt)
|
1355
1355
|
|
1356
1356
|
#绘图
|
@@ -1962,13 +1962,13 @@ def compare_msecurity(tickers,measure,start,end, \
|
|
1962
1962
|
#y_label='指标'
|
1963
1963
|
y_label='指标对比'
|
1964
1964
|
|
1965
|
-
x_label1cn="数据来源:
|
1966
|
-
x_label1en="Source:
|
1965
|
+
x_label1cn="数据来源: 综合Sina/EM/Stooq/Yahoo等,"
|
1966
|
+
x_label1en="Source: Sina/EM/Stooq/Yahoo, "
|
1967
1967
|
x_label1=text_lang(x_label1cn,x_label1en)
|
1968
1968
|
import datetime; todaydt = datetime.date.today()
|
1969
1969
|
x_label=x_label1+str(todaydt)
|
1970
1970
|
|
1971
|
-
title_txt1=text_lang("
|
1971
|
+
title_txt1=text_lang("证券趋势分析","Security Trend")
|
1972
1972
|
if y_label != '':
|
1973
1973
|
title_txt=title_txt1+": "+y_label
|
1974
1974
|
else:
|
siat/stock_technical.py
CHANGED
@@ -1107,6 +1107,8 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1107
1107
|
df1=df[(df.index >= startpd) & (df.index <= endpd)]
|
1108
1108
|
|
1109
1109
|
# MACD绘图
|
1110
|
+
print('') #空一行
|
1111
|
+
|
1110
1112
|
df4=df1[['Close','DIF','DEA','MACD']]
|
1111
1113
|
df4.rename(columns={'Close':'收盘价','DIF':'快线DIF','DEA':'慢线DEA','MACD':'柱线MACD'},inplace=True)
|
1112
1114
|
title_txt=text_lang("证券价格走势分析:","Security Trend: ")+ticker_name(ticker,ticker_type)+",MACD"
|
@@ -1191,31 +1193,40 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1191
1193
|
#==============================================================================
|
1192
1194
|
#==============================================================================
|
1193
1195
|
#==============================================================================
|
1196
|
+
if __name__ =="__main__":
|
1197
|
+
talib_install_method()
|
1198
|
+
|
1199
|
+
|
1200
|
+
def is_64bit_os():
|
1201
|
+
import platform
|
1202
|
+
if platform.machine().endswith('64'):
|
1203
|
+
bits='64'
|
1204
|
+
else:
|
1205
|
+
bits='32'
|
1206
|
+
|
1207
|
+
return bits+'-bit'
|
1194
1208
|
|
1195
1209
|
def talib_install_method():
|
1196
1210
|
"""
|
1197
1211
|
功能:提示必需的talib安装方法
|
1198
1212
|
"""
|
1199
|
-
print("
|
1200
|
-
print("
|
1201
|
-
print(" Installation method
|
1202
|
-
print("
|
1203
|
-
print("
|
1204
|
-
print(" Step1. Goto website https://www.lfd.uci.edu/~gohlke/pythonlibs/")
|
1205
|
-
print(" Step2. On the web page, search for TA_lib")
|
1206
|
-
print(" Step3. Select the file suitable for the Python version and OS 32/64")
|
1207
|
-
print(" Your Python version:",check_python_version(),"\b, your operating system:",check_os())
|
1213
|
+
print(" Warning: the classical method may not work properly:")
|
1214
|
+
print(" pip install TA-Lib\n")
|
1215
|
+
print(" Installation method: for Windows")
|
1216
|
+
print(" Step1. Check your Python version and your OS")
|
1217
|
+
print(" Your Python version:",check_python_version(),"\b, your OS:",is_64bit_os(),check_os())
|
1208
1218
|
|
1209
|
-
print("
|
1210
|
-
print("
|
1211
|
-
print("
|
1212
|
-
|
1213
|
-
print("
|
1214
|
-
|
1215
|
-
print("
|
1216
|
-
print("
|
1219
|
+
print(" Step2. Search TA_lib whl file for your OS and Python version")
|
1220
|
+
print(" e.g. Find the one free of charge from CSDN, ... ...\n")
|
1221
|
+
print(" Step3. Download the file to a local folder in your computer")
|
1222
|
+
print(" Step4. Directly install the .whl file from the local folder by:")
|
1223
|
+
print(" pip install ta_lib_whl_file_name")
|
1224
|
+
|
1225
|
+
print("\n Installation method: for Mac, not tested for M chip")
|
1226
|
+
print(" Step1. brew install ta-lib")
|
1227
|
+
print(" Step2. pip install ta-lib")
|
1217
1228
|
|
1218
|
-
print(" Important: after installing ta-lib,
|
1229
|
+
print("\n Important: after installing ta-lib, RESTART your Jupyter.")
|
1219
1230
|
|
1220
1231
|
return
|
1221
1232
|
#==============================================================================
|
@@ -1373,11 +1384,11 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1373
1384
|
|
1374
1385
|
# 绘制曲线
|
1375
1386
|
if ('RSI1' in graph) or ('ALL' in graph):
|
1376
|
-
ax.plot(df4['RSI1'],label=text_lang('
|
1387
|
+
ax.plot(df4['RSI1'],label=text_lang('快速线RSI1','RSI1(Fast line)'),linewidth=linewidth*2,color='orange')
|
1377
1388
|
if ('RSI2' in graph) or ('ALL' in graph):
|
1378
|
-
ax.plot(df4['RSI2'],label=text_lang('
|
1389
|
+
ax.plot(df4['RSI2'],label=text_lang('中速线RSI2','RSI2(Mid line)'),linewidth=linewidth*2,color='purple')
|
1379
1390
|
if ('RSI3' in graph) or ('ALL' in graph):
|
1380
|
-
ax.plot(df4['RSI3'],label=text_lang('
|
1391
|
+
ax.plot(df4['RSI3'],label=text_lang('慢速线RSI3','RSI3(Slow line)'),linewidth=linewidth*2,color='white')
|
1381
1392
|
|
1382
1393
|
# 绘制水平辅助线
|
1383
1394
|
#hl_linestyle_list=['dashed','-.','dotted']
|
@@ -1643,11 +1654,11 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1643
1654
|
|
1644
1655
|
# 绘制曲线
|
1645
1656
|
if ('K' in graph) or ('ALL' in graph):
|
1646
|
-
ax.plot(df4['K'],label=text_lang('快速线K','K line
|
1657
|
+
ax.plot(df4['K'],label=text_lang('快速线K','K(Fast line)'),linewidth=linewidth*2,color='orange')
|
1647
1658
|
if ('D' in graph) or ('ALL' in graph):
|
1648
|
-
ax.plot(df4['D'],label=text_lang('慢速线D','D line
|
1659
|
+
ax.plot(df4['D'],label=text_lang('慢速线D','D(Slow line)'),linewidth=linewidth*2,color='green')
|
1649
1660
|
if ('J' in graph) or ('ALL' in graph):
|
1650
|
-
ax.plot(df4['J'],label=text_lang('
|
1661
|
+
ax.plot(df4['J'],label=text_lang('超快线J','J(Faster line)'),linewidth=linewidth*2,color='purple')
|
1651
1662
|
|
1652
1663
|
# 绘制水平辅助线: 某些情况下不绘制,以便展现KDJ线细节
|
1653
1664
|
maxK=df4['K'].max()
|
siat/translate.py
CHANGED
@@ -1807,8 +1807,8 @@ def codetranslate1(code):
|
|
1807
1807
|
['UBSG.SW','UBS(SW)'],
|
1808
1808
|
|
1809
1809
|
#股票:高科技
|
1810
|
-
['AAPL','Apple'],['Apple','Apple'],['DELL','DELL'],['IBM','IBM'],
|
1811
|
-
['MSFT','Microsoft'],['Microsoft','Microsoft'],['HPQ','HP'],['AMD','AMD'],
|
1810
|
+
['AAPL','Apple'],['Apple','Apple'],['DELL','DELL Corp'],['IBM','IBM Corp'],
|
1811
|
+
['MSFT','Microsoft'],['Microsoft','Microsoft'],['HPQ','HP'],['AMD','AMD Corp'],
|
1812
1812
|
['NVDA','NVidia'],['INTC','Intel'],['QCOM','Qualcomm'],['BB','Blackberry'],
|
1813
1813
|
|
1814
1814
|
#股票:电商、互联网
|
@@ -1946,7 +1946,10 @@ def codetranslate1(code):
|
|
1946
1946
|
['000057.SS','SSE Growth Index'],['000058.SS','SSE Value Index'],
|
1947
1947
|
['000019.SS','SSE Governance Index'],['000048.SS','SSE CSR Index'],
|
1948
1948
|
|
1949
|
-
['899050.BJ','BSE50 Index'],
|
1949
|
+
['899050.BJ','BSE50 Index'],['^SPX','Standard & Poor 500 Index'],
|
1950
|
+
['^RUT','Russell 2000 Index'],['^NKX','Nikkei 225 Index'],
|
1951
|
+
['^NDQ','NASDAQ Composite Index'],['^NDX','NASDAQ 100 Index'],
|
1952
|
+
['IBM','IBM Corp'],
|
1950
1953
|
|
1951
1954
|
['000002.SS','SSE A Index'],['000003.SS','SSE B Index'],
|
1952
1955
|
['399107.SZ','SZE A Index'],['399108.SZ','SZE B Index'],
|
@@ -1957,7 +1960,7 @@ def codetranslate1(code):
|
|
1957
1960
|
['399234.SZ','SZE Utility Index'],['399236.SZ','SZE Commercial Index'],
|
1958
1961
|
['399237.SZ','SZE Logistics Index'],['399240.SZ','SZE Financial Index'],
|
1959
1962
|
['399241.SZ','SZE Realestate Index'],['399244.SZ','SZE EP Index'],
|
1960
|
-
['399991.SZ','
|
1963
|
+
['399991.SZ','SZE BRI Index'],['399997.SZ','CSI China Baijiu Index'],
|
1961
1964
|
|
1962
1965
|
['000903.SS','CSI100 Index'],['399903.SZ','CSI100 Index'],
|
1963
1966
|
['000904.SS','CSI200 Index'],['399904.SZ','CSI200 Index'],
|
@@ -3222,6 +3225,7 @@ if __name__=='__main__':
|
|
3222
3225
|
ticker='sh010303' #国债/基金重码
|
3223
3226
|
ticker='sh018001' #金融债
|
3224
3227
|
ticker='PDD'
|
3228
|
+
ticker='IBM'
|
3225
3229
|
|
3226
3230
|
ticker_type='auto'
|
3227
3231
|
ticker_type='bond'
|
@@ -5,7 +5,7 @@ siat/alpha_vantage_test.py,sha256=tKr-vmuFH3CZAqwmISz6jzjPHzV1JJl3sPfZdz8aTfM,74
|
|
5
5
|
siat/assets_liquidity.py,sha256=o_UZdLs693uNWPEQB2OzxDH0mdWimOmq4qe_vx1pue0,28987
|
6
6
|
siat/assets_liquidity_test.py,sha256=UWk6HIUlizU7LQZ890fGx8LwU1jMMrIZswg8cFUJWZ8,1285
|
7
7
|
siat/barrons_scraping_test.py,sha256=jSRVPxyYylcgG3fAsuqE-9WH3sDfJ3CdZUcU8VBVdoU,10110
|
8
|
-
siat/beta_adjustment.py,sha256=
|
8
|
+
siat/beta_adjustment.py,sha256=viJJE9O82SbA_VYuJtrs3HT0OWYhk4yvmoywskrAhaI,37287
|
9
9
|
siat/beta_adjustment_china.py,sha256=QAVhTQxfV7NSakNPMfQtGMeRzEHVBC8JZQTqD5Owp2I,20802
|
10
10
|
siat/beta_adjustment_test.py,sha256=nBhvQQfqxooCHjy5hL0a8V0ZC58BjuCZVFpqpWpHeF0,2467
|
11
11
|
siat/blockchain.py,sha256=awF3GDtlwaJhku0a2kLuXOS8d3IzkjR_RyzlZWvD3L4,6032
|
@@ -15,10 +15,10 @@ siat/bond_china.py,sha256=eYv-nMoWSS5fZ4VxnuJ29QFY9GUS6meGiIc0Xjm1fQI,3038
|
|
15
15
|
siat/bond_test.py,sha256=yUOFw7ddGU-kb1rJdnsjkJWziDNgUR7OLDA7F7Ub91A,5246
|
16
16
|
siat/bond_zh_sina.py,sha256=26BohGcS120utwqg9dJvdGm5OkuNpNu5bco80uOuQpU,4423
|
17
17
|
siat/capm_beta.py,sha256=cxXdRVBQBllhbfz1LeTJAIWvyRYhW54nhtNUXv4HwS0,29063
|
18
|
-
siat/capm_beta2.py,sha256=
|
18
|
+
siat/capm_beta2.py,sha256=d7lZ-VXVVmBkMVGDPlozL-9gAU3cYpHG23X1WSRCOgY,26907
|
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=ZRf7eq9trFmOSG_JQfWjcpSxn7B6ShB8bQ-kHi1qu9g,151526
|
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
|
@@ -65,7 +65,7 @@ siat/grafix_test.py,sha256=kXvcpLgQNO7wd30g_bWljLj5UH7bIVI0_dUtXbfiKR0,3150
|
|
65
65
|
siat/holding_risk.py,sha256=G3wpaewAKF9CwEqRpr4khyuDu9SU2EGyQUHdk7cmHOA,30693
|
66
66
|
siat/holding_risk_test.py,sha256=FRlw_9wFG98BYcg_cSj95HX5WZ1TvkGaOUdXD7-V86s,474
|
67
67
|
siat/local_debug_test.py,sha256=CDAOffW1Rvs-TcNN5giWVvHMlch1w4dp-w5SIV9jXL0,3936
|
68
|
-
siat/luchy_draw.py,sha256=
|
68
|
+
siat/luchy_draw.py,sha256=8Ue-NKnvSVqINPY1eXat0NJat5MR-gex_K62aOYFdmA,20486
|
69
69
|
siat/market_china.py,sha256=EOO-RvdnzJThTrgNHWW3TlWhx4k4rfdjbooOnQsYdQU,50299
|
70
70
|
siat/markowitz.py,sha256=glHikhabFAF6Hb6df1pYfhkxid2IZXBYAVQng5wd9Wk,97526
|
71
71
|
siat/markowitz2-20240620.py,sha256=irZAPnjaatFsKQmFRMENP-cO6bEUl2narYtkU5NKTWI,108019
|
@@ -87,8 +87,8 @@ siat/option_pricing_test.py,sha256=eeorV5Ja5vjlRXnP6fWJHetGU5Vb8SnLopkC6RV3GfA,2
|
|
87
87
|
siat/option_sina_api_test.py,sha256=dn-k_wrQnAaNKHoROvWJEc7lqlU0bwiV2Aa4usWAFGM,5908
|
88
88
|
siat/proxy_test.py,sha256=erQJrmGs2X46z8Gb1h-7GYQ0rTUcaR8dxHExWoBz2eM,2610
|
89
89
|
siat/quandl_test.py,sha256=EcPoXnLuqzPl5dKyVEZi3j3PJZFpsnU_iNPhLWC9p-A,1552
|
90
|
-
siat/risk_adjusted_return.py,sha256=
|
91
|
-
siat/risk_adjusted_return2.py,sha256=
|
90
|
+
siat/risk_adjusted_return.py,sha256=oRUOagpQlGB56R1xIHZoYwAi42RqcZl0R-JCVBCKVe0,55086
|
91
|
+
siat/risk_adjusted_return2.py,sha256=_ZJvinGmURdT37vgEtpd0DJIAI23HlC02oEmv_By4mA,70523
|
92
92
|
siat/risk_adjusted_return_test.py,sha256=m_VHL5AtT74cJv5i7taTeTfnkX48y0AFJk5phawyYWg,3416
|
93
93
|
siat/risk_evaluation.py,sha256=I6B3gty-t--AkDCO0tKF-291YfpnF-IkXcFjqNKCt9I,76286
|
94
94
|
siat/risk_evaluation_test.py,sha256=YEXM96gKzTfwN4U61AS4Rr1tV7KgUvn4rRC6f3iMw9s,3731
|
@@ -102,10 +102,10 @@ siat/security_prices.py,sha256=LqTrS20mTmM_ACENOXU5qrLmxczGtxnuziAdAynSG_Q,10587
|
|
102
102
|
siat/security_prices_test.py,sha256=OEphoJ87NPKoNow1QA8EU_5MUYrJF-qKoWKNapVfZNI,10779
|
103
103
|
siat/security_trend.py,sha256=o0vpWdrJkmODCP94X-Bvn-w7efHhj9HpUYBHtLl55D0,17240
|
104
104
|
siat/security_trend2-20240620.py,sha256=QVnEcb7AyVbO77jVqfFsJffGXrX8pgJ9xCfoAKmWBPk,24854
|
105
|
-
siat/security_trend2.py,sha256=
|
105
|
+
siat/security_trend2.py,sha256=lUMab8HilXIUPo_z9ZkztMiZ5kf3jAbbCwPPkYbQ1TI,25288
|
106
106
|
siat/setup.py,sha256=up65rQGLmTBkhtaMLowjoQXYmIsnycnm4g1SYmeQS6o,1335
|
107
107
|
siat/shenwan index history test.py,sha256=JCVAzOSEldHalhSFa3pqD8JI_8_djPMQOxpkuYU-Esg,1418
|
108
|
-
siat/stock.py,sha256=
|
108
|
+
siat/stock.py,sha256=D8S2nAeDOdGv4EymfIH1rZnWGNV82sJgYA4wb88f0nI,152460
|
109
109
|
siat/stock_advice_linear.py,sha256=-twT7IGP-NEplkL1WPSACcNJjggRB2j4mlAQCkzOAuo,31655
|
110
110
|
siat/stock_base.py,sha256=uISvbRyOGy8p9QREA96CVydgflBkn5L3OXOGKl8oanc,1312
|
111
111
|
siat/stock_china.py,sha256=zyUyghIrkkkYWlHRRP7Hoblxzfp-jrck60pTJpwMahg,91553
|
@@ -117,7 +117,7 @@ siat/stock_prices_kneighbors.py,sha256=WfZvo5EyeBsm-T37zDj7Sl9dPSRq5Bx4JxIJ9IUum
|
|
117
117
|
siat/stock_prices_linear.py,sha256=-OUKRr27L2aStQgJSlJOrJ4gay_G7P-m-7t7cU2Yoqk,13991
|
118
118
|
siat/stock_profile.py,sha256=B3eIwzEmiCqiCaxIlhfdEPsQBoW1PFOe1hkiY3mVF6Y,26038
|
119
119
|
siat/stock_technical-20240620.py,sha256=A4x18mZgYSA8SSiDz4u_O3gd5oVRgbI6JIiBfFY0tVw,116013
|
120
|
-
siat/stock_technical.py,sha256=
|
120
|
+
siat/stock_technical.py,sha256=1pdhk0FwiQ5v252EckmQMlr2RJQIgR3wDtaSeliDyxY,134192
|
121
121
|
siat/stock_test.py,sha256=E9YJAvOw1VEGJSDI4IZuEjl0tGoisOIlN-g9UqA_IZE,19475
|
122
122
|
siat/stooq.py,sha256=dOc_S5HLrYg48YAKTCs1eX8UTJOOkPM8qLL2KupqlLY,2470
|
123
123
|
siat/temp.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
|
@@ -131,14 +131,14 @@ siat/transaction_test.py,sha256=Z8g1LJCN4-mnUByXMUMoFmN0t105cbmsz2QmvSuIkbU,1858
|
|
131
131
|
siat/translate-20230125.py,sha256=NPPSXhT38s5t9fzMvl_fvi4ckSB73ThLmZetVI-xGdU,117953
|
132
132
|
siat/translate-20230206.py,sha256=-vtI125WyaJhmPotOpDAmclt_XnYVaWU9ByLWZ6FyYE,118133
|
133
133
|
siat/translate-20230215.py,sha256=TJgtPE3n8IjljmZ4Pefy8dmHoNdFF-1zpML6BhA9FKE,121657
|
134
|
-
siat/translate.py,sha256=
|
134
|
+
siat/translate.py,sha256=LIS4ybfYAk17lOFKu80ZLkvIXnTquBi90wTKcF8BCo0,216547
|
135
135
|
siat/translate_20240606.py,sha256=63IyHWEU3Uz9mjwyuAX3fqY4nUMdwh0ICQAgmgPXP7Y,215121
|
136
136
|
siat/universal_test.py,sha256=CDAOffW1Rvs-TcNN5giWVvHMlch1w4dp-w5SIV9jXL0,3936
|
137
137
|
siat/valuation.py,sha256=NKfeZMdDJOW42oLVHob6eSVBXUqlN1OCnnzwyGAst8c,48855
|
138
138
|
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
|
-
siat-3.2.
|
142
|
-
siat-3.2.
|
143
|
-
siat-3.2.
|
144
|
-
siat-3.2.
|
141
|
+
siat-3.2.54.dist-info/METADATA,sha256=12BBbiCRE7mttmx2Cngyy3M7MxRteZFv43vWg6y0B3c,7310
|
142
|
+
siat-3.2.54.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
143
|
+
siat-3.2.54.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
|
144
|
+
siat-3.2.54.dist-info/RECORD,,
|
File without changes
|
File without changes
|