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 +11 -0
- siat/luchy_draw.py +3 -3
- siat/risk_adjusted_return2.py +54 -57
- siat/security_trend2.py +1 -1
- siat/stock.py +4 -4
- siat/stock_technical.py +2 -0
- siat/translate.py +8 -4
- {siat-3.2.52.dist-info → siat-3.2.53.dist-info}/METADATA +1 -1
- {siat-3.2.52.dist-info → siat-3.2.53.dist-info}/RECORD +11 -11
- {siat-3.2.52.dist-info → siat-3.2.53.dist-info}/WHEEL +0 -0
- {siat-3.2.52.dist-info → siat-3.2.53.dist-info}/top_level.txt +0 -0
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,
|
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_return2.py
CHANGED
@@ -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('风险调整收益评估:基于',"RAR 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 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="数据来源: 综合新浪/
|
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
|
-
|
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="数据来源: 综合新浪/
|
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="数据来源: 综合新浪/
|
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='
|
1181
|
+
title_txt=text_lang('风险调整收益评估:基于',"RAR Evaluation: Based on ")+ectranslate(rar)+text_lang(',',', ')+sortby_txt
|
1185
1182
|
|
1186
|
-
footnote6='
|
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="数据来源: 综合新浪/
|
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='
|
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("
|
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"
|
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'
|
@@ -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
|
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=
|
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=
|
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=
|
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=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=
|
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.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
|
File without changes
|