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 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+""+footnote
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="*** Do you expect to pass?"
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
- break
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
@@ -112,7 +112,7 @@ def security_trend(ticker,indicator='Close',adjust='', \
112
112
 
113
113
  printout=False,source='auto', \
114
114
  ticker_type='auto', \
115
- facecolor='whitesmoke'):
115
+ facecolor='papayawhip'):
116
116
 
117
117
  """
118
118
  功能:组合指令,分析证券指标走势,支持多个证券、多个指标和多种绘图方式。
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
- titletxt=texttranslate("证券趋势分析:")+ticker_name(ticker,ticker_type=ticker_type)
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
- footnote=texttranslate("数据来源:新浪/东方财富/stooq/雅虎财经,")+str(todaydt)
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=texttranslate("数据来源:综合新浪/东方财富/stooq/雅虎财经,")+str(todaydt)
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=texttranslate("证券趋势分析:")+ticker_name(ticker,ticker_type=ticker_type)+",收益率"
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=texttranslate("证券趋势分析:")+ticker_name(ticker,ticker_type=ticker_type)+",价格波动风险"
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=texttranslate("证券趋势分析:")+ticker_name(ticker,ticker_type=ticker_type)+",收益率波动风险"
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=texttranslate("数据来源:综合新浪/东方财富/stooq/yahoo,")+str(todaydt)
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=texttranslate("证券趋势分析:")+ticker_name(ticker,ticker_type=ticker_type)+"波动损失风险"
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=texttranslate("数据来源:综合新浪/东方财富/stooq/yahoo,")+str(todaydt)
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,","Source: integrating sina/eastmoney/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=texttranslate("价格"),
2111
- ylabel_lower=texttranslate("成交量"),
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线图/蜡烛图演示:","Security Price Candlestick Demo: ")
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("数据来源: 综合","Data source: integrating ")
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('whitesmoke')
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+"sina/stooq/yahoo",fontsize=xlabel_txt_size)
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
- lang=check_language()
3728
- if lang == 'English':
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="数据来源:sina/yahoo/stooq/fred,"+str(today)
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="数据来源:sina/yahoo/stooq/fred,"+str(today)
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="数据来源:sina/yahoo/stooq/fred,"+str(today)
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参数:"+str([MACD_fastperiod,MACD_slowperiod,MACD_signalperiod])
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="数据来源:sina/yahoo/stooq/fred,"+str(today)
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="数据来源:sina/yahoo/stooq/fred,"+str(today)
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线与K线的交叉点")
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.37
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=AaZYKbkeLYYRdsncZ3HDhTM6d0RSJbJX7nid6U6TMfo,147084
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=yPWr1rqb8yJjEs2zSJ5LMGl0TeSg2G_GID_QF6clysI,86432
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=27YTkFPr91D_ndNbmoxeUUcsjbfGWoufKP1FcF1lCkY,20379
69
- siat/market_china.py,sha256=hKoTLUyHuzsuG2L3_IuLx_utTKqS-__mZ63wrElh65U,45943
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=5U1yZBqwRq0YX5BpmHij-7QFz7inIbWCq5kS9JSVY04,25284
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=TLiHaBBpqfE2S-Q4QrzBaj-uWEh5Zu17GAYYIDZlMCI,143322
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=GPedxbOSPTi8zthDMu69edFVLES2RSNor2a1y8Zo42w,131612
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=dO9SZjlRTSc8dInr0VYoBVywGYX70Bk-cfBgZjHLIhc,215736
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.37.dist-info/METADATA,sha256=UnwG90_i5hNJUS3gc7fHwrxRs2EJZJaZHqExVTLJgR0,7258
142
- siat-3.2.37.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
143
- siat-3.2.37.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
144
- siat-3.2.37.dist-info/RECORD,,
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