siat 3.2.37__py3-none-any.whl → 3.2.45__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 +99 -0
- siat/grafix.py +27 -7
- siat/luchy_draw.py +5 -2
- siat/market_china.py +103 -40
- siat/security_trend2.py +1 -1
- siat/stock.py +36 -32
- siat/stock_technical.py +52 -52
- siat/translate.py +7 -2
- {siat-3.2.37.dist-info → siat-3.2.45.dist-info}/METADATA +2 -1
- {siat-3.2.37.dist-info → siat-3.2.45.dist-info}/RECORD +12 -12
- {siat-3.2.37.dist-info → siat-3.2.45.dist-info}/WHEEL +0 -0
- {siat-3.2.37.dist-info → siat-3.2.45.dist-info}/top_level.txt +0 -0
siat/common.py
CHANGED
@@ -3989,6 +3989,105 @@ def show_df(data,search_mode=False):
|
|
3989
3989
|
}})
|
3990
3990
|
|
3991
3991
|
return
|
3992
|
+
|
3993
|
+
#==============================================================================
|
3994
|
+
if __name__ == '__main__':
|
3995
|
+
text="MRQ个股流通市值均值"
|
3996
|
+
text=["开盘价","收盘价"]
|
3997
|
+
to_language='en'
|
3998
|
+
list_sep='!'
|
3999
|
+
printout=False
|
4000
|
+
|
4001
|
+
translate_text_google(text=["开盘价","收盘价"])
|
4002
|
+
translate_text_google(text="证券趋势对比")
|
4003
|
+
translate_text_google(text="市盈率")
|
4004
|
+
translate_text_google(text="MRQ个股流通市值均值")
|
4005
|
+
|
4006
|
+
def translate_text_google(text,to_language='en',list_sep='!',printout=False):
|
4007
|
+
"""
|
4008
|
+
功能:联网翻译,最终都是使用谷歌翻译
|
4009
|
+
"""
|
4010
|
+
from py_trans import PyTranslator
|
4011
|
+
#需要谷歌翻译联网
|
4012
|
+
try:
|
4013
|
+
tr = PyTranslator()
|
4014
|
+
except:
|
4015
|
+
if printout:
|
4016
|
+
print(" #Warning(translate_text_google): translation failed as of no internet connection to Google")
|
4017
|
+
return text
|
4018
|
+
|
4019
|
+
#检测语言
|
4020
|
+
#lang=tr.detect(text)
|
4021
|
+
|
4022
|
+
#处理列表
|
4023
|
+
text1=text
|
4024
|
+
list_type=False
|
4025
|
+
if isinstance(text,list):
|
4026
|
+
list_type=True
|
4027
|
+
text1=list_sep.join(text)
|
4028
|
+
|
4029
|
+
success=False
|
4030
|
+
#Translate text using Google
|
4031
|
+
tresult=tr.google(text1,to_language)
|
4032
|
+
if tresult['status']=='success':
|
4033
|
+
success=True
|
4034
|
+
|
4035
|
+
#Translate text using My Memory
|
4036
|
+
if not success:
|
4037
|
+
tresult=tr.my_memory(text1,to_language)
|
4038
|
+
if tresult['status']=='success':
|
4039
|
+
success=True
|
4040
|
+
|
4041
|
+
#Translate text using My Memory
|
4042
|
+
if not success:
|
4043
|
+
tresult=tr.translate_dict(text1,to_language)
|
4044
|
+
if tresult['status']=='success':
|
4045
|
+
success=True
|
4046
|
+
|
4047
|
+
#Translate text using Translate.com
|
4048
|
+
if not success:
|
4049
|
+
tresult=tr.translate_com(text1,to_language)
|
4050
|
+
if tresult['status']=='success':
|
4051
|
+
success=True
|
4052
|
+
|
4053
|
+
if success:
|
4054
|
+
to_text=tresult['translation']
|
4055
|
+
else:
|
4056
|
+
to_text=text
|
4057
|
+
|
4058
|
+
#处理列表
|
4059
|
+
if list_type:
|
4060
|
+
to_text=to_text.split(list_sep)
|
4061
|
+
|
4062
|
+
to_text2=[]
|
4063
|
+
for t in to_text:
|
4064
|
+
tt=firstLetterUpper(t.strip())
|
4065
|
+
to_text2=to_text2 + [tt]
|
4066
|
+
|
4067
|
+
return to_text2
|
4068
|
+
else:
|
4069
|
+
return firstLetterUpper(to_text)
|
4070
|
+
|
4071
|
+
|
4072
|
+
#==============================================================================
|
4073
|
+
if __name__ == '__main__':
|
4074
|
+
text="MRQ close price"
|
4075
|
+
|
4076
|
+
def firstLetterUpper(text):
|
4077
|
+
"""
|
4078
|
+
功能:把英文一句话中每个单词的第一个字母大写,但不改变其余字母的大小写
|
4079
|
+
"""
|
4080
|
+
text_list=text.split(' ')
|
4081
|
+
utext_list=[]
|
4082
|
+
for t in text_list:
|
4083
|
+
tt=t[0].upper() + t[1:]
|
4084
|
+
utext_list=utext_list + [tt]
|
4085
|
+
|
4086
|
+
utext=' '.join(utext_list)
|
4087
|
+
|
4088
|
+
return utext
|
4089
|
+
|
4090
|
+
#==============================================================================
|
3992
4091
|
|
3993
4092
|
#==============================================================================
|
3994
4093
|
#==============================================================================
|
siat/grafix.py
CHANGED
@@ -22,6 +22,7 @@ import pandas as pd
|
|
22
22
|
#==============================================================================
|
23
23
|
import matplotlib.pyplot as plt
|
24
24
|
import matplotlib.dates as mdate
|
25
|
+
#import matplotlib.font_manager as fm
|
25
26
|
#==============================================================================
|
26
27
|
#统一设定绘制的图片大小:数值为英寸,1英寸=100像素
|
27
28
|
plt.rcParams['figure.figsize']=(12.8,7.2)
|
@@ -34,13 +35,19 @@ plt.rcParams['figure.facecolor']='whitesmoke' #背景颜色
|
|
34
35
|
#plt.rcParams['axes.facecolor']='whitesmoke' #背景颜色
|
35
36
|
#plt.figure(facecolor='whitesmoke')
|
36
37
|
|
37
|
-
|
38
38
|
title_txt_size=16
|
39
39
|
ylabel_txt_size=12
|
40
40
|
xlabel_txt_size=12
|
41
41
|
legend_txt_size=12
|
42
42
|
annotate_size=11
|
43
43
|
|
44
|
+
if check_language() == "English":
|
45
|
+
title_txt_size=20
|
46
|
+
ylabel_txt_size=16
|
47
|
+
xlabel_txt_size=16
|
48
|
+
legend_txt_size=16
|
49
|
+
annotate_size=13
|
50
|
+
|
44
51
|
#设置绘图风格:网格虚线
|
45
52
|
plt.rcParams['axes.grid']=False
|
46
53
|
#plt.rcParams['grid.color']='steelblue'
|
@@ -59,9 +66,19 @@ plt.rcParams['ytick.direction'] = 'in' # 将y轴的刻度方向设置向内内
|
|
59
66
|
#处理绘图汉字乱码问题
|
60
67
|
import sys; czxt=sys.platform
|
61
68
|
if czxt in ['win32','win64']:
|
69
|
+
#设置中文字体
|
70
|
+
"""
|
62
71
|
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体
|
63
72
|
mpfrc={'font.family': 'SimHei'}
|
64
|
-
|
73
|
+
"""
|
74
|
+
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体
|
75
|
+
mpfrc={'font.family': 'SimHei'}
|
76
|
+
|
77
|
+
if check_language() == "English":
|
78
|
+
#设置英文字体
|
79
|
+
plt.rcParams['font.sans-serif'] = ['Times New Roman'] # 设置默认字体
|
80
|
+
mpfrc={'font.family': 'Times New Roman'}
|
81
|
+
|
65
82
|
if czxt in ['darwin']: #MacOSX
|
66
83
|
plt.rcParams['font.family']= ['Heiti TC']
|
67
84
|
mpfrc={'font.family': 'Heiti TC'}
|
@@ -128,6 +145,7 @@ def plot_line(df0,colname,collabel,ylabeltxt,titletxt,footnote,datatag=False, \
|
|
128
145
|
df=df0
|
129
146
|
#else: df=df0
|
130
147
|
|
148
|
+
print('')
|
131
149
|
#先绘制折线图
|
132
150
|
date_start=df.index[0]
|
133
151
|
date_end=df.index[-1]
|
@@ -232,18 +250,18 @@ def plot_line(df0,colname,collabel,ylabeltxt,titletxt,footnote,datatag=False, \
|
|
232
250
|
else:
|
233
251
|
if isinstance(zeroline,float) or isinstance(zeroline,int):
|
234
252
|
hline=zeroline
|
235
|
-
plt.axhline(y=hline,ls=":",c="darkorange",linewidth=3,label="关注值")
|
253
|
+
plt.axhline(y=hline,ls=":",c="darkorange",linewidth=3,label=text_lang("关注值","Attention"))
|
236
254
|
haveLegend=True
|
237
|
-
footnote=footnote + ",关注值"+str(hline)
|
255
|
+
footnote=footnote + text_lang(",关注值",", Attention ")+str(hline)
|
238
256
|
|
239
257
|
if average_value:
|
240
258
|
av=df[colname].mean()
|
241
|
-
plt.axhline(y=av,ls="dashed",c="blueviolet",linewidth=2,label="均值")
|
259
|
+
plt.axhline(y=av,ls="dashed",c="blueviolet",linewidth=2,label=text_lang("均值","Mean"))
|
242
260
|
haveLegend=True
|
243
261
|
#av=str(round(av,2)) if av < 100 else str(int(av))
|
244
262
|
av=str(int(av)) if abs(av) >= 100 else str(round(av,2)) if abs(av) >= 10 else str(round(av,3))
|
245
263
|
#footnote=footnote + ",均值"+av
|
246
|
-
footnote="注:期间均值"+av+"
|
264
|
+
footnote=text_lang("注:期间均值","Note: Periodic mean ")+av+"; "+footnote
|
247
265
|
|
248
266
|
#绘制趋势线
|
249
267
|
#print("--Debug(plot_line): power=",power)
|
@@ -1160,6 +1178,7 @@ def draw_lines(df0,y_label,x_label,axhline_value,axhline_label,title_txt, \
|
|
1160
1178
|
firstline=True
|
1161
1179
|
|
1162
1180
|
#绘制折线图
|
1181
|
+
print('')
|
1163
1182
|
y_end_list=[]
|
1164
1183
|
for c in collist:
|
1165
1184
|
pos=collist.index(c)
|
@@ -1394,7 +1413,8 @@ def draw_lines2(df0,y_label,x_label,axhline_value,axhline_label,title_txt, \
|
|
1394
1413
|
lslist=['-','--','-.',':','-','--','-.',':','-','--','-.',':','-','--','-.',':',]
|
1395
1414
|
if colorlist==[]:
|
1396
1415
|
colorlist=['blue','tomato','green','chocolate','darksage','cyan','blueviolet','violet','darkcyan','gold','wheat','silver','darkred','brown','coral','pink',]
|
1397
|
-
|
1416
|
+
|
1417
|
+
print('')
|
1398
1418
|
#绘制折线图
|
1399
1419
|
for c in collist:
|
1400
1420
|
pos=collist.index(c)
|
siat/luchy_draw.py
CHANGED
@@ -546,7 +546,8 @@ def lucky_draw(draw_limit=2,absent_limit=2,column='Name',pickle_path="student_li
|
|
546
546
|
found=False
|
547
547
|
todaydt = str(datetime.date.today())
|
548
548
|
prompt="*** Is the lucky person here on site?"
|
549
|
-
prompt2="***
|
549
|
+
prompt2="*** Does the lucky person expect to pass?"
|
550
|
+
prompt3="*** Continue luck draw?"
|
550
551
|
|
551
552
|
while True:
|
552
553
|
while True:
|
@@ -604,7 +605,9 @@ def lucky_draw(draw_limit=2,absent_limit=2,column='Name',pickle_path="student_li
|
|
604
605
|
|
605
606
|
if onsite and not onpass:
|
606
607
|
#到场且不pass,结束本轮抽签
|
607
|
-
|
608
|
+
proceed=read_yes_no(prompt3)
|
609
|
+
if not proceed:
|
610
|
+
break
|
608
611
|
else:
|
609
612
|
#未到场或pass,继续抽签
|
610
613
|
continue
|
siat/market_china.py
CHANGED
@@ -907,6 +907,8 @@ def market_detail_china2table(df,titletxt,firstColSpecial=True,leftColAlign='l',
|
|
907
907
|
#==============================================================================
|
908
908
|
if __name__=='__main__':
|
909
909
|
category='price'
|
910
|
+
category='volume'
|
911
|
+
category='return'
|
910
912
|
category='valuation'
|
911
913
|
|
912
914
|
facecolor='papayawhip'
|
@@ -975,25 +977,40 @@ def market_detail_china2(category='price',
|
|
975
977
|
|
976
978
|
# 前置空格个数
|
977
979
|
heading=' '*1
|
980
|
+
df.rename(columns={'项目':'Item','上海证券交易所':'Shanghai SE','深圳证券交易所':'Shenzhen SE','北京证券交易所':'Beijing SE'},inplace=True)
|
978
981
|
|
979
982
|
if category1=='PRICE':
|
980
|
-
titletxt="中国三大股票交易所横向对比:股价与涨跌"
|
983
|
+
titletxt=text_lang("中国三大股票交易所横向对比:股价与涨跌","China Stock Exchanges: Differences in Price")
|
981
984
|
|
982
|
-
ft0=heading+"信息来源:东方财富,统计时间:"+nowstr+"\n"
|
983
|
-
ft1=heading+"注释:\n"
|
984
|
-
ft2=heading+"☆可交易股票数量:将随着股票停复牌情况变化\n"
|
985
|
-
ft3=heading+"☆昨日指的是上一个交易日\n"
|
986
|
-
ft4=heading+"☆涨速:平均每分钟股价变化率,表示股价变化速度\n"
|
987
|
-
ft5=heading+"☆5分钟涨跌:最新5分钟内股价的涨跌幅度\n"
|
988
|
-
ft6=heading+"☆振幅:最高最低价差绝对值/昨收,表示股价变化活跃程度\n"
|
989
|
-
ft7=heading+"☆涨跌幅:(最新价-昨收)/昨收,表示相对昨日的变化程度\n"
|
990
|
-
ft8=heading+"☆涨跌额:最新价-昨收,表示相对昨日的变化金额\n"
|
985
|
+
ft0=heading+text_lang("信息来源:东方财富,统计时间:","Data source: EM, updated ")+nowstr+"\n"
|
986
|
+
ft1=heading+text_lang("注释:\n","Notes:\n")
|
987
|
+
ft2=heading+text_lang("☆可交易股票数量:将随着股票停复牌情况变化\n","*Tradeable stocks: vary with suspension/resumption\n")
|
988
|
+
ft3=heading+text_lang("☆昨日指的是上一个交易日\n","*Prev: refers to previous trading day\n")
|
989
|
+
ft4=heading+text_lang("☆涨速:平均每分钟股价变化率,表示股价变化速度\n","*Changing speed(涨速): rate of changes per minute\n")
|
990
|
+
ft5=heading+text_lang("☆5分钟涨跌:最新5分钟内股价的涨跌幅度\n","*5 min up-down(5分钟涨跌): changes recent 5 minutes\n")
|
991
|
+
ft6=heading+text_lang("☆振幅:最高最低价差绝对值/昨收,表示股价变化活跃程度\n","*Amplitude(振幅): (High - Low)/Prev Close\n")
|
992
|
+
ft7=heading+text_lang("☆涨跌幅:(最新价-昨收)/昨收,表示相对昨日的变化程度\n","*Change%(涨跌幅): (Current Price/Prev Close - 1\n")
|
993
|
+
ft8=heading+text_lang("☆涨跌额:最新价-昨收,表示相对昨日的变化金额\n","*Change(涨跌额): Current Price - Prev Close\n")
|
991
994
|
|
992
|
-
ft9=heading+"☆使用实时数据,不同日期/每天不同时刻统计的结果可能不同\n"
|
993
|
-
ft10=heading+"☆若在非交易日或开市前后短期内统计,数据可能出现空缺\n"
|
995
|
+
ft9=heading+text_lang("☆使用实时数据,不同日期/每天不同时刻统计的结果可能不同\n","*Based on real-time data, vary with time\n")
|
996
|
+
ft10=heading+text_lang("☆若在非交易日或开市前后短期内统计,数据可能出现空缺\n","*Missing data may happen around non-trading time\n")
|
994
997
|
|
995
998
|
footnote=ft0+ft1+ft2+ft3+ft4+ft5+ft6+ft7+ft8+ft9+ft10
|
996
999
|
|
1000
|
+
itme_list=['Tradeable stocks',
|
1001
|
+
'Stock Price Level',
|
1002
|
+
'.....Prev close mean',
|
1003
|
+
'.....Today open mean',
|
1004
|
+
'.....Current price mean',
|
1005
|
+
'Stock Price Up-down',
|
1006
|
+
'.....Current change%',
|
1007
|
+
'.....Last 5 min change%',
|
1008
|
+
'Today vs. Prev',
|
1009
|
+
'.....Amplitude%',
|
1010
|
+
'.....Change% mean',
|
1011
|
+
'.....Change mean(RMB)']
|
1012
|
+
df['Item']=itme_list
|
1013
|
+
|
997
1014
|
df_display_CSS(df,titletxt=titletxt,footnote=footnote,facecolor=facecolor, \
|
998
1015
|
first_col_align='left',second_col_align='right', \
|
999
1016
|
last_col_align='right',other_col_align='right', \
|
@@ -1003,21 +1020,30 @@ def market_detail_china2(category='price',
|
|
1003
1020
|
|
1004
1021
|
|
1005
1022
|
if category1=='VOLUME':
|
1006
|
-
titletxt="中国三大股票交易所横向对比:成交状况"
|
1007
|
-
|
1008
|
-
ft0=heading+"信息来源:东方财富,统计时间:"+nowstr+"\n"
|
1009
|
-
ft1=heading+"注:\n"
|
1010
|
-
ft2=heading+"☆可交易股票数量:将随着股票停复牌情况变化\n"
|
1011
|
-
ft3=heading+"☆成交量:当前成交股数,表示交易活跃度\n"
|
1012
|
-
ft4=heading+"☆成交额:当前开市后的累计成交金额\n"
|
1013
|
-
ft5=heading+"☆换手率:成交量/流通股数,表示成交量占比\n"
|
1014
|
-
ft6=heading+"☆量比:当前每分钟成交量/过去5个交易日均值,表示成交量变化\n"
|
1023
|
+
titletxt=text_lang("中国三大股票交易所横向对比:成交状况","China Stock Exchanges: Differences in Volume")
|
1024
|
+
|
1025
|
+
ft0=heading+text_lang("信息来源:东方财富,统计时间:","Data source: EM, updated ")+nowstr+"\n"
|
1026
|
+
ft1=heading+text_lang("注:\n","Notes:\n")
|
1027
|
+
ft2=heading+text_lang("☆可交易股票数量:将随着股票停复牌情况变化\n","*Tradeable stocks: vary with suspension/resumption\n")
|
1028
|
+
ft3=heading+text_lang("☆成交量:当前成交股数,表示交易活跃度\n","*Volume(成交量): traded number of shares since open today\n")
|
1029
|
+
ft4=heading+text_lang("☆成交额:当前开市后的累计成交金额\n","*Amount(成交额): traded dollar amount since open today\n")
|
1030
|
+
ft5=heading+text_lang("☆换手率:成交量/流通股数,表示成交量占比\n","*Turnover rate(换手率): volume/outstanding shares\n")
|
1031
|
+
ft6=heading+text_lang("☆量比:当前每分钟成交量/过去5个交易日均值,表示成交量变化\n","*Volume ratio(量比): current turnover per min/prev 5 mean\n")
|
1015
1032
|
|
1016
|
-
ft9=heading+"☆使用实时数据,不同日期/每天不同时刻统计的结果可能不同\n"
|
1017
|
-
ft10=heading+"☆若在非开市时间或开市前后短期内统计,数据可能出现空缺\n"
|
1033
|
+
ft9=heading+text_lang("☆使用实时数据,不同日期/每天不同时刻统计的结果可能不同\n","*Based on real-time data, vary with time\n")
|
1034
|
+
ft10=heading+text_lang("☆若在非开市时间或开市前后短期内统计,数据可能出现空缺\n","*Missing data may happen around non-trading time\n")
|
1018
1035
|
|
1019
1036
|
footnote=ft0+ft1+ft2+ft3+ft4+ft5+ft6 + ft9+ft10
|
1020
1037
|
|
1038
|
+
itme_list=['Tradeable stocks',
|
1039
|
+
'Volume Level Today',
|
1040
|
+
'.....Volume mean(million)',
|
1041
|
+
'.....Amount mean(100 millions)',
|
1042
|
+
'.....Turnover rate mean %',
|
1043
|
+
'Today vs. Prev',
|
1044
|
+
'.....Volume ratio(times)']
|
1045
|
+
df['Item']=itme_list
|
1046
|
+
|
1021
1047
|
df_display_CSS(df,titletxt=titletxt,footnote=footnote,facecolor=facecolor, \
|
1022
1048
|
first_col_align='left',second_col_align='right', \
|
1023
1049
|
last_col_align='right',other_col_align='right', \
|
@@ -1027,19 +1053,32 @@ def market_detail_china2(category='price',
|
|
1027
1053
|
|
1028
1054
|
|
1029
1055
|
if category1=='RETURN':
|
1030
|
-
titletxt="中国三大股票交易所横向对比:投资回报"
|
1056
|
+
titletxt=text_lang("中国三大股票交易所横向对比:投资回报","China Stock Exchanges: Differences in Return")
|
1031
1057
|
|
1032
|
-
ft0=heading+"信息来源:东方财富,统计时间:"+nowstr+"\n"
|
1033
|
-
ft1=heading+"注:\n"
|
1034
|
-
ft2=heading+"☆可交易股票数量:将随着股票停复牌情况变化\n"
|
1035
|
-
ft3=heading+"☆MRQ:最近一个季度的滚动数据\n"
|
1036
|
-
ft4=heading+"☆YTD:今年以来的累计情况\n"
|
1058
|
+
ft0=heading+text_lang("信息来源:东方财富,统计时间:","Data source: EM, updated ")+nowstr+"\n"
|
1059
|
+
ft1=heading+text_lang("注:\n","Notes:\n")
|
1060
|
+
ft2=heading+text_lang("☆可交易股票数量:将随着股票停复牌情况变化\n","*Tradeable stocks: vary with suspension/resumption\n")
|
1061
|
+
ft3=heading+text_lang("☆MRQ:最近一个季度的滚动数据\n","*MRQ: most recent quarter\n")
|
1062
|
+
ft4=heading+text_lang("☆YTD:今年以来的累计情况\n","*YTD: year to today\n")
|
1037
1063
|
|
1038
|
-
ft9=heading+"☆使用实时数据,不同日期/每天不同时刻统计的结果可能不同\n"
|
1039
|
-
ft10=heading+"☆若在非开市时间或开市前后短期内统计,数据可能出现空缺\n"
|
1064
|
+
ft9=heading+text_lang("☆使用实时数据,不同日期/每天不同时刻统计的结果可能不同\n","*Based on real-time data, vary with time\n")
|
1065
|
+
ft10=heading+text_lang("☆若在非开市时间或开市前后短期内统计,数据可能出现空缺\n","*Missing data may happen around non-trading time\n")
|
1040
1066
|
|
1041
1067
|
footnote=ft0+ft1+ft2+ft3+ft4 + ft9+ft10
|
1042
1068
|
|
1069
|
+
itme_list=['Tradeable stocks',
|
1070
|
+
'MRQ Investment Return',
|
1071
|
+
'.....MRQ change% mean',
|
1072
|
+
'.....MRQ change% median',
|
1073
|
+
'.....MRQ change% std',
|
1074
|
+
'.....MRQ rising stock%',
|
1075
|
+
'YTD Investment Return',
|
1076
|
+
'.....YTD change% mean',
|
1077
|
+
'.....YTD change% median',
|
1078
|
+
'.....YTD change% std',
|
1079
|
+
'.....YTD rising stock%']
|
1080
|
+
df['Item']=itme_list
|
1081
|
+
|
1043
1082
|
df_display_CSS(df,titletxt=titletxt,footnote=footnote,facecolor=facecolor, \
|
1044
1083
|
first_col_align='left',second_col_align='right', \
|
1045
1084
|
last_col_align='right',other_col_align='right', \
|
@@ -1049,20 +1088,44 @@ def market_detail_china2(category='price',
|
|
1049
1088
|
|
1050
1089
|
|
1051
1090
|
if category1=='VALUATION':
|
1052
|
-
titletxt="中国三大股票交易所横向对比:市值与估值"
|
1091
|
+
titletxt=text_lang("中国三大股票交易所横向对比:市值与估值","China Stock Exchanges: Differences in Valuation")
|
1053
1092
|
|
1054
|
-
ft0=heading+"信息来源:东方财富,统计时间:"+nowstr+"\n"
|
1055
|
-
ft1=heading+"注:\n"
|
1056
|
-
ft2=heading+"☆可交易股票数量:将随着股票停复牌情况变化\n"
|
1057
|
-
ft3=heading+"☆市盈率:这里为动态市盈率,即市盈率TTM,过去12个月的连续变化\n"
|
1058
|
-
ft4=heading+"☆市净率:这里为静态市净率\n"
|
1059
|
-
ft5=heading+"☆标准差/均值=标准差(数值)/均值,提升可比性\n"
|
1093
|
+
ft0=heading+text_lang("信息来源:东方财富,统计时间:","Data source: EM, updated ")+nowstr+"\n"
|
1094
|
+
ft1=heading+text_lang("注:\n","Notes:\n")
|
1095
|
+
ft2=heading+text_lang("☆可交易股票数量:将随着股票停复牌情况变化\n","*Tradeable stocks: vary with suspension/resumption\n")
|
1096
|
+
ft3=heading+text_lang("☆市盈率:这里为动态市盈率,即市盈率TTM,过去12个月的连续变化\n","*P/E: price/earnings per share, TTM\n")
|
1097
|
+
ft4=heading+text_lang("☆市净率:这里为静态市净率\n","*P/B: price/net asset per share, stationary\n")
|
1098
|
+
ft5=heading+text_lang("☆标准差/均值=标准差(数值)/均值,提升可比性\n","*std/mean: degree of variation, better comparability\n")
|
1060
1099
|
|
1061
|
-
ft9=heading+"☆使用实时数据,不同日期/每天不同时刻统计的结果可能不同\n"
|
1062
|
-
ft10=heading+"☆若在非开市时间或开市前后短期内统计,数据可能出现空缺\n"
|
1100
|
+
ft9=heading+text_lang("☆使用实时数据,不同日期/每天不同时刻统计的结果可能不同\n","*Based on real-time data, vary with time\n")
|
1101
|
+
ft10=heading+text_lang("☆若在非开市时间或开市前后短期内统计,数据可能出现空缺\n","*Missing data may happen around non-trading time\n")
|
1063
1102
|
|
1064
1103
|
footnote=ft0+ft1+ft2+ft3+ft4+ft5 + ft9+ft10
|
1065
1104
|
|
1105
|
+
itme_list=['Tradeable stocks',
|
1106
|
+
'Total Market Cap (TMC)',
|
1107
|
+
'.....Whole Market TMC(trillion)',
|
1108
|
+
'.....Stock TMC mean(billion)',
|
1109
|
+
'.....Stock TMC median(billion)',
|
1110
|
+
'.....Stock TMC std/mean',
|
1111
|
+
'Outstanding Market Cap (OMC)',
|
1112
|
+
'.....Whole Market OMC(trillion)',
|
1113
|
+
'.....Whole Market outstanding %',
|
1114
|
+
'.....Stock OMC mean(billion)',
|
1115
|
+
'.....Stock OMC median(billion)',
|
1116
|
+
'.....Stock OMC std/mean',
|
1117
|
+
'Valuation: P/E',
|
1118
|
+
'.....Stock P/E mean',
|
1119
|
+
'.....Stock P/E median',
|
1120
|
+
'.....Stock P/E std/mean',
|
1121
|
+
'Valuation: P/B',
|
1122
|
+
'.....Stock P/B mean',
|
1123
|
+
'.....Stock P/B median',
|
1124
|
+
'.....Stock P/B std/mean']
|
1125
|
+
|
1126
|
+
df['Item']=itme_list
|
1127
|
+
|
1128
|
+
|
1066
1129
|
df_display_CSS(df,titletxt=titletxt,footnote=footnote,facecolor=facecolor, \
|
1067
1130
|
first_col_align='left',second_col_align='right', \
|
1068
1131
|
last_col_align='right',other_col_align='right', \
|
siat/security_trend2.py
CHANGED
siat/stock.py
CHANGED
@@ -690,9 +690,11 @@ def security_indicator(ticker,indicator, \
|
|
690
690
|
return erdf3
|
691
691
|
|
692
692
|
#titletxt=texttranslate("证券指标运动趋势:")+ticker_name(ticker)
|
693
|
-
|
693
|
+
titletxt1=text_lang("证券趋势分析:","Security Trend: ")
|
694
|
+
titletxt=titletxt1+ticker_name(ticker,ticker_type=ticker_type)
|
694
695
|
import datetime; todaydt = datetime.date.today()
|
695
|
-
|
696
|
+
sourcetxt=text_lang("数据来源:新浪/东方财富/stooq/雅虎财经,","Data source: Sina/EM/Stooq/Yahoo, ")
|
697
|
+
footnote=sourcetxt+str(todaydt)
|
696
698
|
collabel=ectranslate(indicator)
|
697
699
|
|
698
700
|
ylabeltxt=ectranslate(indicator)
|
@@ -773,10 +775,10 @@ def stock_ret(ticker,fromdate,todate, \
|
|
773
775
|
return
|
774
776
|
|
775
777
|
import datetime; todaydt = datetime.date.today()
|
776
|
-
footnote=
|
778
|
+
footnote=text_lang("数据来源:综合新浪/东方财富/stooq/雅虎财经,","Data source: Sina/EM/Stooq/Yahoo, ")+str(todaydt)
|
777
779
|
collabel=ectranslate(rtype)
|
778
780
|
ylabeltxt=ectranslate(rtype)
|
779
|
-
titletxt=
|
781
|
+
titletxt=text_lang("证券趋势分析:","Security Trend: ")+ticker_name(ticker,ticker_type=ticker_type)+text_lang(",收益率",", Rate of Return")
|
780
782
|
|
781
783
|
pltdf=erdf[erdf.index >= fromdate]
|
782
784
|
plot_line(pltdf,rtype,collabel,ylabeltxt,titletxt,footnote,datatag=datatag, \
|
@@ -885,18 +887,18 @@ def security_mindicators(ticker,measures,
|
|
885
887
|
for c in list(df1):
|
886
888
|
df1.rename(columns={c:ectranslate(c)},inplace=True)
|
887
889
|
|
888
|
-
y_label='证券指标'
|
890
|
+
y_label=text_lang('证券指标',"Indicator")
|
889
891
|
import datetime; todaydt = datetime.date.today()
|
890
|
-
x_label="数据来源:综合新浪/东方财富/stooq/yahoo,"+str(todaydt)
|
892
|
+
x_label=text_lang("数据来源:综合新浪/东方财富/stooq/yahoo,","Data source: Sina/EM/Stooq/Yahoo, ")+str(todaydt)
|
891
893
|
|
892
894
|
axhline_value=0
|
893
895
|
axhline_label=''
|
894
896
|
for c in measures:
|
895
897
|
if 'Ret%' in c:
|
896
898
|
axhline_value=0
|
897
|
-
axhline_label='
|
899
|
+
axhline_label='零线'
|
898
900
|
break
|
899
|
-
title_txt="证券趋势分析:"+ticker_name(ticker,ticker_type=ticker_type)
|
901
|
+
title_txt=text_lang("证券趋势分析:","Security Trend: ")+ticker_name(ticker,ticker_type=ticker_type)
|
900
902
|
"""
|
901
903
|
draw_lines(df1,y_label,x_label,axhline_value,axhline_label,title_txt, \
|
902
904
|
data_label=False,resample_freq='H',smooth=smooth,loc=loc,annotate=annotate)
|
@@ -1012,7 +1014,7 @@ def price_volatility2(pricedf,ticker,fromdate,todate, \
|
|
1012
1014
|
print(" #Error(price_volatility2):only support price risk types of",colnames)
|
1013
1015
|
return
|
1014
1016
|
|
1015
|
-
titletxt=
|
1017
|
+
titletxt=text_lang("证券趋势分析:","Security Trend: ")+ticker_name(ticker,ticker_type=ticker_type)+text_lang(",价格波动风险",", Price Volatility Risk")
|
1016
1018
|
import datetime; todaydt = datetime.date.today()
|
1017
1019
|
footnote=texttranslate("数据来源:综合新浪/东方财富/stooq/yahoo,")+str(todaydt)
|
1018
1020
|
collabel=ectranslate(type)
|
@@ -1131,9 +1133,9 @@ def ret_volatility2(retdf,ticker,fromdate,todate, \
|
|
1131
1133
|
print(" #Error(ret_volatility2): only support return risk types of",colnames)
|
1132
1134
|
return
|
1133
1135
|
|
1134
|
-
titletxt=
|
1136
|
+
titletxt=text_lang("证券趋势分析:","Security Trend: ")+ticker_name(ticker,ticker_type=ticker_type)+text_lang(",收益率波动风险",", Return Volatility Risk")
|
1135
1137
|
import datetime; todaydt = datetime.date.today()
|
1136
|
-
footnote=
|
1138
|
+
footnote=text_lang("数据来源:综合新浪/东方财富/stooq/yahoo,","Data source: Sina/EM/Stooq/Yahoo, ")+str(todaydt)
|
1137
1139
|
collabel=ectranslate(type)
|
1138
1140
|
ylabeltxt=ectranslate(type)
|
1139
1141
|
pltdf=erdf[erdf.index >= fromdate]
|
@@ -1248,9 +1250,9 @@ def ret_lpsd2(retdf,ticker,fromdate,todate, \
|
|
1248
1250
|
print(" #Error(ret_lpsd2): only support return risk types of",colnames)
|
1249
1251
|
return
|
1250
1252
|
|
1251
|
-
titletxt=
|
1253
|
+
titletxt=text_lang("证券趋势分析:","Security Trend: ")+ticker_name(ticker,ticker_type=ticker_type)+text_lang("波动损失风险","Volatility Loss Risk")
|
1252
1254
|
import datetime; todaydt = datetime.date.today()
|
1253
|
-
footnote=
|
1255
|
+
footnote=text_lang("数据来源:综合新浪/东方财富/stooq/yahoo,","Data source: Sina/EM/Stooq/Yahoo, ")+str(todaydt)
|
1254
1256
|
collabel=ectranslate(rtype)
|
1255
1257
|
ylabeltxt=ectranslate(rtype)
|
1256
1258
|
pltdf=erdf[erdf.index >= fromdate]
|
@@ -1376,12 +1378,15 @@ def comp_2securities_1measure(df1,df2,measure,twinx=False,loc1='upper left', \
|
|
1376
1378
|
tname1=ticker_name(ticker1,ticker_type=ticker_type[0])
|
1377
1379
|
tname2=ticker_name(ticker2,ticker_type=ticker_type[1])
|
1378
1380
|
|
1381
|
+
#绘图
|
1382
|
+
print('')
|
1383
|
+
|
1379
1384
|
titletxt1=text_lang("证券趋势分析:","Security Trend: ")
|
1380
1385
|
titletxt=titletxt1+tname1+" vs "+tname2
|
1381
1386
|
|
1382
1387
|
import datetime; todaydt = datetime.date.today()
|
1383
|
-
footnote1=text_lang("数据来源:综合/东方财富/stooq/yahoo,","
|
1384
|
-
footnote=footnote1+str(todaydt)+"统计"
|
1388
|
+
footnote1=text_lang("数据来源:综合/东方财富/stooq/yahoo,","Data source: Sina/EM/Stooq/Yahoo, ")
|
1389
|
+
footnote=footnote1+str(todaydt)+text_lang("统计","")
|
1385
1390
|
|
1386
1391
|
plot_line2(df1,ticker1,measure,label,df2,ticker2,measure,label, \
|
1387
1392
|
ylabeltxt,titletxt,footnote,zeroline=zeroline,twinx=twinx, \
|
@@ -1738,6 +1743,9 @@ def compare_msecurity(tickers,measure,start,end, \
|
|
1738
1743
|
title_txt=title_txt+', '+title_txt2
|
1739
1744
|
else:
|
1740
1745
|
title_txt=title_txt+': '+title_txt2
|
1746
|
+
|
1747
|
+
axhline_value=0
|
1748
|
+
axhline_label="零线"
|
1741
1749
|
|
1742
1750
|
# 标准化处理
|
1743
1751
|
try:
|
@@ -2033,7 +2041,7 @@ def candlestick(stkcd,fromdate,todate,volume=True,style='China',mav=[5,10], \
|
|
2033
2041
|
)
|
2034
2042
|
|
2035
2043
|
# add a title the the correct axes, 0=first subfigure
|
2036
|
-
titletxt=titletxt+":K线图走势,日移动均线="+str(mav)
|
2044
|
+
titletxt=titletxt+text_lang(":K线图走势,日移动均线=",": Candlestick Chart, MAV Days=")+str(mav)
|
2037
2045
|
axlist[0].set_title(titletxt,
|
2038
2046
|
fontsize=16,
|
2039
2047
|
#style='italic',
|
@@ -2041,9 +2049,9 @@ def candlestick(stkcd,fromdate,todate,volume=True,style='China',mav=[5,10], \
|
|
2041
2049
|
loc='center')
|
2042
2050
|
|
2043
2051
|
#设置图例,注意前两个为图中期间开始日期的线和柱子
|
2044
|
-
mav_labels=['期间首日线','期间首日柱']
|
2052
|
+
mav_labels=[text_lang('期间首日线','Day 1(line)'),text_lang('期间首日柱','Day 1(bar)')]
|
2045
2053
|
for d in mav:
|
2046
|
-
mav_labels=mav_labels+[str(d)+"日移动均线"]
|
2054
|
+
mav_labels=mav_labels+[str(d)+text_lang("日移动均线","-day MAV line")]
|
2047
2055
|
axlist[0].legend(mav_labels,loc=loc)
|
2048
2056
|
"""
|
2049
2057
|
#去掉前两个无用的图例
|
@@ -2107,8 +2115,8 @@ def candlestick_pro(stkcd,fromdate,todate, \
|
|
2107
2115
|
tight_layout=True,
|
2108
2116
|
xrotation=15,
|
2109
2117
|
title=titletxt,
|
2110
|
-
ylabel=
|
2111
|
-
ylabel_lower=
|
2118
|
+
ylabel=text_lang("价格","Price"),
|
2119
|
+
ylabel_lower=text_lang("成交量","Volume"),
|
2112
2120
|
figratio=(12.8,7.2)
|
2113
2121
|
)
|
2114
2122
|
reset_plt()
|
@@ -2195,7 +2203,8 @@ def candlestick_demo(stkcd,fromdate,todate, \
|
|
2195
2203
|
#change 1st column of b to number type
|
2196
2204
|
import matplotlib.dates as dt2
|
2197
2205
|
b[:,0] = dt2.date2num(b[:,0])
|
2198
|
-
|
2206
|
+
|
2207
|
+
print('')
|
2199
2208
|
#specify the size of the graph
|
2200
2209
|
#fig,ax=plt.subplots(figsize=(10,6))
|
2201
2210
|
fig,ax=plt.subplots()
|
@@ -2228,19 +2237,19 @@ def candlestick_demo(stkcd,fromdate,todate, \
|
|
2228
2237
|
fig.autofmt_xdate()
|
2229
2238
|
fig.gca().set_facecolor(facecolor)
|
2230
2239
|
|
2231
|
-
titletxt0=text_lang("K线图/蜡烛图演示:","
|
2240
|
+
titletxt0=text_lang("K线图/蜡烛图演示:","Candlestick Chart Demo: ")
|
2232
2241
|
titletxt=titletxt0 + ticker_name(str(stkcd),ticker_type=ticker_type)
|
2233
2242
|
price_txt=text_lang('价格','Price')
|
2234
|
-
source_txt=text_lang("数据来源:
|
2243
|
+
source_txt=text_lang("数据来源: 综合新浪/Stooq/雅虎等","Data source: Sina/Stooq/Yahoo")
|
2235
2244
|
|
2236
2245
|
plt.title(titletxt,fontsize=title_txt_size,fontweight='bold')
|
2237
2246
|
plt.ylabel(price_txt,fontsize=ylabel_txt_size)
|
2238
2247
|
|
2239
2248
|
plt.gcf().autofmt_xdate() # 优化标注(自动倾斜)
|
2240
|
-
plt.gca().set_facecolor(
|
2249
|
+
plt.gca().set_facecolor(facecolor)
|
2241
2250
|
#plt.xticks(rotation=30)
|
2242
2251
|
plt.legend(loc="best",fontsize=legend_txt_size)
|
2243
|
-
plt.xlabel(source_txt
|
2252
|
+
plt.xlabel(source_txt,fontsize=xlabel_txt_size)
|
2244
2253
|
plt.show()
|
2245
2254
|
|
2246
2255
|
return p
|
@@ -3724,13 +3733,8 @@ def compare_mmeasure(ticker,measures,fromdate,todate, \
|
|
3724
3733
|
y_label=''
|
3725
3734
|
import datetime; today = datetime.date.today()
|
3726
3735
|
|
3727
|
-
|
3728
|
-
|
3729
|
-
x_label="Source: sina/stooq/yahoo, "+str(today)
|
3730
|
-
title_txt="Compare A Security's Multiple Measurements: "+ticker_name(ticker)
|
3731
|
-
else:
|
3732
|
-
x_label="数据来源: 综合新浪/Yahoo/stooq,"+str(today)
|
3733
|
-
title_txt="证券趋势分析:"+ticker_name(ticker)
|
3736
|
+
x_label=text_lang("数据来源: 综合新浪/Yahoo/stooq,","Data source: Sina/Yahoo/Stooq, ")+str(today)
|
3737
|
+
title_txt=text_lang("证券趋势分析:","Security Trend: ")+ticker_name(ticker)
|
3734
3738
|
|
3735
3739
|
draw_lines(df3,y_label=y_label,x_label=x_label, \
|
3736
3740
|
axhline_value=axhline_value,axhline_label=axhline_label, \
|
siat/stock_technical.py
CHANGED
@@ -954,7 +954,7 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
954
954
|
if (graph in ['MA',['MA']]) or ('ALL' in graph):
|
955
955
|
MA_cols=[]
|
956
956
|
for mad in MA_days:
|
957
|
-
col='MA'+str(mad)+'简单移动均线'
|
957
|
+
col='MA'+str(mad)+text_lang('简单移动均线',' Simple MA Line')
|
958
958
|
MA_cols=MA_cols+[col]
|
959
959
|
df[col] = talib.MA(df['Close'],timeperiod=mad)
|
960
960
|
|
@@ -974,10 +974,10 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
974
974
|
# 限定日期范围
|
975
975
|
df1=df[(df.index >= startpd) & (df.index <= endpd)]
|
976
976
|
|
977
|
-
y_label="价格"
|
977
|
+
y_label=text_lang("价格","Price")
|
978
978
|
import datetime as dt; today=dt.date.today()
|
979
|
-
source="数据来源:
|
980
|
-
footnote="MA参数:"+str(MA_days)
|
979
|
+
source=text_lang("数据来源:Sina/Yahoo/Stooq,","Data source: Sina/Yahoo/Stooq, ")+str(today)
|
980
|
+
footnote=text_lang("MA参数:","MA days=")+str(MA_days)
|
981
981
|
x_label=footnote+'\n'+source
|
982
982
|
|
983
983
|
axhline_value=0
|
@@ -985,9 +985,9 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
985
985
|
|
986
986
|
# 简单移动均线MA绘图:moving average
|
987
987
|
df2=df1[['Close']+MA_cols]
|
988
|
-
df2.rename(columns={'Close':'收盘价'},inplace=True)
|
988
|
+
df2.rename(columns={'Close':text_lang('收盘价','Close')},inplace=True)
|
989
989
|
|
990
|
-
title_txt="证券价格走势分析:"+ticker_name(ticker,ticker_type)+",简单移动均线"
|
990
|
+
title_txt=text_lang("证券价格走势分析:","Security Trend: ")+ticker_name(ticker,ticker_type)+text_lang(",简单移动均线",", Simple MA Line")
|
991
991
|
|
992
992
|
print(" Rendering graphics ...")
|
993
993
|
draw_lines(df2,y_label,x_label,axhline_value,axhline_label,title_txt, \
|
@@ -995,7 +995,7 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
995
995
|
|
996
996
|
if printout:
|
997
997
|
if len(dft3)!=0:
|
998
|
-
print("\n== 简单移动均线交叉 ==")
|
998
|
+
print(text_lang("\n== 简单移动均线交叉 ==","\n== Simple MA Line =="))
|
999
999
|
alignlist=['left','center']
|
1000
1000
|
print(dft3[['日期','交叉类型']].to_markdown(index=False,tablefmt='plain',colalign=alignlist))
|
1001
1001
|
else:
|
@@ -1013,7 +1013,7 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1013
1013
|
if ('EMA' in graph) or ('ALL' in graph):
|
1014
1014
|
EMA_cols=[]
|
1015
1015
|
for mad in EMA_days:
|
1016
|
-
col='EMA'+str(mad)+'
|
1016
|
+
col='EMA'+str(mad)+text_lang('指数移动均线',' Exponential MA Line')
|
1017
1017
|
EMA_cols=EMA_cols+[col]
|
1018
1018
|
df[col] = talib.EMA(df['Close'],timeperiod=mad)
|
1019
1019
|
|
@@ -1033,24 +1033,24 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1033
1033
|
# 限定日期范围
|
1034
1034
|
df1=df[(df.index >= startpd) & (df.index <= endpd)]
|
1035
1035
|
|
1036
|
-
y_label="价格"
|
1036
|
+
y_label=text_lang("价格","Price")
|
1037
1037
|
import datetime as dt; today=dt.date.today()
|
1038
|
-
source="数据来源:
|
1039
|
-
footnote="EMA参数:"+str(EMA_days)
|
1038
|
+
source=text_lang("数据来源:Sina/Yahoo/Stooq,","Data source: Sina/Yahoo/Stooq, ")+str(today)
|
1039
|
+
footnote=text_lang("EMA参数:","EMA days=")+str(EMA_days)
|
1040
1040
|
x_label=footnote+'\n'+source
|
1041
1041
|
|
1042
1042
|
axhline_value=0
|
1043
1043
|
axhline_label=''
|
1044
1044
|
|
1045
1045
|
df3=df1[['Close']+EMA_cols]
|
1046
|
-
df3.rename(columns={'Close':'收盘价'},inplace=True)
|
1047
|
-
title_txt="证券价格走势分析:"+ticker_name(ticker,ticker_type)+",指数移动平均线"
|
1046
|
+
df3.rename(columns={'Close':text_lang('收盘价','Close')},inplace=True)
|
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
1049
|
data_label=False,resample_freq=resample_freq,smooth=smooth,linewidth=linewidth*2)
|
1050
1050
|
|
1051
1051
|
if printout:
|
1052
1052
|
if len(dft3)!=0:
|
1053
|
-
print("\n== 指数移动平均线交叉 ==")
|
1053
|
+
print(text_lang("\n== 指数移动平均线交叉 ==","\n== Exponential MA Line Cross =="))
|
1054
1054
|
alignlist=['left','center']
|
1055
1055
|
print(dft3[['日期','交叉类型']].to_markdown(index=False,tablefmt='plain',colalign=alignlist))
|
1056
1056
|
else:
|
@@ -1109,10 +1109,10 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1109
1109
|
# MACD绘图
|
1110
1110
|
df4=df1[['Close','DIF','DEA','MACD']]
|
1111
1111
|
df4.rename(columns={'Close':'收盘价','DIF':'快线DIF','DEA':'慢线DEA','MACD':'柱线MACD'},inplace=True)
|
1112
|
-
title_txt="证券价格走势分析:"+ticker_name(ticker,ticker_type)+",MACD"
|
1112
|
+
title_txt=text_lang("证券价格走势分析:","Security Trend: ")+ticker_name(ticker,ticker_type)+",MACD"
|
1113
1113
|
|
1114
1114
|
import datetime as dt; today=dt.date.today()
|
1115
|
-
source="数据来源:
|
1115
|
+
source=text_lang("数据来源:Sina/Yahoo/Stooq,","Data source: Sina/Yahoo/Stooq, ")+str(today)
|
1116
1116
|
|
1117
1117
|
#设置绘图风格:关闭网格虚线
|
1118
1118
|
plt.rcParams['axes.grid']=False
|
@@ -1123,8 +1123,8 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1123
1123
|
ax.patch.set_facecolor('black')
|
1124
1124
|
|
1125
1125
|
# 绘制曲线
|
1126
|
-
ax.plot(df4['快线DIF'],label='快线DIF',linewidth=linewidth*2,color='white')
|
1127
|
-
ax.plot(df4['慢线DEA'],label='慢线DEA',linewidth=linewidth*2,color='orange')
|
1126
|
+
ax.plot(df4['快线DIF'],label=text_lang('快线DIF','DIF(Fast line)'),linewidth=linewidth*2,color='white')
|
1127
|
+
ax.plot(df4['慢线DEA'],label=text_lang('慢线DEA','DEA(Slow line)'),linewidth=linewidth*2,color='orange')
|
1128
1128
|
|
1129
1129
|
# 绘制红绿柱子
|
1130
1130
|
"""
|
@@ -1137,16 +1137,16 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1137
1137
|
macd_plus=df4[df4['柱线MACD']>=0]
|
1138
1138
|
macd_minus=df4[df4['柱线MACD']<=0]
|
1139
1139
|
ax.bar(macd_plus.index,macd_plus['柱线MACD'],color='red',alpha=0.5)
|
1140
|
-
ax.bar(macd_minus.index,macd_minus['柱线MACD'],color='green',label='柱线MACD',alpha=0.5)
|
1140
|
+
ax.bar(macd_minus.index,macd_minus['柱线MACD'],color='green',label=text_lang('柱线MACD','MACD(Bar chart)'),alpha=0.5)
|
1141
1141
|
|
1142
1142
|
# 绘制水平辅助线
|
1143
1143
|
#plt.axhline(y=0,label='指标零线',color='cyan',linestyle=':',linewidth=linewidth*2)
|
1144
1144
|
plt.axhline(y=0,label='',color='cyan',linestyle=':',linewidth=linewidth*2)
|
1145
1145
|
|
1146
1146
|
# 设置左侧坐标轴
|
1147
|
-
ax.set_ylabel('DIF/DEA/MACD指标',fontsize=ylabel_txt_size)
|
1147
|
+
ax.set_ylabel(text_lang('DIF/DEA/MACD指标','DIF/DEA/MACD'),fontsize=ylabel_txt_size)
|
1148
1148
|
|
1149
|
-
footnote="MACD
|
1149
|
+
footnote="MACD days="+str([MACD_fastperiod,MACD_slowperiod,MACD_signalperiod])
|
1150
1150
|
x_label=footnote+'\n'+source
|
1151
1151
|
ax.set_xlabel(x_label,fontsize=xlabel_txt_size)
|
1152
1152
|
ax.legend(loc=loc1,fontsize=legend_txt_size)
|
@@ -1164,10 +1164,10 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1164
1164
|
df5=df4
|
1165
1165
|
|
1166
1166
|
ax2 = ax.twinx()
|
1167
|
-
ax2.plot(df5['收盘价'],label='收盘价',linewidth=linewidth,color=price_line_color,ls='--')
|
1167
|
+
ax2.plot(df5['收盘价'],label=text_lang('收盘价','Close'),linewidth=linewidth,color=price_line_color,ls='--')
|
1168
1168
|
|
1169
1169
|
# 右侧坐标轴标记
|
1170
|
-
ax2.set_ylabel('收盘价',fontsize=ylabel_txt_size)
|
1170
|
+
ax2.set_ylabel(text_lang('收盘价','Close'),fontsize=ylabel_txt_size)
|
1171
1171
|
ax2.legend(loc=loc2,fontsize=legend_txt_size)
|
1172
1172
|
|
1173
1173
|
# 图示标题
|
@@ -1179,7 +1179,7 @@ def stock_MACD(ticker,start='default',end='default', \
|
|
1179
1179
|
|
1180
1180
|
if printout:
|
1181
1181
|
if len(dft3)!=0:
|
1182
|
-
print("\n== DIF与DEA交叉 ==")
|
1182
|
+
print(text_lang("\n== DIF与DEA交叉 ==","\n== Cross of DIF and DEA"))
|
1183
1183
|
alignlist=['left','center']
|
1184
1184
|
print(dft3[['日期','交叉类型']].to_markdown(index=False,tablefmt='plain',colalign=alignlist))
|
1185
1185
|
else:
|
@@ -1358,11 +1358,11 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1358
1358
|
# RSI绘图
|
1359
1359
|
df4=df1[['Close']+RSI_cols]
|
1360
1360
|
df4.rename(columns={'Close':'收盘价'},inplace=True)
|
1361
|
-
title_txt="证券价格走势分析:"+ticker_name(ticker,ticker_type)+",RSI"
|
1361
|
+
title_txt=text_lang("证券价格走势分析:","Security Trend: ")+ticker_name(ticker,ticker_type)+text_lang(",RSI",", RSI")
|
1362
1362
|
|
1363
1363
|
import datetime as dt; today=dt.date.today()
|
1364
|
-
source="数据来源:
|
1365
|
-
footnote="RSI参数:"+str(RSI_days)
|
1364
|
+
source=text_lang("数据来源:Sina/Yahoo/Stooq,","Data source: Sina/Yahoo/Stooq, ")+str(today)
|
1365
|
+
footnote=text_lang("RSI参数:","RSI days=")+str(RSI_days)
|
1366
1366
|
x_label=footnote+'\n'+source
|
1367
1367
|
|
1368
1368
|
# 设置绘图区的背景颜色为黑色
|
@@ -1372,11 +1372,11 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1372
1372
|
|
1373
1373
|
# 绘制曲线
|
1374
1374
|
if ('RSI1' in graph) or ('ALL' in graph):
|
1375
|
-
ax.plot(df4['RSI1'],label='快速(周)线RSI1',linewidth=linewidth*2,color='orange')
|
1375
|
+
ax.plot(df4['RSI1'],label=text_lang('快速(周)线RSI1','RSI1(1 week, Fast line)'),linewidth=linewidth*2,color='orange')
|
1376
1376
|
if ('RSI2' in graph) or ('ALL' in graph):
|
1377
|
-
ax.plot(df4['RSI2'],label='中速(双周)线RSI2',linewidth=linewidth*2,color='purple')
|
1377
|
+
ax.plot(df4['RSI2'],label=text_lang('中速(双周)线RSI2','RSI2(2 weeks, Mid line)'),linewidth=linewidth*2,color='purple')
|
1378
1378
|
if ('RSI3' in graph) or ('ALL' in graph):
|
1379
|
-
ax.plot(df4['RSI3'],label='慢速(月)线RSI3',linewidth=linewidth*2,color='white')
|
1379
|
+
ax.plot(df4['RSI3'],label=text_lang('慢速(月)线RSI3','RSI3(1 month, Slow line)'),linewidth=linewidth*2,color='white')
|
1380
1380
|
|
1381
1381
|
# 绘制水平辅助线
|
1382
1382
|
hl_linestyle_list=['dashed','-.','dotted']
|
@@ -1387,7 +1387,7 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1387
1387
|
plt.axhline(y=hl,label='',color='cyan',linestyle=hl_ls,linewidth=linewidth)
|
1388
1388
|
|
1389
1389
|
# 设置左侧坐标轴
|
1390
|
-
ax.set_ylabel('RSI指标',fontsize=ylabel_txt_size)
|
1390
|
+
ax.set_ylabel(text_lang('RSI指标','RSI'),fontsize=ylabel_txt_size)
|
1391
1391
|
ax.set_xlabel(x_label,fontsize=xlabel_txt_size)
|
1392
1392
|
ax.legend(loc=loc1,fontsize=legend_txt_size)
|
1393
1393
|
|
@@ -1405,10 +1405,10 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1405
1405
|
df5=df4
|
1406
1406
|
|
1407
1407
|
ax2 = ax.twinx()
|
1408
|
-
ax2.plot(df5['收盘价'],label='收盘价',linewidth=linewidth,color=price_line_color,ls='--')
|
1408
|
+
ax2.plot(df5['收盘价'],label=text_lang('收盘价','Close'),linewidth=linewidth,color=price_line_color,ls='--')
|
1409
1409
|
|
1410
1410
|
# 右侧坐标轴标记
|
1411
|
-
ax2.set_ylabel('收盘价',fontsize=ylabel_txt_size)
|
1411
|
+
ax2.set_ylabel(text_lang('收盘价','Close'),fontsize=ylabel_txt_size)
|
1412
1412
|
ax2.legend(loc=loc2,fontsize=legend_txt_size)
|
1413
1413
|
|
1414
1414
|
# 图示标题
|
@@ -1421,7 +1421,7 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1421
1421
|
if printout:
|
1422
1422
|
if (('RSI1' in graph) & ('RSI3' in graph)) or ('ALL' in graph):
|
1423
1423
|
if len(dft1c)!=0:
|
1424
|
-
print("\n=== RSI1与RSI3的交叉点 ===")
|
1424
|
+
print(text_lang("\n=== RSI1与RSI3的交叉点 ===","\n=== Cross of RSI1 & RSI3"))
|
1425
1425
|
alignlist=['left','center']
|
1426
1426
|
print(dft1c[['日期','RSI1/3交叉类型']].to_markdown(index=False,tablefmt='plain',colalign=alignlist))
|
1427
1427
|
else:
|
@@ -1429,7 +1429,7 @@ def stock_RSI(ticker,start='default',end='default', \
|
|
1429
1429
|
if printout:
|
1430
1430
|
if (('RSI2' in graph) & ('RSI3' in graph)) or ('ALL' in graph):
|
1431
1431
|
if len(dft2c)!=0:
|
1432
|
-
print("\n=== RSI2与RSI3的交叉点 ===")
|
1432
|
+
print(text_lang("\n=== RSI2与RSI3的交叉点 ===","\n=== Cross of RSI2 & RSI3"))
|
1433
1433
|
alignlist=['left','center']
|
1434
1434
|
print(dft2c[['日期','RSI2/3交叉类型']].to_markdown(index=False,tablefmt='plain',colalign=alignlist))
|
1435
1435
|
else:
|
@@ -1627,11 +1627,11 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1627
1627
|
# 绘图
|
1628
1628
|
df4=df1[['Close']+KDJ_cols]
|
1629
1629
|
df4.rename(columns={'Close':'收盘价'},inplace=True)
|
1630
|
-
title_txt="证券价格走势分析:"+ticker_name(ticker,ticker_type)+",KDJ"
|
1630
|
+
title_txt=text_lang("证券价格走势分析:","Security Trend: ")+ticker_name(ticker,ticker_type)+text_lang(",KDJ",", KDJ")
|
1631
1631
|
|
1632
1632
|
import datetime as dt; today=dt.date.today()
|
1633
|
-
source="数据来源:
|
1634
|
-
footnote="KDJ参数:"+str(KDJ_days)
|
1633
|
+
source=text_lang("数据来源:Sina/Yahoo/Stooq,","Data source: Sina/Yahoo/Stooq, ")+str(today)
|
1634
|
+
footnote=text_lang("KDJ参数:","KDJ days=")+str(KDJ_days)
|
1635
1635
|
x_label=footnote+'\n'+source
|
1636
1636
|
|
1637
1637
|
# 设置绘图区的背景颜色为黑色
|
@@ -1641,11 +1641,11 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1641
1641
|
|
1642
1642
|
# 绘制曲线
|
1643
1643
|
if ('K' in graph) or ('ALL' in graph):
|
1644
|
-
ax.plot(df4['K'],label='快速线K',linewidth=linewidth*2,color='orange')
|
1644
|
+
ax.plot(df4['K'],label=text_lang('快速线K','K line(Fast)'),linewidth=linewidth*2,color='orange')
|
1645
1645
|
if ('D' in graph) or ('ALL' in graph):
|
1646
|
-
ax.plot(df4['D'],label='慢速线D',linewidth=linewidth*2,color='green')
|
1646
|
+
ax.plot(df4['D'],label=text_lang('慢速线D','D line(Slow)'),linewidth=linewidth*2,color='green')
|
1647
1647
|
if ('J' in graph) or ('ALL' in graph):
|
1648
|
-
ax.plot(df4['J'],label='超快确认线J',linewidth=linewidth*2,color='purple')
|
1648
|
+
ax.plot(df4['J'],label=text_lang('超快确认线J','J line(Faster, confirm)'),linewidth=linewidth*2,color='purple')
|
1649
1649
|
|
1650
1650
|
# 绘制水平辅助线: 某些情况下不绘制,以便展现KDJ线细节
|
1651
1651
|
maxK=df4['K'].max()
|
@@ -1675,7 +1675,7 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1675
1675
|
plt.axhline(y=hl,label='',color=hl_color,linestyle=hl_ls,linewidth=linewidth)
|
1676
1676
|
|
1677
1677
|
# 设置左侧坐标轴
|
1678
|
-
ax.set_ylabel('KDJ指标',fontsize=ylabel_txt_size)
|
1678
|
+
ax.set_ylabel(text_lang('KDJ指标','KDJ'),fontsize=ylabel_txt_size)
|
1679
1679
|
ax.set_xlabel(x_label,fontsize=xlabel_txt_size)
|
1680
1680
|
ax.legend(loc=loc1,fontsize=legend_txt_size)
|
1681
1681
|
|
@@ -1699,10 +1699,10 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1699
1699
|
df5=df4
|
1700
1700
|
|
1701
1701
|
ax2 = ax.twinx()
|
1702
|
-
ax2.plot(df5['收盘价'],label='收盘价',linewidth=linewidth,color=price_line_color,ls='--')
|
1702
|
+
ax2.plot(df5['收盘价'],label=text_lang('收盘价','Close'),linewidth=linewidth,color=price_line_color,ls='--')
|
1703
1703
|
|
1704
1704
|
# 右侧坐标轴标记
|
1705
|
-
ax2.set_ylabel('收盘价',fontsize=ylabel_txt_size)
|
1705
|
+
ax2.set_ylabel(text_lang('收盘价','Close'),fontsize=ylabel_txt_size)
|
1706
1706
|
ax2.legend(loc=loc2,fontsize=legend_txt_size)
|
1707
1707
|
|
1708
1708
|
# 图示标题
|
@@ -1716,14 +1716,14 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1716
1716
|
alignlist=['left','center']
|
1717
1717
|
if (('J' in graph) & ('K' in graph)) or ('ALL' in graph):
|
1718
1718
|
if len(dft1c)!=0:
|
1719
|
-
print("\n**** J线与K线的交叉点")
|
1719
|
+
print(text_lang("\n**** J线与K线的交叉点","\n**** Cross of J & K Lines"))
|
1720
1720
|
print(dft1c[['日期','交叉类型']].to_markdown(index=False,tablefmt='plain',colalign=alignlist))
|
1721
1721
|
else:
|
1722
1722
|
print(" Note: no J/K cross of lines incurred for",ticker,"from",start,"to",end)
|
1723
1723
|
|
1724
1724
|
if (('J' in graph) & ('D' in graph)) or ('ALL' in graph):
|
1725
1725
|
if len(dft2c)!=0:
|
1726
|
-
print("\n**** J线与
|
1726
|
+
print(text_lang("\n**** J线与D线的交叉点","\n**** Cross of J & D Lines"))
|
1727
1727
|
alignlist=['left','center']
|
1728
1728
|
print(dft2c[['日期','交叉类型']].to_markdown(index=False,tablefmt='plain',colalign=alignlist))
|
1729
1729
|
else:
|
@@ -1731,7 +1731,7 @@ def stock_KDJ(ticker,start='default',end='default', \
|
|
1731
1731
|
|
1732
1732
|
if (('K' in graph) & ('D' in graph)) or ('ALL' in graph):
|
1733
1733
|
if len(dft3c)!=0:
|
1734
|
-
print("\n**** K线与D线的交叉点")
|
1734
|
+
print(text_lang("\n**** K线与D线的交叉点","\n**** Cross of K & D Lines"))
|
1735
1735
|
alignlist=['left','center']
|
1736
1736
|
print(dft3c[['日期','交叉类型']].to_markdown(index=False,tablefmt='plain',colalign=alignlist))
|
1737
1737
|
else:
|
@@ -2241,19 +2241,19 @@ def security_bollinger(ticker,fromdate,todate,boll_days=20, \
|
|
2241
2241
|
pricedf['blower']=pricedf["bmiddle"] - pricedf['bsd']*2
|
2242
2242
|
|
2243
2243
|
df=pricedf[['bupper','bmiddle','blower','Close']]
|
2244
|
-
df.rename(columns={'bupper':'上(压力)线','bmiddle':'中(界)线','blower':'下(支撑)线','Close':'收盘价'},inplace=True)
|
2244
|
+
df.rename(columns={'bupper':text_lang('上(压力)线','Upper Line'),'bmiddle':text_lang('中(界)线','Mid Line'),'blower':text_lang('下(支撑)线','Lower Line'),'Close':text_lang('收盘价','Close')},inplace=True)
|
2245
2245
|
|
2246
2246
|
# 截取时间段
|
2247
2247
|
result,start,end=check_period(fromdate,todate)
|
2248
2248
|
df1=df[(df.index >= start) & (df.index <= end)]
|
2249
2249
|
|
2250
|
-
y_label='价格'
|
2250
|
+
y_label=text_lang('价格',"Price")
|
2251
2251
|
import datetime; today = datetime.date.today()
|
2252
|
-
x_label="数据来源:综合新浪/东方财富/stooq/雅虎财经,"+str(today)
|
2252
|
+
x_label=text_lang("数据来源:综合新浪/东方财富/stooq/雅虎财经,","Data source: Sina/EM/Stooq/Yahoo, ")+str(today)
|
2253
2253
|
|
2254
2254
|
axhline_value=0
|
2255
2255
|
axhline_label=''
|
2256
|
-
title_txt="证券价格趋势分析:"+ticker_name(ticker,ticker_type)+",布林带"
|
2256
|
+
title_txt=text_lang("证券价格趋势分析:","Security Trend: ")+ticker_name(ticker,ticker_type)+text_lang(",布林带",", Bollinger Band")
|
2257
2257
|
|
2258
2258
|
"""
|
2259
2259
|
draw_lines(df1,y_label,x_label,axhline_value,axhline_label,title_txt, \
|
@@ -2267,7 +2267,7 @@ def security_bollinger(ticker,fromdate,todate,boll_days=20, \
|
|
2267
2267
|
data_label=False,resample_freq='6H',smooth=smooth, \
|
2268
2268
|
date_range=date_range,date_freq=date_freq,date_fmt='%Y-%m-%d', \
|
2269
2269
|
colorlist=colorlist,lslist=lslist,lwlist=lwlist, \
|
2270
|
-
band_area=['上(压力)线','下(支撑)线'],mark_end=mark_end,loc=loc)
|
2270
|
+
band_area=[text_lang('上(压力)线','Upper Line'),text_lang('下(支撑)线','Lower Line')],mark_end=mark_end,loc=loc)
|
2271
2271
|
|
2272
2272
|
return df1
|
2273
2273
|
|
siat/translate.py
CHANGED
@@ -1966,19 +1966,24 @@ def codetranslate1(code):
|
|
1966
1966
|
['000012.SS','SSE T-Bond Index'],['000013.SS','SSE Ent Bond Index'],
|
1967
1967
|
['000022.SS','SSE Corpbond Index'],['000061.SS','SSE Entbond30 Index'],
|
1968
1968
|
['000116.SS','SSE Creditbond100 Index'],['000101.SS','SSE 5-year Creditbond Index'],
|
1969
|
+
|
1970
|
+
['002594.SZ','BYD Auto (A)'],['01211.HK','BYD Auto (HK)'],['81211.HK','BYD Auto (HK RMB)'],
|
1971
|
+
['600941.SS','China Mobile'],['00941.HK','China Mobile (HK)'],['80941.HK','China Mobile (HK RMB)'],
|
1972
|
+
['ULVR.UK','Unilever (UK)'],['605011.SS','Hangzou Power'],['000723.SZ','Meijin Energy'],
|
1969
1973
|
|
1970
1974
|
['^GSPC','S&P500 Index'],['^DJI','Dow Jones Index'],
|
1971
1975
|
['WISGP.SI','FTSE Singapore Index'], ['^STI','Straits Times Index'],
|
1972
1976
|
['^IXIC','Nasdaq Composite Index'],['^FTSE','FTSE 100 Index'],
|
1973
1977
|
['^N100','Euronext 100 Index'],['^FMIB','FTSE Italy Index'],
|
1974
1978
|
['^TSX','Toronto Composite Index'],['^MXX','Mexico IPC Index'],
|
1979
|
+
['^SNX','India SENSEX 30 Index'],['^FTM','UK FTSE 250 Index'],
|
1975
1980
|
|
1976
1981
|
['FVTT.FGI','FTSE Viernam Index'],['^RUT','Russell 2000 Index'],
|
1977
1982
|
['^HSI','Hang Seng Index'],['^N225','Nikkei 225 Index'],
|
1978
1983
|
['WIKOR.FGI','FTSE Korea Index'],['^KS11','Korea Composite Index'],
|
1979
1984
|
['^KOSPI','Korea Composite Index'],['^BSESN','SENSEX Index'],
|
1980
|
-
['^FCHI','CAC40 Index'],['^GDAXI','DAX30 Index'],
|
1981
|
-
['^CAC','CAC40 Index'],['^DAX','DAX30 Index'],
|
1985
|
+
['^FCHI','France CAC40 Index'],['^GDAXI','Germany DAX30 Index'],
|
1986
|
+
['^CAC','France CAC40 Index'],['^DAX','Germany DAX30 Index'],
|
1982
1987
|
['IMOEX.ME','MOEX Index'],['^MOEX','MOEX Index'],
|
1983
1988
|
['^RTS','RTS(USD) Index'],
|
1984
1989
|
['^VIX','VIX Index'],['ASEA','FTSE SE Asia ETF'],['LIT','Global X Lithium & Battery Tech ETF'],
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: siat
|
3
|
-
Version: 3.2.
|
3
|
+
Version: 3.2.45
|
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
|
@@ -32,6 +32,7 @@ Requires-Dist: graphviz
|
|
32
32
|
Requires-Dist: luddite
|
33
33
|
Requires-Dist: pendulum
|
34
34
|
Requires-Dist: itables
|
35
|
+
Requires-Dist: py-trans
|
35
36
|
|
36
37
|
# Welcome to the Magic World of siat
|
37
38
|
|
@@ -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=_PkuAzT9fNJazC1p3NIQDqLduzfBFcLsV3KPteo377I,149963
|
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
|
@@ -60,13 +60,13 @@ siat/future_china.py,sha256=F-HsIf2Op8Z22RzTjet1g8COzldgnMjFNSXsAkeGyWo,17595
|
|
60
60
|
siat/future_china_test.py,sha256=BrSzmDVaOHki6rntOtosmRn-6dkfOBuLulJNqh7MOpc,1163
|
61
61
|
siat/global_index_test.py,sha256=hnFp3wqqzzL-kAP8mgxDZ54Bd5Ijf6ENi5YJlGBgcXw,2402
|
62
62
|
siat/google_authenticator.py,sha256=ZUbZR8OW0IAKDbcYtlqGqIpZdERpFor9NccFELxg9yI,1637
|
63
|
-
siat/grafix.py,sha256=
|
63
|
+
siat/grafix.py,sha256=W5I4IdOm9q7CdDHFSv6xFmfk9sPZXItXC4cCvp2q6mU,87137
|
64
64
|
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=
|
69
|
-
siat/market_china.py,sha256=
|
68
|
+
siat/luchy_draw.py,sha256=CESMhLYcsC6UtYfTZOfYnVQ84zz1MnXRN81P7OZHEgE,20516
|
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
|
72
72
|
siat/markowitz2.py,sha256=csHIjqTbIsHMYQ_LEur9K0Jg8pOm8deEVdQfAGCOG5o,111461
|
@@ -102,10 +102,10 @@ siat/security_prices.py,sha256=ChiVcubRiPzUvYm8a5X5qjxWtawRQdYHFQXLIevGFC4,10532
|
|
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=WOygSyWSynNmk5gpOA8n1738-nWqfDzuyMjwriB3eP4,25284
|
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=lk3Cvbm2ieFk-ISoy2nX0rEoqnnAGuX3lNiT6iskTjg,143914
|
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=qhXOsZ9gowLtWviMgpTPjIfkgIfDWSRXVPZq4mYL5kM,133336
|
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=YoC7OzzGUxT-7EEIU-GYWz0A9CBQ4aIQjlparfVJYSQ,216156
|
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.45.dist-info/METADATA,sha256=a1zRvc3eoGiRhfDYBCgHd6iE9YgNmlj83jV1Alrq7Cc,7283
|
142
|
+
siat-3.2.45.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
143
|
+
siat-3.2.45.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
|
144
|
+
siat-3.2.45.dist-info/RECORD,,
|
File without changes
|
File without changes
|