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 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 retrive and calculate Hamada ratios, please wait ......")
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 retrive and calculate capm beta, please wait ......")
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 retrive and calculate capm beta on different RF, please wait ......")
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 retrive and calculate capm beta on different regression period, please wait ......")
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,pickle_path,overlap_confirm=False)
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,header_dict['pickle_path'],overlap_confirm=False)
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,header_dict['pickle_path'],overlap_confirm=False)
329
+ pickle_write(df,detail_path,overlap_confirm=False)
330
330
 
331
331
  return
332
332
 
@@ -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 retrive and calculate",rar_name,"ratio, please wait ......")
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}
@@ -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 retrive and calculate different rar for",tname,"\b, please wait ......\n")
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="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
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="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)
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='风险调整收益评估:'+tname+','+sortby_txt
682
+ title_txt=text_lang('风险调整收益评估:基于',"Risk-adjusted Return Evaluation: Based on ")+ectranslate(rar)+text_lang(',',', ')+sortby_txt
686
683
 
687
- footnote6='期间:'+str(start)+'至'+str(end)+";近期指近"+str(trailing)+"个交易日。趋势变化率阈值:"+str(trend_threshhold)+"。"
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 retrive and calculate",rar,"\b, please wait ......\n")
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
- footnote1=ectranslate(rar)+"基于"+ectranslate(ret_type)+"。"
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
- footnote3="贝塔系数回归期间"+str(regression_period)+"个自然日"
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="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
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
- title_txt="风险调整收益:"+ectranslate(rar)
819
- y_label=ectranslate(rar)
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
- #recommenddf=pd.DataFrame()
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='风险调整收益评估:基于'+ectranslate(rar)+','+sortby_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="贝塔系数基于"+mktidx_name+",回归期间"+str(regression_period)+"个自然日"
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="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
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
- df_display_CSS(df1,titletxt=titletxt,footnote=footnotex,decimals=4)
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 retrive and calculate",rar,"for",ticker_name(ticker,ticker_type),"on different types of return, please wait ......\n")
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="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
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='风险调整收益评估:'+'基于'+ectranslate(rar)+','+ticker_name(ticker,ticker_type)+''+sortby_txt
1202
+ title_txt=text_lang('风险调整收益评估:基于',"Risk-adjusted Return Evaluation: Based on ")+ectranslate(rar)+text_lang(',',', ')+sortby_txt
1185
1203
 
1186
- footnote6='期间:'+str(start)+'至'+str(end)+";近期指近"+str(trailing)+"个交易日。趋势变化率阈值:"+str(trend_threshhold)+"。"
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 retrive and calculate",rar,"for",ticker_name(ticker,ticker_type),"on different RF, please wait ......\n")
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="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
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='风险调整收益评估:'+'基于'+ectranslate(rar)+','+ticker_name(ticker,ticker_type)+''+sortby_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("数据来源:综合新浪/东方财富/stooq/yahoo,","Source: integrating sina/eastmoney/stooq/yahoo, ")
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="数据来源: 综合新浪/东方财富/stooq/yahoo等,"
1966
- x_label1en="Source: integrating sina/stooq/yahoo, "
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("证券趋势对比分析","Trend Comparative Analysis")
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(" Installation method 1: pip install TA_Lib")
1200
- print(" Note: method 1 is subject to fail")
1201
- print(" Installation method 2: conda install -c quantopian ta-lib")
1202
- print(" Note: method 2 may need scientific internet access")
1203
- print(" Installation method 3: recommended")
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(" Step4. Download the file")
1210
- print(" Step5. pip install <downloaded file name>")
1211
- print(" Note: method 3 is troublesome, but more likely successful")
1212
-
1213
- print(" How to check the Python version in your computer? ")
1214
- print(" python --version")
1215
- print(" How to check the win32/win_amd64 in your computer? ")
1216
- print(" On Windows, right click Start, click System")
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, restart Python environment.")
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('快速(周)线RSI1','RSI1(1 week, Fast line)'),linewidth=linewidth*2,color='orange')
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('中速(双周)线RSI2','RSI2(2 weeks, Mid line)'),linewidth=linewidth*2,color='purple')
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('慢速(月)线RSI3','RSI3(1 month, Slow line)'),linewidth=linewidth*2,color='white')
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(Fast)'),linewidth=linewidth*2,color='orange')
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(Slow)'),linewidth=linewidth*2,color='green')
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('超快确认线J','J line(Faster, confirm)'),linewidth=linewidth*2,color='purple')
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','SZSE BRI Index'],['399997.SZ','CSI China Baijiu Index'],
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'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siat
3
- Version: 3.2.52
3
+ Version: 3.2.54
4
4
  Summary: Securities Investment Analysis Tools (siat)
5
5
  Home-page: https://pypi.org/project/siat/
6
6
  Author: Prof. WANG Dehong, International Business School, Beijing Foreign Studies University
@@ -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=LZWrEWP-yw7spQjeSldLXpmZu7pFqF5jR3EHym7wNys,37286
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=07y3q4nJdkM-anpZepj4gK0gvTKj-BB0ppDDI5-TCcY,26904
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=-0zmR2N_t2xaTyYedwztT7HcHKG39DwaoLoX1u5Wm7s,150656
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=CESMhLYcsC6UtYfTZOfYnVQ84zz1MnXRN81P7OZHEgE,20516
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=dWVrCDnoxvMmI6cVtrL_FC18QZFrGb6-k9lOoyy5JGE,55085
91
- siat/risk_adjusted_return2.py,sha256=nK5tO-FIVnECbJD0on2CClQVgCyrkI1pWve1oQERK3k,66310
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=WOygSyWSynNmk5gpOA8n1738-nWqfDzuyMjwriB3eP4,25284
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=cIEVxAZ6vPhpICWk4p4tqpeyidLjxZHO2fF_HClaxHw,152530
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=GsW1lciBEH-OEndXyFCUI6BB8uo12RwhAnuS7ND0mgg,134190
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=5o7hSMeNOdyenqiyB5oZwFvIpFvt3yGgp25KZNbqy9o,216309
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.52.dist-info/METADATA,sha256=cbql3N27Ey8OhncmGulNMr8S7kVrcY92OQAwrz5w-8g,7310
142
- siat-3.2.52.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
143
- siat-3.2.52.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
144
- siat-3.2.52.dist-info/RECORD,,
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