siat 3.2.52__py3-none-any.whl → 3.2.53__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 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("推荐标记","Recommend")},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
 
@@ -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('风险调整收益评估:基于',"RAR 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 uses ")+str(trailing)+text_lang("个交易日。趋势变化率阈值:", " trading days. Trend change threshhold ")+str(trend_threshhold)
685
+ footnote7=text_lang("近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星","Recent trend rated by multiple factors, 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, \
@@ -796,18 +793,18 @@ def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
796
793
  #df1.rename(columns={c:ticker_name(c)},inplace=True)
797
794
 
798
795
  #共同脚注
799
- footnote1=ectranslate(rar)+"基于"+ectranslate(ret_type)+"。"
796
+ footnote1=text_lang("注:","Notes: ")+ectranslate(rar)+text_lang("基于"," is based on ")+ectranslate(ret_type)+text_lang("。",", ")
800
797
  if RF !=0:
801
- footnote2="年化无风险利率"+str(round(RF*100,4))+'%。'
798
+ footnote2=text_lang("年化无风险利率","annual RF = ")+str(round(RF*100,4))+text_lang('%。','%')
802
799
  else:
803
- footnote2="假设年化无风险利率为零。"
800
+ footnote2=text_lang("假设年化无风险利率为零。","assuming annual RF = 0.")
804
801
 
805
802
  footnote3=''
806
803
  if rar.lower() in ['treynor','alpha']:
807
804
  footnote3="贝塔系数回归期间"+str(regression_period)+"个自然日"
808
805
 
809
806
  import datetime; todaydt = datetime.date.today()
810
- footnote4="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
807
+ footnote4=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)
811
808
  if footnote3 !='':
812
809
  footnotex=footnote1+footnote2+footnote3+'\n'+footnote4
813
810
  else:
@@ -815,7 +812,7 @@ def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
815
812
 
816
813
  #绘图
817
814
  if graph:
818
- title_txt="风险调整收益:"+ectranslate(rar)
815
+ title_txt=text_lang("风险调整收益:","Risk-adjusted Return: ")+ectranslate(rar)
819
816
  y_label=ectranslate(rar)
820
817
 
821
818
  draw_lines(df1,y_label,x_label=footnotex, \
@@ -826,24 +823,24 @@ def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
826
823
  facecolor=facecolor,loc=loc1)
827
824
 
828
825
  #制表
829
- #recommenddf=pd.DataFrame()
826
+ recommenddf=pd.DataFrame()
830
827
  if printout:
831
828
  if sortby=='tpw_mean':
832
- sortby_txt='按推荐标记+近期优先加权平均值降序排列'
829
+ sortby_txt=text_lang('按推荐标记+近期优先加权平均值降序排列',"by Recommend + RWA, Descending")
833
830
  elif sortby=='min':
834
- sortby_txt='按推荐标记+最小值降序排列'
831
+ sortby_txt=text_lang('按推荐标记+最小值降序排列',"by Recommend + Min, Descending")
835
832
  elif sortby=='mean':
836
- sortby_txt='按推荐标记+平均值降序排列'
833
+ sortby_txt=text_lang('按推荐标记+平均值降序排列',"by Recommend + Mean, Descending")
837
834
  elif sortby=='median':
838
- sortby_txt='按推荐标记+中位数值降序排列'
835
+ sortby_txt=text_lang('按推荐标记+中位数值降序排列',"by Recommend + Median, Descending")
839
836
  elif sortby=='trailing':
840
- sortby_txt='按推荐标记+短期均值走势降序排列'
837
+ sortby_txt=text_lang('按推荐标记+短期均值走势降序排列',"by Recommend + Recent Trend, Descending")
841
838
 
842
839
  #title_txt='***** 风险调整收益评估:基于'+ectranslate(rar)+','+sortby_txt+' *****'
843
- title_txt='风险调整收益评估:基于'+ectranslate(rar)+','+sortby_txt
840
+ title_txt=text_lang('风险调整收益评估:基于',"RAR Evaluation: Based on ")+ectranslate(rar)+text_lang(',',', ')+sortby_txt
844
841
 
845
- footnote6='期间为'+str(start)+'至'+str(end)+";近期指近"+str(trailing)+"个交易日。趋势变化率阈值:"+str(trend_threshhold)
846
- footnote7="近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星"
842
+ footnote6=text_lang('期间为',"Period: ")+str(start)+text_lang('至'," to ")+str(end)+text_lang(";近期指近","; Recent uses ")+str(trailing)+text_lang("个交易日。趋势变化率阈值:", " trading days. Trend change threshhold ")+str(trend_threshhold)
843
+ footnote7=text_lang("近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星","Recent trend rated by multiple factors, Recommend max 5 stars. RWA=Recent Weighted Average")
847
844
  footnotey=footnote6+'\n'+footnote7+'\n'+footnotex
848
845
 
849
846
  #不能简单删除含有Nan的行,否则导致清空df1,应该进行填充
@@ -1027,7 +1024,7 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
1027
1024
  if RF !=0:
1028
1025
  footnote2="年化无风险利率"+str(round(RF*100,4))+'%'
1029
1026
  else:
1030
- footnote2="假设年化无风险利率为零"
1027
+ footnote2=text_lang("假设年化无风险利率为零","Assume annual RF = 0")
1031
1028
 
1032
1029
  footnote3=''
1033
1030
  if 'treynor' in rar or 'alpha' in rar:
@@ -1037,7 +1034,7 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
1037
1034
  footnote3="贝塔系数基于"+mktidx_name+",回归期间"+str(regression_period)+"个自然日"
1038
1035
 
1039
1036
  import datetime; todaydt = datetime.date.today()
1040
- footnote4="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
1037
+ footnote4=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)+text_lang("统计",'')
1041
1038
  if footnote3 !='':
1042
1039
  footnotex=footnote1+footnote2+'\n'+footnote3+'\n'+footnote4
1043
1040
  else:
@@ -1117,7 +1114,7 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
1117
1114
  break
1118
1115
  else:
1119
1116
  dft=df_tmp[[rar]]
1120
- dft.rename(columns={rar:"基于"+ectranslate(t)},inplace=True)
1117
+ dft.rename(columns={rar:text_lang("基于","Based on ")+ectranslate(t)},inplace=True)
1121
1118
 
1122
1119
  if len(df)==0: #第一个
1123
1120
  df=dft
@@ -1138,16 +1135,16 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
1138
1135
  #共同脚注
1139
1136
  footnote1="注:"
1140
1137
  if RF !=0:
1141
- footnote2="年化无风险利率为"+str(round(RF*100,4))+'%。'
1138
+ footnote2="年化无风险利率为"+str(round(RF*100,4))+text_lang('%。','%')
1142
1139
  else:
1143
- footnote2="假设年化无风险利率为零。"
1140
+ footnote2=text_lang("假设年化无风险利率为零。","Assume annual RF = 0")
1144
1141
 
1145
1142
  footnote3=''
1146
1143
  if rar.lower() in ['treynor','alpha']:
1147
1144
  footnote3="贝塔系数回归期间"+str(regression_period)+"个自然日"
1148
1145
 
1149
1146
  import datetime; todaydt = datetime.date.today()
1150
- footnote4="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
1147
+ footnote4=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)
1151
1148
  if footnote3 !='':
1152
1149
  footnotex=footnote1+footnote2+footnote3+'\n'+footnote4
1153
1150
  else:
@@ -1156,7 +1153,7 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
1156
1153
  #绘图
1157
1154
  if graph:
1158
1155
 
1159
- title_txt="风险调整收益:"+ticker_name(ticker,ticker_type)
1156
+ title_txt=text_lang("风险调整收益:","Risk-adjusted Return: ")+ticker_name(ticker,ticker_type)
1160
1157
  y_label=ectranslate(rar)
1161
1158
 
1162
1159
  draw_lines(df1,y_label,x_label=footnotex, \
@@ -1170,21 +1167,21 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
1170
1167
  recommenddf=pd.DataFrame()
1171
1168
  if printout:
1172
1169
  if sortby=='tpw_mean':
1173
- sortby_txt='按推荐标记+近期优先加权平均值降序排列'
1170
+ sortby_txt=text_lang('按推荐标记+近期优先加权平均值降序排列',"by Recommend + RWA, Descending")
1174
1171
  elif sortby=='min':
1175
- sortby_txt='按推荐标记+最小值降序排列'
1172
+ sortby_txt=text_lang('按推荐标记+最小值降序排列',"by Recommend + Min, Descending")
1176
1173
  elif sortby=='mean':
1177
- sortby_txt='按推荐标记+平均值降序排列'
1174
+ sortby_txt=text_lang('按推荐标记+平均值降序排列',"by Recommend + Mean, Descending")
1178
1175
  elif sortby=='median':
1179
- sortby_txt='按推荐标记+中位数值降序排列'
1176
+ sortby_txt=text_lang('按推荐标记+中位数值降序排列',"by Recommend + Median, Descending")
1180
1177
  elif sortby=='trailing':
1181
- sortby_txt='按推荐标记+短期均值走势降序排列'
1178
+ sortby_txt=text_lang('按推荐标记+短期均值走势降序排列',"by Recommend + Recent Trend, Descending")
1182
1179
 
1183
1180
  #title_txt='***** 风险调整收益评估:'+'基于'+ectranslate(rar)+','+ticker_name(ticker,ticker_type)+','+sortby_txt+' *****'
1184
- title_txt='风险调整收益评估:'+'基于'+ectranslate(rar)+','+ticker_name(ticker,ticker_type)+''+sortby_txt
1181
+ title_txt=text_lang('风险调整收益评估:基于',"RAR Evaluation: Based on ")+ectranslate(rar)+text_lang(',',', ')+sortby_txt
1185
1182
 
1186
- footnote6='期间:'+str(start)+'至'+str(end)+";近期指近"+str(trailing)+"个交易日。趋势变化率阈值:"+str(trend_threshhold)+"。"
1187
- footnote7="近期优先趋势和星号为多项因素综合研判,最多五颗星"
1183
+ footnote6=text_lang('期间为',"Period: ")+str(start)+text_lang('至'," to ")+str(end)+text_lang(";近期指近","; Recent means ")+str(trailing)+text_lang("个交易日。趋势变化率阈值:", " trading days. Trend change threshhold is ")+str(trend_threshhold)
1184
+ footnote7=text_lang("近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星","Recent trend is rated by multiple factors, Recommend max 5 stars. RWA=Recent Weighted Average")
1188
1185
  footnotey=footnote6+footnote7+'\n'+footnotex
1189
1186
 
1190
1187
  #删除含有Nan的行
@@ -1264,7 +1261,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
1264
1261
  break
1265
1262
  else:
1266
1263
  dft=df_tmp[[rar]]
1267
- dft.rename(columns={rar:"基于无风险利率"+str(round(t*100,4))+'%'},inplace=True)
1264
+ dft.rename(columns={rar:text_lang("基于无风险利率","Based on RF=")+str(round(t*100,4))+'%'},inplace=True)
1268
1265
 
1269
1266
  if len(df)==0: #第一个
1270
1267
  df=dft
@@ -1283,7 +1280,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
1283
1280
  #df1.rename(columns={c:"基于无风险利率"+c},inplace=True)
1284
1281
 
1285
1282
  #共同脚注
1286
- footnote1="注:"+ectranslate(rar)+"基于"+ectranslate(ret_type)+'。'
1283
+ footnote1=text_lang("注:","Notes: ")+ectranslate(rar)+text_lang("基于"," is based on ")+ectranslate(ret_type)+'。'
1287
1284
  footnote2=""
1288
1285
 
1289
1286
  footnote3=""
@@ -1291,7 +1288,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
1291
1288
  footnote3="贝塔系数回归期间"+str(regression_period)+"个自然日"
1292
1289
 
1293
1290
  import datetime; todaydt = datetime.date.today()
1294
- footnote4="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
1291
+ footnote4=text_lang("数据来源: 综合新浪/Stooq/Yahoo,","Data source: Sina/Stooq/Yahoo, ")+str(todaydt)
1295
1292
  if footnote3 !='':
1296
1293
  footnotex=footnote1+footnote3+'\n'+footnote4
1297
1294
  else:
@@ -1300,7 +1297,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
1300
1297
  #绘图
1301
1298
  if graph:
1302
1299
 
1303
- title_txt="风险调整收益:"+ticker_name(ticker,ticker_type)
1300
+ title_txt=text_lang("风险调整收益:","Risk-adjusted Return: ")+ticker_name(ticker,ticker_type)
1304
1301
  y_label=ectranslate(rar)
1305
1302
 
1306
1303
  draw_lines(df1,y_label,x_label=footnotex, \
@@ -1314,21 +1311,21 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
1314
1311
  recommenddf=pd.DataFrame()
1315
1312
  if printout:
1316
1313
  if sortby=='tpw_mean':
1317
- sortby_txt='按推荐标记+近期优先加权平均值降序排列'
1314
+ sortby_txt=text_lang('按推荐标记+近期优先加权平均值降序排列',"by Recommend + RWA, Descending")
1318
1315
  elif sortby=='min':
1319
- sortby_txt='按推荐标记+最小值降序排列'
1316
+ sortby_txt=text_lang('按推荐标记+最小值降序排列',"by Recommend + Min, Descending")
1320
1317
  elif sortby=='mean':
1321
- sortby_txt='按推荐标记+平均值降序排列'
1318
+ sortby_txt=text_lang('按推荐标记+平均值降序排列',"by Recommend + Mean, Descending")
1322
1319
  elif sortby=='median':
1323
- sortby_txt='按推荐标记+中位数值降序排列'
1320
+ sortby_txt=text_lang('按推荐标记+中位数值降序排列',"by Recommend + Median, Descending")
1324
1321
  elif sortby=='trailing':
1325
- sortby_txt='按推荐标记+短期均值走势降序排列'
1322
+ sortby_txt=text_lang('按推荐标记+短期均值走势降序排列',"by Recommend + Recent Trend, Descending")
1326
1323
 
1327
1324
  #title_txt='***** 风险调整收益评估:'+'基于'+ectranslate(rar)+','+ticker_name(ticker,ticker_type)+','+sortby_txt+' *****'
1328
- title_txt='风险调整收益评估:'+'基于'+ectranslate(rar)+','+ticker_name(ticker,ticker_type)+''+sortby_txt
1325
+ title_txt=text_lang('风险调整收益评估:基于',"RAR Evaluation: Based on ")+ectranslate(rar)+text_lang(',',', ')+sortby_txt
1329
1326
 
1330
- footnote6='期间为'+str(start)+'至'+str(end)+";近期指近"+str(trailing)+"个交易日。趋势变化率阈值:"+str(trend_threshhold)+"。"
1331
- footnote7="近期优先趋势和星号为多项因素综合研判,最多五颗星"
1327
+ footnote6=text_lang('期间为',"Period: ")+str(start)+text_lang('至'," to ")+str(end)+text_lang(";近期指近","; Recent uses ")+str(trailing)+text_lang("个交易日。趋势变化率阈值:", " trading days. Trend change threshhold ")+str(trend_threshhold)
1328
+ footnote7=text_lang("近期优先趋势和星号为风险调整收益指标加趋势等多项因素综合研判,最多五颗星","Recent trend rated by multiple factors, Recommend max 5 stars. RWA=Recent Weighted Average")
1332
1329
  footnotey=footnote6+footnote7+'\n'+footnotex
1333
1330
 
1334
1331
  #删除含有Nan的行
@@ -1374,7 +1371,7 @@ if __name__=='__main__':
1374
1371
  rars=compare_rar_security(ticker,start,end,rar,ret_type,RF,printout=True)
1375
1372
 
1376
1373
  def compare_rar_security(ticker,start,end,rar='sharpe', \
1377
- ret_type="Annual Ret%", \
1374
+ ret_type="Annual Adj Ret%", \
1378
1375
  RF=0, \
1379
1376
  regression_period=365, \
1380
1377
  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"
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.53
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
@@ -18,7 +18,7 @@ siat/capm_beta.py,sha256=cxXdRVBQBllhbfz1LeTJAIWvyRYhW54nhtNUXv4HwS0,29063
18
18
  siat/capm_beta2.py,sha256=07y3q4nJdkM-anpZepj4gK0gvTKj-BB0ppDDI5-TCcY,26904
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=493MZpsrKnb_RP1myq_uHj0wCdqvDk0kiRBzNF-syQI,151521
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
@@ -88,7 +88,7 @@ siat/option_sina_api_test.py,sha256=dn-k_wrQnAaNKHoROvWJEc7lqlU0bwiV2Aa4usWAFGM,
88
88
  siat/proxy_test.py,sha256=erQJrmGs2X46z8Gb1h-7GYQ0rTUcaR8dxHExWoBz2eM,2610
89
89
  siat/quandl_test.py,sha256=EcPoXnLuqzPl5dKyVEZi3j3PJZFpsnU_iNPhLWC9p-A,1552
90
90
  siat/risk_adjusted_return.py,sha256=dWVrCDnoxvMmI6cVtrL_FC18QZFrGb6-k9lOoyy5JGE,55085
91
- siat/risk_adjusted_return2.py,sha256=nK5tO-FIVnECbJD0on2CClQVgCyrkI1pWve1oQERK3k,66310
91
+ siat/risk_adjusted_return2.py,sha256=AkpxKIYv3LL1mvb6Lha4z0sevinsLLmb-ttwiJGHNO0,69083
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=X0AqtpCih62-4ff8AnsNGEvDUVoo-sY5hTb3igc5yuE,134230
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.53.dist-info/METADATA,sha256=CRsgADyYbTDreJlYNKtVB0p0uZdkKN603MoUoWPCwZo,7310
142
+ siat-3.2.53.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
143
+ siat-3.2.53.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
144
+ siat-3.2.53.dist-info/RECORD,,
File without changes