siat 3.2.51__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_prices.py +16 -17
- siat/security_trend2.py +1 -1
- siat/stock.py +4 -4
- siat/stock_technical.py +42 -31
- siat/translate.py +8 -4
- {siat-3.2.51.dist-info → siat-3.2.53.dist-info}/METADATA +1 -1
- {siat-3.2.51.dist-info → siat-3.2.53.dist-info}/RECORD +12 -12
- {siat-3.2.51.dist-info → siat-3.2.53.dist-info}/WHEEL +0 -0
- {siat-3.2.51.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_prices.py
CHANGED
@@ -960,7 +960,7 @@ def get_price_ak_us(symbol, fromdate, todate, adjust=""):
|
|
960
960
|
"""
|
961
961
|
抓取单个美股股价,不能处理股指
|
962
962
|
"""
|
963
|
-
import pandas as pd
|
963
|
+
import pandas as pd #此处需要,去掉会出错!
|
964
964
|
DEBUG=False
|
965
965
|
|
966
966
|
#检查日期期间
|
@@ -975,26 +975,25 @@ def get_price_ak_us(symbol, fromdate, todate, adjust=""):
|
|
975
975
|
import akshare as ak
|
976
976
|
if DEBUG:
|
977
977
|
print(" Searching info in Sina for",symbol,"... ...")
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
"""
|
978
|
+
try:
|
979
|
+
if adjust=='':
|
980
|
+
df=ak.stock_us_daily(symbol=symbol,adjust=adjust)
|
981
|
+
elif adjust=='Adj_only':
|
982
|
+
df=ak.stock_us_daily(symbol=symbol,adjust='qfq')
|
983
|
+
df['Adj Close']=df['close']
|
984
|
+
|
985
|
+
else:
|
986
|
+
#分别获取收盘价和复权价,并合成
|
987
|
+
dffqno=ak.stock_us_daily(symbol=symbol,adjust='')
|
988
|
+
dffq=ak.stock_us_daily(symbol=symbol,adjust='qfq')
|
989
|
+
dffq.rename(columns={'close':'Adj Close'},inplace=True)
|
990
|
+
|
991
|
+
df=pd.merge(dffqno,dffq[['date','Adj Close']],on=['date'])
|
993
992
|
except:
|
994
993
|
if DEBUG:
|
995
994
|
print(" #Error(get_price_ak_us): no info found for",symbol)
|
996
995
|
return None
|
997
|
-
|
996
|
+
|
998
997
|
#去掉可能出现的时区信息,必须使用datetime中的tz_localize
|
999
998
|
df['date']=pd.to_datetime(df['date'])
|
1000
999
|
#df['date']=df['date'].tz_localize(None)
|
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
@@ -867,7 +867,7 @@ def security_MACD(ticker,start='default',end='default', \
|
|
867
867
|
resample_freq='6H',smooth=True,linewidth=1.5, \
|
868
868
|
loc1='lower left',loc2='lower right', \
|
869
869
|
graph=['ALL'],printout=True,ticker_type='auto',source='auto', \
|
870
|
-
price_line_color='red'):
|
870
|
+
price_line_color='red',facecolor='k'):
|
871
871
|
"""
|
872
872
|
套壳函数:可用于股票、交易所债券、交易所基金、部分期货期权(限美股)
|
873
873
|
"""
|
@@ -878,7 +878,7 @@ def security_MACD(ticker,start='default',end='default', \
|
|
878
878
|
resample_freq=resample_freq,smooth=smooth,linewidth=linewidth, \
|
879
879
|
loc1=loc1,loc2=loc2, \
|
880
880
|
graph=graph,printout=printout,ticker_type=ticker_type,source=source, \
|
881
|
-
price_line_color=price_line_color)
|
881
|
+
price_line_color=price_line_color,facecolor=facecolor)
|
882
882
|
return df
|
883
883
|
|
884
884
|
|
@@ -888,7 +888,7 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
888
888
|
resample_freq='H',smooth=True,linewidth=1.5, \
|
889
889
|
loc1='lower left',loc2='lower right', \
|
890
890
|
graph=['ALL'],printout=True,ticker_type='auto',source='auto', \
|
891
|
-
price_line_color='red'):
|
891
|
+
price_line_color='red',facecolor='k'):
|
892
892
|
"""
|
893
893
|
功能:计算股票的技术分析指标MACD
|
894
894
|
输入:df,四种股价Open/Close/High/Low,成交量Volume
|
@@ -991,7 +991,7 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
991
991
|
|
992
992
|
print(" Rendering graphics ...")
|
993
993
|
draw_lines(df2,y_label,x_label,axhline_value,axhline_label,title_txt, \
|
994
|
-
data_label=False,resample_freq=resample_freq,smooth=smooth,linewidth=linewidth*2)
|
994
|
+
data_label=False,resample_freq=resample_freq,smooth=smooth,linewidth=linewidth*2,facecolor=facecolor)
|
995
995
|
|
996
996
|
if printout:
|
997
997
|
if len(dft3)!=0:
|
@@ -1046,7 +1046,7 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1046
1046
|
df3.rename(columns={'Close':text_lang('收盘价','Close')},inplace=True)
|
1047
1047
|
title_txt=text_lang("证券价格走势分析:","Security Trend: ")+ticker_name(ticker,ticker_type)+text_lang(",指数移动平均线","Exponential MA Line")
|
1048
1048
|
draw_lines(df3,y_label,x_label,axhline_value,axhline_label,title_txt, \
|
1049
|
-
data_label=False,resample_freq=resample_freq,smooth=smooth,linewidth=linewidth*2)
|
1049
|
+
data_label=False,resample_freq=resample_freq,smooth=smooth,linewidth=linewidth*2,facecolor=facecolor)
|
1050
1050
|
|
1051
1051
|
if printout:
|
1052
1052
|
if len(dft3)!=0:
|
@@ -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"
|
@@ -1120,7 +1122,8 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1120
1122
|
# 设置绘图区的背景颜色为黑色
|
1121
1123
|
fig=plt.figure()
|
1122
1124
|
ax=fig.add_subplot(111)
|
1123
|
-
ax.patch.set_facecolor('black')
|
1125
|
+
#ax.patch.set_facecolor('black')
|
1126
|
+
ax.patch.set_facecolor(color=facecolor)
|
1124
1127
|
|
1125
1128
|
# 绘制曲线
|
1126
1129
|
ax.plot(df4['快线DIF'],label=text_lang('快线DIF','DIF(Fast line)'),linewidth=linewidth*2,color='white')
|
@@ -1241,7 +1244,7 @@ def security_RSI(ticker,start='default',end='default', \
|
|
1241
1244
|
resample_freq='6H',smooth=True,linewidth=1.5, \
|
1242
1245
|
loc1='lower left',loc2='lower right', \
|
1243
1246
|
graph=['ALL'],printout=True,ticker_type='auto',source='auto', \
|
1244
|
-
price_line_color='red'):
|
1247
|
+
price_line_color='red',facecolor='k'):
|
1245
1248
|
"""
|
1246
1249
|
套壳函数,除了股票,还可用于交易所债券和交易所基金(如ETF和REITS)
|
1247
1250
|
"""
|
@@ -1250,7 +1253,7 @@ def security_RSI(ticker,start='default',end='default', \
|
|
1250
1253
|
resample_freq=resample_freq,smooth=smooth,linewidth=linewidth, \
|
1251
1254
|
loc1=loc1,loc2=loc2, \
|
1252
1255
|
graph=graph,printout=printout,ticker_type=ticker_type,source=source, \
|
1253
|
-
price_line_color=price_line_color)
|
1256
|
+
price_line_color=price_line_color,facecolor=facecolor)
|
1254
1257
|
return df
|
1255
1258
|
|
1256
1259
|
|
@@ -1259,7 +1262,7 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1259
1262
|
resample_freq='H',smooth=True,linewidth=1.5, \
|
1260
1263
|
loc1='lower left',loc2='lower right', \
|
1261
1264
|
graph=['ALL'],printout=True,ticker_type='auto',source='auto', \
|
1262
|
-
price_line_color='red'):
|
1265
|
+
price_line_color='red',facecolor='k'):
|
1263
1266
|
"""
|
1264
1267
|
功能:计算股票的技术分析指标RSI
|
1265
1268
|
输入:df,四种股价Open/Close/High/Low,成交量Volume
|
@@ -1368,7 +1371,7 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1368
1371
|
# 设置绘图区的背景颜色为黑色
|
1369
1372
|
fig=plt.figure()
|
1370
1373
|
ax=fig.add_subplot(111)
|
1371
|
-
ax.patch.set_facecolor(
|
1374
|
+
ax.patch.set_facecolor(color=facecolor)
|
1372
1375
|
|
1373
1376
|
# 绘制曲线
|
1374
1377
|
if ('RSI1' in graph) or ('ALL' in graph):
|
@@ -1379,7 +1382,8 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1379
1382
|
ax.plot(df4['RSI3'],label=text_lang('慢速(月)线RSI3','RSI3(1 month, Slow line)'),linewidth=linewidth*2,color='white')
|
1380
1383
|
|
1381
1384
|
# 绘制水平辅助线
|
1382
|
-
hl_linestyle_list=['dashed','-.','dotted']
|
1385
|
+
#hl_linestyle_list=['dashed','-.','dotted']
|
1386
|
+
hl_linestyle_list=['dotted','dotted','dotted','dotted','dotted','dotted']
|
1383
1387
|
#plt.axhline(y=0,label='指标零线',color='cyan',linestyle=':',linewidth=linewidth*2)
|
1384
1388
|
for hl in RSI_lines:
|
1385
1389
|
pos=RSI_lines.index(hl)
|
@@ -1489,7 +1493,7 @@ def security_KDJ(ticker,start='default',end='default', \
|
|
1489
1493
|
resample_freq='6H',smooth=True,linewidth=1.5, \
|
1490
1494
|
loc1='lower left',loc2='lower right', \
|
1491
1495
|
graph=['ALL'],printout=True,ticker_type='auto',source='auto', \
|
1492
|
-
price_line_color='red'):
|
1496
|
+
price_line_color='red',facecolor='k'):
|
1493
1497
|
"""
|
1494
1498
|
套壳函数
|
1495
1499
|
"""
|
@@ -1498,7 +1502,7 @@ def security_KDJ(ticker,start='default',end='default', \
|
|
1498
1502
|
resample_freq=resample_freq,smooth=smooth,linewidth=linewidth, \
|
1499
1503
|
loc1=loc1,loc2=loc2, \
|
1500
1504
|
graph=graph,printout=printout,ticker_type=ticker_type,source=source, \
|
1501
|
-
price_line_color=price_line_color)
|
1505
|
+
price_line_color=price_line_color,facecolor=facecolor)
|
1502
1506
|
return df
|
1503
1507
|
|
1504
1508
|
|
@@ -1507,7 +1511,7 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1507
1511
|
resample_freq='H',smooth=True,linewidth=1.5, \
|
1508
1512
|
loc1='lower left',loc2='lower right', \
|
1509
1513
|
graph=['ALL'],printout=True,ticker_type='auto',source='auto', \
|
1510
|
-
price_line_color='red'):
|
1514
|
+
price_line_color='red',facecolor='k'):
|
1511
1515
|
"""
|
1512
1516
|
功能:计算股票的技术分析指标KDJ
|
1513
1517
|
输入:df,四种股价Open/Close/High/Low,成交量Volume
|
@@ -1637,7 +1641,7 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1637
1641
|
# 设置绘图区的背景颜色为黑色
|
1638
1642
|
fig=plt.figure()
|
1639
1643
|
ax=fig.add_subplot(111)
|
1640
|
-
ax.patch.set_facecolor(
|
1644
|
+
ax.patch.set_facecolor(color=facecolor)
|
1641
1645
|
|
1642
1646
|
# 绘制曲线
|
1643
1647
|
if ('K' in graph) or ('ALL' in graph):
|
@@ -1658,8 +1662,13 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1658
1662
|
minJ=df4['J'].min()
|
1659
1663
|
minKDJ=min(minK,minD,minJ)
|
1660
1664
|
|
1665
|
+
"""
|
1661
1666
|
hl_linestyle_list=['dashed','dashed','-.','dotted','dotted']
|
1662
1667
|
hl_color_list=['red','red','white','cyan','cyan']
|
1668
|
+
"""
|
1669
|
+
hl_linestyle_list=['dotted','dotted','dotted','dotted','dotted']
|
1670
|
+
hl_color_list=['cyan','cyan','cyan','cyan','cyan']
|
1671
|
+
|
1663
1672
|
#plt.axhline(y=0,label='指标零线',color='cyan',linestyle=':',linewidth=linewidth*2)
|
1664
1673
|
for hl in KDJ_lines:
|
1665
1674
|
draw=True
|
@@ -2159,20 +2168,20 @@ if __name__ =="__main__":
|
|
2159
2168
|
def security_Bollinger(ticker,start='default',end='default',boll_days=20, \
|
2160
2169
|
graph=True,smooth=True,loc='best', \
|
2161
2170
|
date_range=False,date_freq=False,annotate=False, \
|
2162
|
-
ticker_type='auto',source='auto'):
|
2171
|
+
ticker_type='auto',source='auto',facecolor='white'):
|
2163
2172
|
"""
|
2164
2173
|
套壳函数,为了与security_MACD/RSI/KDJ保持相似
|
2165
2174
|
"""
|
2166
2175
|
df=stock_Bollinger(ticker=ticker,start=start,end=end,boll_days=boll_days, \
|
2167
2176
|
graph=graph,smooth=smooth,loc=loc, \
|
2168
2177
|
date_range=date_range,date_freq=date_freq, \
|
2169
|
-
annotate=annotate,ticker_type=ticker_type,source=source)
|
2178
|
+
annotate=annotate,ticker_type=ticker_type,source=source,facecolor=facecolor)
|
2170
2179
|
return df
|
2171
2180
|
|
2172
2181
|
def stock_Bollinger(ticker,start='default',end='default',boll_days=20, \
|
2173
2182
|
graph=True,smooth=True,loc='best', \
|
2174
2183
|
date_range=False,date_freq=False,annotate=False, \
|
2175
|
-
mark_end=True,ticker_type='auto',source='auto'):
|
2184
|
+
mark_end=True,ticker_type='auto',source='auto',facecolor='white'):
|
2176
2185
|
"""
|
2177
2186
|
套壳函数,为了与stock_MACD/RSI/KDJ保持相似
|
2178
2187
|
"""
|
@@ -2200,14 +2209,14 @@ def stock_Bollinger(ticker,start='default',end='default',boll_days=20, \
|
|
2200
2209
|
df=security_bollinger(ticker=ticker,fromdate=start,todate=end,boll_days=boll_days, \
|
2201
2210
|
graph=graph,smooth=smooth,loc=loc, \
|
2202
2211
|
date_range=date_range,date_freq=date_freq,annotate=annotate, \
|
2203
|
-
mark_end=mark_end,ticker_type=ticker_type,source=source)
|
2212
|
+
mark_end=mark_end,ticker_type=ticker_type,source=source,facecolor=facecolor)
|
2204
2213
|
return df
|
2205
2214
|
|
2206
2215
|
|
2207
2216
|
def security_bollinger(ticker,fromdate,todate,boll_days=20, \
|
2208
2217
|
graph=True,smooth=True,loc='best', \
|
2209
2218
|
date_range=False,date_freq=False,annotate=False, \
|
2210
|
-
mark_end=True,ticker_type='auto',source='auto'):
|
2219
|
+
mark_end=True,ticker_type='auto',source='auto',facecolor='white'):
|
2211
2220
|
"""
|
2212
2221
|
功能:单个证券,绘制布林带
|
2213
2222
|
date_range=False:指定开始结束日期绘图
|
@@ -2267,7 +2276,8 @@ def security_bollinger(ticker,fromdate,todate,boll_days=20, \
|
|
2267
2276
|
data_label=False,resample_freq='6H',smooth=smooth, \
|
2268
2277
|
date_range=date_range,date_freq=date_freq,date_fmt='%Y-%m-%d', \
|
2269
2278
|
colorlist=colorlist,lslist=lslist,lwlist=lwlist, \
|
2270
|
-
band_area=[text_lang('上(压力)线','Upper Line'),text_lang('下(支撑)线','Lower Line')],
|
2279
|
+
band_area=[text_lang('上(压力)线','Upper Line'),text_lang('下(支撑)线','Lower Line')], \
|
2280
|
+
mark_end=mark_end,loc=loc,facecolor=facecolor)
|
2271
2281
|
|
2272
2282
|
return df1
|
2273
2283
|
|
@@ -2291,7 +2301,7 @@ def security_Bubble(ticker,start='default',end='default',boll_years=7, \
|
|
2291
2301
|
indicator='MV', \
|
2292
2302
|
graph=True,smooth=True,loc='best', \
|
2293
2303
|
date_range=False,date_freq=False,annotate=False, \
|
2294
|
-
mark_end=True):
|
2304
|
+
mark_end=True,facecolor='whitesmoke'):
|
2295
2305
|
"""
|
2296
2306
|
套壳函数,为了与security_MACD/RSI/KDJ保持相似
|
2297
2307
|
"""
|
@@ -2320,7 +2330,7 @@ def security_Bubble(ticker,start='default',end='default',boll_years=7, \
|
|
2320
2330
|
indicator=indicator, \
|
2321
2331
|
graph=graph,smooth=smooth,loc=loc, \
|
2322
2332
|
date_range=date_range,date_freq=date_freq,annotate=annotate, \
|
2323
|
-
mark_end=mark_end)
|
2333
|
+
mark_end=mark_end,facecolor=facecolor)
|
2324
2334
|
return df
|
2325
2335
|
|
2326
2336
|
if __name__ =="__main__":
|
@@ -2335,7 +2345,7 @@ def security_bubble(ticker,fromdate,todate,boll_years=7, \
|
|
2335
2345
|
indicator='MV', \
|
2336
2346
|
graph=True,smooth=True,loc='best', \
|
2337
2347
|
date_range=False,date_freq=False,annotate=False, \
|
2338
|
-
mark_end=True):
|
2348
|
+
mark_end=True,facecolor='whitesmoke'):
|
2339
2349
|
"""
|
2340
2350
|
功能:单个证券,绘制估值布林带(MV, PE, PB)
|
2341
2351
|
date_range=False:指定开始结束日期绘图
|
@@ -2444,7 +2454,7 @@ def security_bubble(ticker,fromdate,todate,boll_years=7, \
|
|
2444
2454
|
date_range=date_range,date_freq=date_freq,date_fmt='%Y-%m-%d', \
|
2445
2455
|
colorlist=colorlist,lslist=lslist,lwlist=lwlist, \
|
2446
2456
|
band_area=['上(压力)线','下(支撑)线'],loc=loc, \
|
2447
|
-
mark_end=mark_end)
|
2457
|
+
mark_end=mark_end,facecolor=facecolor)
|
2448
2458
|
|
2449
2459
|
return df1
|
2450
2460
|
|
@@ -2478,7 +2488,8 @@ def security_technical(ticker,start='default',end='default', \
|
|
2478
2488
|
date_range=False,date_freq=False,annotate=False, \
|
2479
2489
|
technical=['MACD'],indicator='Close', \
|
2480
2490
|
ticker_type='auto',source='auto', \
|
2481
|
-
price_line_color='red'
|
2491
|
+
price_line_color='red', \
|
2492
|
+
facecolor='k'):
|
2482
2493
|
|
2483
2494
|
"""
|
2484
2495
|
功能:技术分析中的MACD/RSI/KDJ/布林带,支持教学演示,支持参数调节。
|
@@ -2538,7 +2549,7 @@ def security_technical(ticker,start='default',end='default', \
|
|
2538
2549
|
resample_freq=resample_freq,smooth=smooth,linewidth=linewidth, \
|
2539
2550
|
loc1=loc1,loc2=loc2, \
|
2540
2551
|
graph=graph1,printout=printout,ticker_type=ticker_type,source=source, \
|
2541
|
-
price_line_color=price_line_color)
|
2552
|
+
price_line_color=price_line_color,facecolor=facecolor)
|
2542
2553
|
|
2543
2554
|
if 'RSI' in technical1:
|
2544
2555
|
df=security_RSI(ticker=ticker,start=fromdate,end=todate, \
|
@@ -2546,7 +2557,7 @@ def security_technical(ticker,start='default',end='default', \
|
|
2546
2557
|
resample_freq=resample_freq,smooth=smooth,linewidth=linewidth, \
|
2547
2558
|
loc1=loc1,loc2=loc2, \
|
2548
2559
|
graph=graph1,printout=printout,ticker_type=ticker_type,source=source, \
|
2549
|
-
price_line_color=price_line_color)
|
2560
|
+
price_line_color=price_line_color,facecolor=facecolor)
|
2550
2561
|
|
2551
2562
|
if 'KDJ' in technical1:
|
2552
2563
|
df=security_KDJ(ticker=ticker,start=fromdate,end=todate, \
|
@@ -2554,13 +2565,13 @@ def security_technical(ticker,start='default',end='default', \
|
|
2554
2565
|
resample_freq=resample_freq,smooth=smooth,linewidth=linewidth, \
|
2555
2566
|
loc1=loc1,loc2=loc2, \
|
2556
2567
|
graph=graph1,printout=printout,ticker_type=ticker_type,source=source, \
|
2557
|
-
price_line_color=price_line_color)
|
2568
|
+
price_line_color=price_line_color,facecolor=facecolor)
|
2558
2569
|
|
2559
2570
|
if 'Bollinger' in technical1 and 'Close' in indicator1:
|
2560
2571
|
df=security_Bollinger(ticker=ticker,start=fromdate,end=todate,boll_days=boll_days, \
|
2561
2572
|
graph=True,smooth=smooth,loc=loc1, \
|
2562
2573
|
date_range=date_range,date_freq=date_freq,annotate=annotate, \
|
2563
|
-
ticker_type=ticker_type,source=source)
|
2574
|
+
ticker_type=ticker_type,source=source,facecolor=facecolor)
|
2564
2575
|
|
2565
2576
|
"""
|
2566
2577
|
if 'Bollinger' in technical1 and 'MV' in indicator1:
|
@@ -2596,7 +2607,7 @@ def security_technical(ticker,start='default',end='default', \
|
|
2596
2607
|
df=security_Bubble(ticker=ticker,start=fromdate,end=todate,boll_years=boll_years, \
|
2597
2608
|
indicator=val, \
|
2598
2609
|
graph=True,smooth=smooth,loc=loc1, \
|
2599
|
-
date_range=date_range,date_freq=date_freq,annotate=annotate)
|
2610
|
+
date_range=date_range,date_freq=date_freq,annotate=annotate,facecolor=facecolor)
|
2600
2611
|
|
2601
2612
|
return df
|
2602
2613
|
|
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
|
@@ -98,14 +98,14 @@ siat/sector_china.py,sha256=nP6kfYsnaQWZj8dK-zklwSDW8FDS-obZWp_zL0ec2Ig,118603
|
|
98
98
|
siat/sector_china_test.py,sha256=1wq7ef8Bb_L8F0h0W6FvyBrIcBTEbrTV7hljtpj49U4,5843
|
99
99
|
siat/security_price.py,sha256=2oHskgiw41KMGfqtnA0i2YjNNV6cYgtlUK0j3YeuXWs,29185
|
100
100
|
siat/security_price2.py,sha256=4xvc9AzRhLKJMu6AxVzIqcn1-NrHoeCF2Ao2p9nwYjU,25978
|
101
|
-
siat/security_prices.py,sha256=
|
101
|
+
siat/security_prices.py,sha256=LqTrS20mTmM_ACENOXU5qrLmxczGtxnuziAdAynSG_Q,105871
|
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
|