siat 3.2.37__py3-none-any.whl → 3.2.42__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'] = ['SimSun'] # 设置默认字体
75
+ mpfrc={'font.family': 'SimSun'}
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/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.42
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,12 +60,12 @@ 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=yQF04A_a0I5D14hj3UjpsK-9pc48474OpN5n7MSBaY0,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
68
+ siat/luchy_draw.py,sha256=CESMhLYcsC6UtYfTZOfYnVQ84zz1MnXRN81P7OZHEgE,20516
69
69
  siat/market_china.py,sha256=hKoTLUyHuzsuG2L3_IuLx_utTKqS-__mZ63wrElh65U,45943
70
70
  siat/markowitz.py,sha256=glHikhabFAF6Hb6df1pYfhkxid2IZXBYAVQng5wd9Wk,97526
71
71
  siat/markowitz2-20240620.py,sha256=irZAPnjaatFsKQmFRMENP-cO6bEUl2narYtkU5NKTWI,108019
@@ -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.42.dist-info/METADATA,sha256=o8tnZNRpv0vMzDbsUAvLEyrFxLcFSWk_sOZhxEhV49w,7283
142
+ siat-3.2.42.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
143
+ siat-3.2.42.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
144
+ siat-3.2.42.dist-info/RECORD,,
File without changes