siat 3.0.41__py3-none-any.whl → 3.0.43__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
@@ -3854,5 +3854,16 @@ def upgrade_siat(module_list=['siat','akshare','pandas','pandas_datareader', \
3854
3854
 
3855
3855
  return
3856
3856
  #==============================================================================
3857
+
3858
+ def df_index_timezone_remove(df):
3859
+ """
3860
+ 功能:去掉df索引日期中的时区信息,避免日期过滤时出错
3861
+ 注意:从雅虎财经获取的数据中日期索引项很可能带有时区
3862
+ """
3863
+ import pandas as pd
3864
+ df.index = pd.to_datetime(df.index)
3865
+ df.index = df.index.tz_localize(None)
3866
+
3867
+ return df
3857
3868
  #==============================================================================
3858
3869
  #==============================================================================
siat/financials_china.py CHANGED
@@ -655,7 +655,8 @@ if __name__=='__main__':
655
655
 
656
656
  def compare_dupont_china(tickerlist,fsdate='latest',scale1 = 10,scale2 = 10, \
657
657
  hatchlist=['.', 'o', '\\'],printout=True,sort='PM', \
658
- facecolor='papayawhip',font_size='16px'):
658
+ facecolor='papayawhip',font_size='16px',
659
+ loc='best'):
659
660
  """
660
661
  功能:获得tickerlist中每只股票的杜邦分析项目,绘制柱状叠加比较图
661
662
  tickerlist:股票代码列表,建议在10只以内
@@ -724,6 +725,12 @@ def compare_dupont_china(tickerlist,fsdate='latest',scale1 = 10,scale2 = 10, \
724
725
  }
725
726
 
726
727
  df = pd.DataFrame(raw_data,columns=[ticker,name1,name2,name3,name4,name5])
728
+ if len(df)==0:
729
+ print('')
730
+ print(" #Error(compare_dupont_china): no data to plot dupont identity bar chart.")
731
+ print(" If the stock code is correct, you may suffer from anti-spyder from data source. Try later")
732
+ return None
733
+
727
734
  if sort=='PM':
728
735
  df.sort_values(name1,ascending=False,inplace=True)
729
736
  elif sort=='TAT':
@@ -736,7 +743,7 @@ def compare_dupont_china(tickerlist,fsdate='latest',scale1 = 10,scale2 = 10, \
736
743
  num=len(df['公司'])
737
744
  for i in range(num):
738
745
  code=df.loc[i,'公司']
739
- df.loc[i,'公司']=ticker_name(code).replace("(A股)",'')
746
+ df.loc[i,'公司']=ticker_name(code,'stock').replace("(A股)",'')
740
747
 
741
748
  f,ax1 = plt.subplots(1,figsize=(10,5))
742
749
  w = 0.75
@@ -752,6 +759,11 @@ def compare_dupont_china(tickerlist,fsdate='latest',scale1 = 10,scale2 = 10, \
752
759
  ax1.bar(x,df[name1],width=w,label=name1,alpha=0.5,color='blue', \
753
760
  hatch=hatchlist[2], edgecolor='black',align='center')
754
761
 
762
+ #判断是否绘制零线
763
+ pm_max=df[name1].max(); pm_min=df[name1].min()
764
+ if pm_max * pm_min < 0:
765
+ plt.axhline(y=0,ls=":",c="black",linewidth=2,label='')
766
+
755
767
  plt.xticks(tick_pos,df[ticker])
756
768
  plt.ylabel("杜邦分析分解项目")
757
769
 
@@ -768,8 +780,17 @@ def compare_dupont_china(tickerlist,fsdate='latest',scale1 = 10,scale2 = 10, \
768
780
  footnote2=footnote+'\n'+footnote1+'\n'+"数据来源:sina/EM,"+str(today)
769
781
  plt.xlabel(footnote2)
770
782
 
771
- plt.legend(loc='best')
772
- plt.title("杜邦分析对比图")
783
+ plt.legend(loc=loc)
784
+
785
+ titletxt1="杜邦分析对比图:"
786
+ if sort=='PM':
787
+ titletxt2="按照"+name1+"降序排列"
788
+ elif sort=='TAT':
789
+ titletxt2="按照"+name2+"降序排列"
790
+ else:
791
+ titletxt2="按照"+name3+"降序排列"
792
+
793
+ plt.title(titletxt1+titletxt2)
773
794
  plt.xlim([min(tick_pos)-w,max(tick_pos)+w])
774
795
 
775
796
  plt.gca().set_facecolor('whitesmoke')
@@ -794,7 +815,7 @@ def compare_dupont_china(tickerlist,fsdate='latest',scale1 = 10,scale2 = 10, \
794
815
  print("===== 杜邦分析分项数据表 =====")
795
816
  print("*** 数据来源:sina/EM,"+str(today))
796
817
  """
797
- title_txt="杜邦分析分项数据表"
818
+ title_txt="杜邦分析分项数据表:"+titletxt2
798
819
  footnote0="1、表中各个上市公司的财报日期可能存在差异,但均为可获得(已公布)的最新财报"
799
820
  footnote1="2、表中数值基于期末数字直接计算,而非期初期末均值,可能与公告数字存在差异。"
800
821
  footnote2="*** 数据来源:sina/EM,"+str(today)
@@ -2274,12 +2295,12 @@ def cn_codetranslate(ticker):
2274
2295
  """
2275
2296
  result,prefix,suffix=split_prefix_suffix(ticker)
2276
2297
  if suffix in SUFFIX_LIST_CN:
2277
- name=ticker_name(ticker)
2298
+ name=ticker_name(ticker,'stock')
2278
2299
 
2279
2300
  if suffix =='':
2280
2301
  for s in SUFFIX_LIST_CN:
2281
2302
  ticker_try=ticker+'.'+s
2282
- name=ticker_name(ticker_try)
2303
+ name=ticker_name(ticker_try,'stock')
2283
2304
  print('\b'*99," Looking for the short name of stock",ticker)
2284
2305
  if not (name == ticker_try): break
2285
2306
 
@@ -2446,7 +2467,7 @@ def compare_history_china(tickers,items,start,end,period_type='annual', \
2446
2467
  #collabel=ectranslate(item1)
2447
2468
  collabel=colname
2448
2469
  ylabeltxt=''
2449
- titletxt=ticker_name(ticker1)+": 财务指标历史"
2470
+ titletxt=ticker_name(ticker1,'stock')+": 财务指标历史"
2450
2471
 
2451
2472
  colmin=round(df1[colname].min(),2)
2452
2473
  colmax=round(df1[colname].max(),2)
@@ -2500,9 +2521,9 @@ def compare_history_china(tickers,items,start,end,period_type='annual', \
2500
2521
  colmin2=round(df2[colname2].min(),2)
2501
2522
  colmax2=round(df2[colname2].max(),2)
2502
2523
  colmean2=round(df2[colname2].mean(),2)
2503
- footnote1=ticker_name(ticker1)+":"+ \
2524
+ footnote1=ticker_name(ticker1,'stock')+":"+ \
2504
2525
  str(colmin1)+" - "+str(colmax1)+",均值"+str(colmean1)
2505
- footnote2=ticker_name(ticker2)+":"+ \
2526
+ footnote2=ticker_name(ticker2,'stock')+":"+ \
2506
2527
  str(colmin2)+" - "+str(colmax2)+",均值"+str(colmean2)
2507
2528
  footnote=footnote1+'\n'+footnote2+'\n'+footnote9
2508
2529
 
@@ -2589,7 +2610,7 @@ def compare_snapshot_china(tickers,itemk,endDate='latest',datatag=True,tag_offse
2589
2610
  t=rdf['ticker'].values[0]
2590
2611
  item=cols[1]
2591
2612
  value=rdf[item].values[0]
2592
- name=ticker_name(t)
2613
+ name=ticker_name(t,'stock')
2593
2614
  if name == t:
2594
2615
  name=rdf[cols[2]].values[0]
2595
2616
  row=pd.Series({'ticker':t,'item':item,'value':value,'name':name})
@@ -2674,7 +2695,7 @@ def compare_tax_china(tickers,endDate='latest',datatag=True,tag_offset=0.01,grap
2674
2695
  print(" #Error(compare_tax_china): failed to get financial info for",t)
2675
2696
  continue
2676
2697
  df1=df0.tail(1)
2677
- name=ticker_name(t)
2698
+ name=ticker_name(t,'stock')
2678
2699
  reportdate=df1.index[0]
2679
2700
  taxrate=df1['tax rate'][0]
2680
2701
  row=pd.Series({'ticker':t,'name':name,'date':reportdate,'tax rate%':round(taxrate*100,2)})
@@ -2773,7 +2794,7 @@ def compare_igr_sgr_china(tickers,endDate='latest',graph=True,axisamp1=1.3,axisa
2773
2794
  if igr is None or sgr is None:
2774
2795
  print(" #Warning(compare_igr_sgr_china): no stock info found for",t)
2775
2796
  continue
2776
- name=ticker_name(t)
2797
+ name=ticker_name(t,'stock')
2777
2798
  row=pd.Series({'ticker':t,'name':name,'IGR%':round(igr*100,2),'SGR%':round(sgr*100,2)})
2778
2799
  try:
2779
2800
  df=df.append(row,ignore_index=True)
@@ -2848,7 +2869,7 @@ def dupont_decompose_china(ticker,fsdate,gview=False,facecolor='papayawhip'):
2848
2869
  #亿元
2849
2870
  yi=100000000
2850
2871
 
2851
- company_name=ticker_name(ticker)
2872
+ company_name=ticker_name(ticker,'stock')
2852
2873
  # 定义杜邦分解项目变量
2853
2874
 
2854
2875
  roe='【'+company_name+'】\n('+fsdate+')\n'+'净资产收益率'
@@ -3231,7 +3252,7 @@ def dupont_decompose_china(ticker,fsdate,gview=False,facecolor='papayawhip'):
3231
3252
 
3232
3253
  from graphviz import Digraph
3233
3254
  #按各公司的层数生产分层的节点:
3234
- g=Digraph(name=ticker_name(ticker)+fsdate)
3255
+ g=Digraph(name=ticker_name(ticker,'stock')+fsdate)
3235
3256
 
3236
3257
  for key in dic:
3237
3258
  for n in range(number_of_layers+1):
@@ -3256,7 +3277,7 @@ def dupont_decompose_china(ticker,fsdate,gview=False,facecolor='papayawhip'):
3256
3277
 
3257
3278
  #打印信息
3258
3279
  if not gview:
3259
- print("\n注:",ticker_name(ticker),"\b,金额单位:亿元,财报日期:",fsdate)
3280
+ print("\n注:",ticker_name(ticker,'stock'),"\b,金额单位:亿元,财报日期:",fsdate)
3260
3281
  print("1、为避免图示过大,这里未列出所有分解项目")
3261
3282
  print("2、金融机构报表与普通企业结构不同,此处仅为约算")
3262
3283
  print("3、应收款项包括应收账款、应收利息、应收保费以及应收票据等")
@@ -3429,7 +3450,7 @@ def get_fin_summary_1ticker_china(ticker,fsdates):
3429
3450
  try:
3430
3451
  dft2=dft[['选项','指标']+fsdates3]
3431
3452
  except:
3432
- print(" #Warning(get_fin_summary_1ticker_china): fin stmt of",fsdates3[0],"unavailable for",ticker+'('+ticker_name(ticker)+')')
3453
+ print(" #Warning(get_fin_summary_1ticker_china): fin stmt of",fsdates3[0],"unavailable for",ticker+'('+ticker_name(ticker,'stock')+')')
3433
3454
  return None
3434
3455
 
3435
3456
  # 金额变换:元-->亿元,小数位截取
@@ -3545,6 +3566,10 @@ if __name__=='__main__':
3545
3566
  tickers=['000002.SZ','600048.SS','001979.SZ','600325.SS','000069.SZ','600383.SS','600895.SS','601155.SS']
3546
3567
  fsdates='2022-12-31'
3547
3568
 
3569
+ tickers=['002373.SZ', '002279.SZ', '002368.SZ', '600410.SS', '603927.SS', '002405.SS']
3570
+ fsdates='2023-12-31'
3571
+
3572
+
3548
3573
  def compare_fin_summary_china(tickers,fsdates,facecolor='whitesmoke',font_size='16px'):
3549
3574
  """
3550
3575
  功能:分类别显示财报摘要中的指标
@@ -3715,7 +3740,7 @@ def compare_fin_summary_china(tickers,fsdates,facecolor='whitesmoke',font_size='
3715
3740
  titletxt="\n===== 上市公司财务报表摘要:"+ticker_name(ticker1)+" ====="
3716
3741
  print(titletxt)
3717
3742
  """
3718
- titletxt=ticker_name(ticker1)+':'+"财报摘要"
3743
+ titletxt=ticker_name(ticker1,'stock')+':'+"财报摘要"
3719
3744
 
3720
3745
  fsdf1=fsdf[fsdf['ticker']==ticker1]
3721
3746
  for ty in typelist:
@@ -3766,7 +3791,7 @@ def compare_fin_summary_china(tickers,fsdates,facecolor='whitesmoke',font_size='
3766
3791
 
3767
3792
  try:
3768
3793
  dft2=dft[['选项','指标',fsdates3[0]]]
3769
- dft2.rename(columns={fsdates3[0]:ticker_name(t)},inplace=True)
3794
+ dft2.rename(columns={fsdates3[0]:ticker_name(t,'stock')},inplace=True)
3770
3795
  except:
3771
3796
  print(" #Error(compare_fin_summary_china): fin stmt of",t,'not found on',fsdates3[0])
3772
3797
  return None
@@ -3840,9 +3865,9 @@ def get_fin_indicator_1ticker_china(ticker,fsdates):
3840
3865
  fsdate_field=list(dft)[0]
3841
3866
  dft2=dft[dft[fsdate_field].isin(fsdates3)]
3842
3867
  if len(dft2) < len(fsdates3):
3843
- print(" #Warning(get_fin_summary_1ticker_china): fin stmt of some dates unavailable for",ticker+'('+ticker_name(ticker)+')')
3868
+ print(" #Warning(get_fin_summary_1ticker_china): fin stmt of some dates unavailable for",ticker+'('+ticker_name(ticker,'stock')+')')
3844
3869
  if len(dft2) ==0:
3845
- print(" #Error(get_fin_summary_1ticker_china): no fin stmts found for",ticker+'('+ticker_name(ticker)+') on',fsdates)
3870
+ print(" #Error(get_fin_summary_1ticker_china): no fin stmts found for",ticker+'('+ticker_name(ticker,'stock')+') on',fsdates)
3846
3871
  return None
3847
3872
 
3848
3873
  # 去掉重复行
@@ -4222,7 +4247,7 @@ def compare_fin_indicator_china(tickers,fsdates,facecolor='papayawhip',font_size
4222
4247
  titletxt="\n===== 上市公司主要财务比率和重要指标:"+ticker_name(ticker1)+" ====="
4223
4248
  print(titletxt)
4224
4249
  """
4225
- titletxt="主要财务比率和指标:"+ticker_name(ticker1)
4250
+ titletxt="主要财务比率和指标:"+ticker_name(ticker1,'stock')
4226
4251
 
4227
4252
  fsdf1=fsdf[fsdf['ticker']==ticker1]
4228
4253
  for ty in typelist:
@@ -4282,7 +4307,7 @@ def compare_fin_indicator_china(tickers,fsdates,facecolor='papayawhip',font_size
4282
4307
 
4283
4308
  try:
4284
4309
  dft2=dft[['选项','指标',fsdates3[0]]]
4285
- dft2.rename(columns={fsdates3[0]:ticker_name(t)},inplace=True)
4310
+ dft2.rename(columns={fsdates3[0]:ticker_name(t,'stock')},inplace=True)
4286
4311
  except:
4287
4312
  print(" #Error(compare_fin_summary_china): fin stmt of",fsdates3[0],'not found for',t)
4288
4313
  return None
siat/financials_china2.py CHANGED
@@ -1957,8 +1957,8 @@ if __name__=='__main__':
1957
1957
 
1958
1958
  def fs_analysis_china(tickers,fsdates=[],analysis_type='balance sheet', \
1959
1959
  category='profile',business_period='recent', \
1960
- printout=False,gview=False, \
1961
- loc1='upper left',loc2='upper right', \
1960
+ sort='PM',printout=False,gview=False, \
1961
+ loc1='best',loc2='best', \
1962
1962
  facecolor='papayawhip',font_size='16px'):
1963
1963
  """
1964
1964
  【功能】财务报表分析,仅适用于中国A股,注意不适用于港股和美股(含中概股)
@@ -2134,8 +2134,8 @@ def fs_analysis_china(tickers,fsdates=[],analysis_type='balance sheet', \
2134
2134
 
2135
2135
  # 多只股票的杜邦分析对比
2136
2136
  from siat.financials_china import compare_dupont_china
2137
- df_db=compare_dupont_china(tickers,fsdate=fsdates,printout=printout, \
2138
- facecolor=facecolor,font_size=font_size)
2137
+ df_db=compare_dupont_china(tickers,fsdate=fsdates,sort=sort,printout=printout, \
2138
+ facecolor=facecolor,font_size=font_size,loc=loc1)
2139
2139
  return
2140
2140
 
2141
2141
  elif ('dupont' in analysis_type1) and ('decompose' in analysis_type1):
@@ -523,7 +523,8 @@ if __name__=='__main__':
523
523
 
524
524
  def compare_1ticker_mrar(ticker,start,end,rar=['sharpe','sortino','treynor','alpha'], \
525
525
  ret_type="Annual Ret%",RF=0,regression_period=365, \
526
- graph=True,axhline_value=0,axhline_label='',facecolor='whitesmoke', \
526
+ graph=True,loc1='best', \
527
+ axhline_value=0,axhline_label='',facecolor='whitesmoke', \
527
528
  printout=False,sortby='tpw_mean',trailing=7,trend_threshhold=0.01, \
528
529
  annotate=False,annotate_value=False, \
529
530
  mark_top=False,mark_bottom=False,mark_end=False, \
@@ -618,7 +619,7 @@ def compare_1ticker_mrar(ticker,start,end,rar=['sharpe','sortino','treynor','alp
618
619
  title_txt=title_txt,data_label=False, \
619
620
  annotate=annotate,annotate_value=annotate, \
620
621
  mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
621
- facecolor=facecolor)
622
+ facecolor=facecolor,loc=loc1)
622
623
 
623
624
  #制表
624
625
  recommenddf=pd.DataFrame()
@@ -671,7 +672,8 @@ if __name__=='__main__':
671
672
 
672
673
  def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
673
674
  ret_type="Annual Ret%",RF=0,regression_period=365, \
674
- graph=True,axhline_value=0,axhline_label='', \
675
+ graph=True,loc1='best', \
676
+ axhline_value=0,axhline_label='', \
675
677
  printout=False,sortby='tpw_mean',trailing=7,trend_threshhold=0.01, \
676
678
  annotate=False,annotate_value=False, \
677
679
  mark_top=False,mark_bottom=False,mark_end=False, \
@@ -767,7 +769,7 @@ def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
767
769
  title_txt=title_txt,data_label=False, \
768
770
  annotate=annotate,annotate_value=annotate, \
769
771
  mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
770
- facecolor=facecolor)
772
+ facecolor=facecolor,loc=loc1)
771
773
 
772
774
  #制表
773
775
  recommenddf=pd.DataFrame()
@@ -791,7 +793,7 @@ def compare_mticker_1rar(ticker,start,end,rar='sharpe', \
791
793
  footnotey=footnote6+'\n'+footnote7+'\n'+footnotex
792
794
 
793
795
  #删除含有Nan的行,否则可能引起近期优先加权平均计算结果市场出现Nan
794
- df1.dropna(inplace=True)
796
+ df1.dropna(inplace=True,axis=1)
795
797
  recommenddf=descriptive_statistics2(df1,title_txt,footnotey,decimals=4, \
796
798
  sortby=sortby,recommend_only=True,trailing=trailing, \
797
799
  trend_threshhold=trend_threshhold, \
@@ -820,7 +822,8 @@ if __name__=='__main__':
820
822
 
821
823
  def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treynor'], \
822
824
  ret_type="Annual Ret%",RF=0,regression_period=365, \
823
- graph=True,axhline_value=0,axhline_label='', \
825
+ graph=True,loc1='best', \
826
+ axhline_value=0,axhline_label='', \
824
827
  printout=True,sortby='tpw_mean',trailing=7,trend_threshhold=0.01, \
825
828
  annotate=False,annotate_value=False, \
826
829
  mark_top=False,mark_bottom=False,mark_end=False, \
@@ -854,7 +857,7 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
854
857
  annotate=annotate,annotate_value=annotate, \
855
858
  mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
856
859
  mktidx=mktidx,source=source,style_print=True, \
857
- ticker_type=ticker_type)
860
+ ticker_type=ticker_type,loc1=loc1)
858
861
  if df_tmp is None:
859
862
  break
860
863
  else:
@@ -1010,7 +1013,8 @@ if __name__=='__main__':
1010
1013
  def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
1011
1014
  ret_type=["Annual Ret%","Monthly Ret%"], \
1012
1015
  RF=0,regression_period=365, \
1013
- graph=True,axhline_value=0,axhline_label='',facecolor='whitesmoke', \
1016
+ graph=True,loc1='best', \
1017
+ axhline_value=0,axhline_label='',facecolor='whitesmoke', \
1014
1018
  printout=False,sortby='tpw_mean',trailing=7,trend_threshhold=0.01, \
1015
1019
  annotate=False,annotate_value=False, \
1016
1020
  mark_top=False,mark_bottom=False,mark_end=False, \
@@ -1101,7 +1105,7 @@ def compare_1ticker_1rar_mret(ticker,start,end,rar='sharpe', \
1101
1105
  title_txt=title_txt,data_label=False, \
1102
1106
  annotate=annotate,annotate_value=annotate, \
1103
1107
  mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
1104
- facecolor=facecolor)
1108
+ facecolor=facecolor,loc=loc1)
1105
1109
 
1106
1110
  #制表
1107
1111
  recommenddf=pd.DataFrame()
@@ -1155,7 +1159,8 @@ if __name__=='__main__':
1155
1159
 
1156
1160
  def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
1157
1161
  ret_type="Annual Ret%",RF=[0,0.02,0.05],regression_period=365, \
1158
- graph=True,axhline_value=0,axhline_label='',facecolor='whitesmoke', \
1162
+ graph=True,loc1='best', \
1163
+ axhline_value=0,axhline_label='',facecolor='whitesmoke', \
1159
1164
  printout=False,sortby='tpw_mean',trailing=7,trend_threshhold=0.01, \
1160
1165
  annotate=False,annotate_value=False, \
1161
1166
  mark_top=False,mark_bottom=False,mark_end=False, \
@@ -1244,7 +1249,7 @@ def compare_1ticker_1rar_1ret_mRF(ticker,start,end,rar='sharpe', \
1244
1249
  title_txt=title_txt,data_label=False, \
1245
1250
  annotate=annotate,annotate_value=annotate, \
1246
1251
  mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
1247
- facecolor=facecolor)
1252
+ facecolor=facecolor,loc=loc1)
1248
1253
 
1249
1254
  #制表
1250
1255
  recommenddf=pd.DataFrame()
@@ -1313,7 +1318,8 @@ def compare_rar_security(ticker,start,end,rar='sharpe', \
1313
1318
  ret_type="Annual Ret%", \
1314
1319
  RF=0, \
1315
1320
  regression_period=365, \
1316
- graph=True,axhline_value=0,axhline_label='',facecolor='whitesmoke', \
1321
+ graph=True,loc1='best', \
1322
+ axhline_value=0,axhline_label='',facecolor='whitesmoke', \
1317
1323
  printout=False,sortby='tpw_mean',trailing=7,trend_threshhold=0.05, \
1318
1324
  annotate=False,annotate_value=False, \
1319
1325
  mark_top=False,mark_bottom=False,mark_end=False, \
@@ -1343,7 +1349,8 @@ def compare_rar_security(ticker,start,end,rar='sharpe', \
1343
1349
  if rar_num ==1: #一个RAR
1344
1350
  df=compare_mticker_1rar(ticker=ticker,start=start,end=end,rar=rar, \
1345
1351
  ret_type=ret_type,RF=RF,regression_period=regression_period, \
1346
- graph=graph,axhline_value=axhline_value,axhline_label=axhline_label, \
1352
+ graph=graph,loc1=loc1, \
1353
+ axhline_value=axhline_value,axhline_label=axhline_label, \
1347
1354
  printout=printout, \
1348
1355
  sortby=sortby,trailing=trailing,trend_threshhold=trend_threshhold, \
1349
1356
  annotate=annotate,annotate_value=annotate, \
@@ -1356,7 +1363,8 @@ def compare_rar_security(ticker,start,end,rar='sharpe', \
1356
1363
  printout=True #否则无法运行descriptive_statistics2函数
1357
1364
  df=compare_mticker_mrar(ticker=ticker,start=start,end=end,rar=rar, \
1358
1365
  ret_type=ret_type,RF=RF,regression_period=regression_period, \
1359
- graph=graph,axhline_value=axhline_value,axhline_label=axhline_label, \
1366
+ graph=graph,loc1=loc1, \
1367
+ axhline_value=axhline_value,axhline_label=axhline_label, \
1360
1368
  printout=printout, \
1361
1369
  sortby=sortby,trailing=trailing,trend_threshhold=trend_threshhold, \
1362
1370
  annotate=annotate,annotate_value=annotate, \
@@ -1378,7 +1386,8 @@ def compare_rar_security(ticker,start,end,rar='sharpe', \
1378
1386
 
1379
1387
  df=compare_1ticker_mrar(ticker=ticker,start=start,end=end,rar=rar, \
1380
1388
  ret_type=ret_type,RF=RF,regression_period=regression_period, \
1381
- graph=graph,axhline_value=axhline_value,axhline_label=axhline_label, \
1389
+ graph=graph,loc1=loc1, \
1390
+ axhline_value=axhline_value,axhline_label=axhline_label, \
1382
1391
  printout=printout,facecolor=facecolor, \
1383
1392
  sortby=sortby,trailing=trailing,trend_threshhold=trend_threshhold, \
1384
1393
  annotate=annotate,annotate_value=annotate, \
@@ -1398,7 +1407,8 @@ def compare_rar_security(ticker,start,end,rar='sharpe', \
1398
1407
 
1399
1408
  df=compare_1ticker_1rar_mret(ticker=ticker,start=start,end=end,rar=rar, \
1400
1409
  ret_type=ret_type,RF=RF,regression_period=regression_period, \
1401
- graph=graph,axhline_value=axhline_value,axhline_label=axhline_label, \
1410
+ graph=graph,loc1=loc1, \
1411
+ axhline_value=axhline_value,axhline_label=axhline_label, \
1402
1412
  printout=printout, \
1403
1413
  sortby=sortby,trailing=trailing,trend_threshhold=trend_threshhold, \
1404
1414
  annotate=annotate,annotate_value=annotate, \
@@ -1416,7 +1426,8 @@ def compare_rar_security(ticker,start,end,rar='sharpe', \
1416
1426
 
1417
1427
  df=compare_1ticker_1rar_1ret_mRF(ticker=ticker,start=start,end=end,rar=rar, \
1418
1428
  ret_type=ret_type,RF=RF,regression_period=regression_period, \
1419
- graph=graph,axhline_value=axhline_value,axhline_label=axhline_label, \
1429
+ graph=graph,loc1=loc1, \
1430
+ axhline_value=axhline_value,axhline_label=axhline_label, \
1420
1431
  printout=printout,facecolor=facecolor, \
1421
1432
  sortby=sortby,trailing=trailing,trend_threshhold=trend_threshhold, \
1422
1433
  annotate=annotate,annotate_value=annotate, \
@@ -1431,7 +1442,8 @@ def compare_rar_security(ticker,start,end,rar='sharpe', \
1431
1442
  #情形5:1只证券,1个RAR,1个收益率类型,1个RF
1432
1443
  df=compare_1ticker_mrar(ticker=ticker,start=start,end=end,rar=rar, \
1433
1444
  ret_type=ret_type,RF=RF,regression_period=regression_period, \
1434
- graph=graph,axhline_value=axhline_value,axhline_label=axhline_label, \
1445
+ graph=graph,loc1=loc1, \
1446
+ axhline_value=axhline_value,axhline_label=axhline_label, \
1435
1447
  printout=printout,sortby=sortby, \
1436
1448
  trailing=trailing,trend_threshhold=trend_threshhold, \
1437
1449
  annotate=annotate,annotate_value=annotate, \
siat/security_prices.py CHANGED
@@ -309,7 +309,12 @@ def remove_timezone(pricedf):
309
309
  def remove_timezone_tmp(pricedf):
310
310
  """
311
311
  功能:去掉df索引中可能存在的时区信息,避免时区错误
312
- 注意:有问题,一直未搞定!!!
312
+ 注意:有问题,应该改用common中的df_index_timezone_remove函数
313
+ """
314
+ #去掉时区
315
+ pricedf2=df_index_timezone_remove(pricedf)
316
+ return pricedf2
317
+
313
318
  """
314
319
  if pricedf is None:
315
320
  return pricedf
@@ -319,9 +324,6 @@ def remove_timezone_tmp(pricedf):
319
324
 
320
325
  import pandas as pd
321
326
  pricedf['date']=pricedf['date_y4m2d2'].apply(lambda x: pd.to_datetime(x))
322
- """
323
- pricedf['date']=pricedf['date'].apply(lambda x: x.replace(tzinfo=None)) #去掉时区
324
- """
325
327
  pricedf2=pricedf.reset_index(drop=True)
326
328
  try:
327
329
  pricedf2=pricedf2.set_index('Date',drop=True)
@@ -331,7 +333,7 @@ def remove_timezone_tmp(pricedf):
331
333
  pricedf2.drop(['date_tz','date_y4m2d2'],axis=1,inplace=True)
332
334
 
333
335
  return pricedf2
334
-
336
+ """
335
337
 
336
338
  #==============================================================================
337
339
  if __name__=='__main__':
@@ -591,7 +593,10 @@ def get_price_stooq(ticker,start,end):
591
593
  else:
592
594
  #print(" Sorry, zero records found from stooq for",ticker,"from",start,'to',end)
593
595
  return None
594
-
596
+
597
+ #仍然无记录
598
+ if len(prices)==0:return None
599
+
595
600
  prices.sort_index(axis=0, ascending=True, inplace=True)
596
601
  #prices.dropna(inplace=True)
597
602
 
@@ -1238,7 +1243,10 @@ def get_prices_yahoo(ticker,start,end,retry_count=3,pause=1):
1238
1243
  if ptname == ticker: ptname=''
1239
1244
 
1240
1245
  print(" Successfully retrieved",len(p),"records for",ticker,ptname)
1241
-
1246
+
1247
+ #去掉时区
1248
+ p=df_index_timezone_remove(p)
1249
+
1242
1250
  return p
1243
1251
 
1244
1252
  if __name__=='__main__':
@@ -1327,6 +1335,9 @@ def get_prices_yf(ticker,start,end,threads=False):
1327
1335
  pass
1328
1336
  #print(" #Error(get_prices_yf):",ticker1,"not found or no prices in the period or inaccessible to yahoo")
1329
1337
 
1338
+ #去掉时区
1339
+ p=df_index_timezone_remove(p)
1340
+
1330
1341
  return p
1331
1342
 
1332
1343
  if __name__=='__main__':
@@ -1391,6 +1402,9 @@ def get_index_fred(ticker,start,end):
1391
1402
  print(" Successfully retrieved",num,"records for",ticker,ptname)
1392
1403
  else:
1393
1404
  print(" Sorry, no records retrieved for",ticker)
1405
+
1406
+ #去掉时区
1407
+ df=df_index_timezone_remove(df)
1394
1408
 
1395
1409
  return df
1396
1410
 
@@ -1761,6 +1775,9 @@ def calc_expanding_return(drdf0,basedate):
1761
1775
  日收益率数据集drdf。
1762
1776
  输出:期间累计收益率序列,按照日期升序排列。
1763
1777
  """
1778
+ #去掉时区
1779
+ drdf0=df_index_timezone_remove(drdf0)
1780
+
1764
1781
  import pandas as pd
1765
1782
  basedate_pd=pd.to_datetime(basedate)
1766
1783
  drdf=drdf0[drdf0.index >= basedate_pd]
siat/security_trend2.py CHANGED
@@ -428,6 +428,7 @@ def security_trend(ticker,indicator='Close', \
428
428
  df=compare_rar_security(ticker=tickers,start=fromdate,end=todate,rar=measures, \
429
429
  ret_type=ret_type,RF=RF,regression_period=regression_period, \
430
430
  graph=graph,axhline_value=0,axhline_label='', \
431
+ loc1=loc1, \
431
432
  printout=printout, \
432
433
  sortby=sortby,trailing=trailing,trend_threshhold=trend_threshhold, \
433
434
  annotate=annotate,annotate_value=annotate_value, \
siat/stock.py CHANGED
@@ -623,9 +623,15 @@ def security_indicator(ticker,indicator,fromdate,todate, \
623
623
  if len(pricedf) == 0:
624
624
  print(" #Error(security_indicator): zero record found for",ticker)
625
625
  return None
626
-
627
- # 检查是否存在满足给定日期的记录
626
+
627
+ # 去掉时区信息,避免日期时区冲突问题
628
+ pricedf=df_index_timezone_remove(pricedf)
629
+ """
628
630
  import pandas as pd
631
+ pricedf.index = pd.to_datetime(pricedf.index)
632
+ pricedf.index = pricedf.index.tz_localize(None)
633
+ """
634
+ # 检查是否存在满足给定日期的记录
629
635
  fromdate_pd=pd.to_datetime(fromdate)
630
636
  tmp_df=pricedf[pricedf.index >= fromdate_pd]
631
637
  if len(tmp_df)==0:
siat/stock_china.py CHANGED
@@ -676,7 +676,7 @@ def price_direction_knn(ticker,df,ndays=1,diff=0.01,min_score=0.9,votes=100,max_
676
676
  if not printout: return decision,today_close,today
677
677
 
678
678
  print(" Model voting for stock price after "+str(ndays)+" trading days: Higher("+str(zhang)+'), Lower('+str(die)+')')
679
- print(" "+ticker_name(ticker)+': previously closed '+str(known_close)+' @ '+str(known_day))
679
+ print(" "+ticker_name(ticker,'stock')+': previously closed '+str(known_close)+' @ '+str(known_day))
680
680
 
681
681
  ndate=date_adjust(known_day,adjust=ndays)
682
682
  print(" Prediction to close at",decision_text,"price trend ("+decision+') @',ndate)
@@ -726,7 +726,7 @@ def forecast_direction_knn(ticker,ndays=1,diff=0.01,min_score=0.9,votes=100,max_
726
726
  max_RS=max_RS)
727
727
  decisionlist=decisionlist+[decision]
728
728
 
729
- print("\nStock information:",ticker_name(ticker),'\b, closed',known_close,'@',known_day)
729
+ print("\nStock information:",ticker_name(ticker,'stock'),'\b, closed',known_close,'@',known_day)
730
730
  for nd in list(range(1,ndays+1)):
731
731
  ndate=date_adjust(known_day, adjust=nd)
732
732
  print("Forecasting stock close price trend on",ndate,end=': ')
@@ -952,7 +952,7 @@ def price_price_knn(ticker,df,ndays=1,max_neighbours=10,max_RS=20,printout=True)
952
952
  if not printout: return decision,decision_score,today_close,today
953
953
 
954
954
  print(" Model poll for stock price after "+str(ndays)+" trading days:",decision)
955
- print(" Last close price: "+ticker_name(ticker)+', closed '+str(known_close)+', '+str(known_day))
955
+ print(" Last close price: "+ticker_name(ticker,'stock')+', closed '+str(known_close)+', '+str(known_day))
956
956
 
957
957
  ndate=date_adjust(known_day,adjust=ndays)
958
958
 
@@ -1009,7 +1009,7 @@ def forecast_price_knn(ticker,ndays=1,max_neighbours=10,max_RS=20,end='latest'):
1009
1009
  decisionlist=decisionlist+[decision]
1010
1010
  confidencelist=confidencelist+[confidence]
1011
1011
 
1012
- print("\nStock information:",ticker_name(ticker),'\b, closed',known_close,'@',known_day)
1012
+ print("\nStock information:",ticker_name(ticker,'stock'),'\b, closed',known_close,'@',known_day)
1013
1013
 
1014
1014
  for nd in list(range(1,ndays+1)):
1015
1015
  ndate=date_adjust(known_day, adjust=nd)
@@ -1237,7 +1237,7 @@ def stock_profile_china(ticker,category='profile', \
1237
1237
  dftmp15=dftmp14.T
1238
1238
  dftmp15.reset_index(inplace=True)
1239
1239
 
1240
- titletxt=ticker_name(ticker)
1240
+ titletxt=ticker_name(ticker,'stock')
1241
1241
  """
1242
1242
  if prettytab:
1243
1243
  pandas2prettytable(dftmp15,titletxt,firstColSpecial=False,leftColAlign='l',otherColAlign='l',tabborder=tabborder)
@@ -1313,7 +1313,7 @@ def stock_profile_china(ticker,category='profile', \
1313
1313
  cols2=['分类方向','分类','营业收入-同比增长','营业成本-同比增长','毛利率','毛利率-同比增长']
1314
1314
 
1315
1315
  dftmp1=dftmp[cols1]
1316
- titletxt1=ticker_name(ticker)+':主营业务构成,'+period
1316
+ titletxt1=ticker_name(ticker,'stock')+':主营业务构成,'+period
1317
1317
  """
1318
1318
  if prettytab:
1319
1319
  pandas2prettytable(dftmp1,titletxt1,firstColSpecial=True,leftColAlign='l',otherColAlign='c',tabborder=tabborder)
@@ -1331,7 +1331,7 @@ def stock_profile_china(ticker,category='profile', \
1331
1331
  data_font_size=data_font_size)
1332
1332
 
1333
1333
  dftmp2=dftmp[cols2]
1334
- titletxt2=ticker_name(ticker)+':主营业务增长,'+period
1334
+ titletxt2=ticker_name(ticker,'stock')+':主营业务增长,'+period
1335
1335
  """
1336
1336
  if prettytab:
1337
1337
  pandas2prettytable(dftmp2,titletxt2,firstColSpecial=True,leftColAlign='l',otherColAlign='c',tabborder=tabborder)
@@ -1392,7 +1392,7 @@ def stock_profile_china(ticker,category='profile', \
1392
1392
  #if category in ['dividend','split']:
1393
1393
  if any(s in category for s in ['dividend','split']):
1394
1394
  # 分红
1395
- titletxt=ticker_name(ticker)+':分红历史'
1395
+ titletxt=ticker_name(ticker,'stock')+':分红历史'
1396
1396
  try:
1397
1397
  #df3=ak.stock_dividents_cninfo(symbol=ticker1)
1398
1398
  df3=ak.stock_history_dividend_detail(symbol=ticker1, indicator="分红")
@@ -1416,7 +1416,7 @@ def stock_profile_china(ticker,category='profile', \
1416
1416
  newcols=['公告日期','送股','转增','派息','股权登记日','除权除息日']
1417
1417
  dftmp3=dftmp[newcols]
1418
1418
 
1419
- titletxt=ticker_name(ticker)+':分红历史'
1419
+ titletxt=ticker_name(ticker,'stock')+':分红历史'
1420
1420
  """
1421
1421
  if prettytab:
1422
1422
  pandas2prettytable(dftmp3,titletxt,firstColSpecial=False,leftColAlign='l',otherColAlign='c',tabborder=tabborder)
@@ -1434,7 +1434,7 @@ def stock_profile_china(ticker,category='profile', \
1434
1434
  data_font_size=data_font_size)
1435
1435
 
1436
1436
  # 配股
1437
- titletxt=ticker_name(ticker)+':配股历史'
1437
+ titletxt=ticker_name(ticker,'stock')+':配股历史'
1438
1438
  try:
1439
1439
  df3p=ak.stock_history_dividend_detail(symbol=ticker1, indicator="配股")
1440
1440
  except:
@@ -1525,7 +1525,7 @@ def stock_profile_china(ticker,category='profile', \
1525
1525
  enddate=str(dftmp.head(1)['截至日期'][0])
1526
1526
  shareholder_num=dftmp.head(1)['股东总数'][0]
1527
1527
  avg_shares=dftmp.head(1)['平均持股数'][0]
1528
- titletxt=ticker_name(ticker)+':十大股东(截至'+str(enddate)+',股东总数'+str(int(shareholder_num))+',平均持股数'+str(int(avg_shares))+')'
1528
+ titletxt=ticker_name(ticker,'stock')+':十大股东(截至'+str(enddate)+',股东总数'+str(int(shareholder_num))+',平均持股数'+str(int(avg_shares))+')'
1529
1529
 
1530
1530
  dftmp.drop(['截至日期','公告日期','股东说明','股东总数','平均持股数'],axis=1,inplace=True)
1531
1531
 
@@ -1595,7 +1595,7 @@ def stock_profile_china(ticker,category='profile', \
1595
1595
  mv_min=round(dftmp2['total_mv(yi)'].min(),1)
1596
1596
  mv_txt="总市值(亿元):"+str(mv_min)+'-'+str(mv_max)+",均值"+str(mv_mean)+",中位数"+str(mv_median)
1597
1597
 
1598
- titletxt=ticker_name(ticker)+':估值与市值'
1598
+ titletxt=ticker_name(ticker,'stock')+':估值与市值'
1599
1599
  import datetime as dt
1600
1600
  today=dt.date.today()
1601
1601
  footnote3="数据来源:乐咕乐股,"+str(today)
@@ -1627,7 +1627,7 @@ def stock_profile_china(ticker,category='profile', \
1627
1627
  df2=dftmp2,ticker2='',colname2='total_mv(yi)',label2='总市值(亿元)', \
1628
1628
  ylabeltxt='',titletxt=titletxt,footnote=footnote, \
1629
1629
  twinx=True, \
1630
- resample_freq='D',loc1='best',loc2='best', \
1630
+ resample_freq='D',loc1=loc1,loc2=loc2, \
1631
1631
  color1='red',color2='blue',facecolor='whitesmoke')
1632
1632
 
1633
1633
  # 计算市净率的均值,中位数、最大最小值
@@ -1653,7 +1653,7 @@ def stock_profile_china(ticker,category='profile', \
1653
1653
  df2=dftmp2,ticker2='',colname2='total_mv(yi)',label2='总市值(亿元)', \
1654
1654
  ylabeltxt='',titletxt=titletxt,footnote=footnote, \
1655
1655
  twinx=True, \
1656
- resample_freq='D',loc1='best',loc2='best', \
1656
+ resample_freq='D',loc1=loc1,loc2=loc2, \
1657
1657
  color1='red',color2='blue',facecolor='whitesmoke')
1658
1658
 
1659
1659
  # 计算市销率的均值,中位数、最大最小值
@@ -1679,7 +1679,7 @@ def stock_profile_china(ticker,category='profile', \
1679
1679
  df2=dftmp2,ticker2='',colname2='total_mv(yi)',label2='总市值(亿元)', \
1680
1680
  ylabeltxt='',titletxt=titletxt,footnote=footnote, \
1681
1681
  twinx=True, \
1682
- resample_freq='D',loc1='best',loc2='best', \
1682
+ resample_freq='D',loc1=loc1,loc2=loc2, \
1683
1683
  color1='red',color2='blue',facecolor='whitesmoke')
1684
1684
 
1685
1685
  # 计算股息率的均值,中位数、最大最小值
@@ -1706,7 +1706,7 @@ def stock_profile_china(ticker,category='profile', \
1706
1706
  df2=dftmp2,ticker2='',colname2='total_mv(yi)',label2='总市值(亿元)', \
1707
1707
  ylabeltxt='',titletxt=titletxt,footnote=footnote, \
1708
1708
  twinx=True, \
1709
- resample_freq='D',loc1='best',loc2='best', \
1709
+ resample_freq='D',loc1=loc1,loc2=loc2, \
1710
1710
  color1='red',color2='blue',facecolor='whitesmoke')
1711
1711
 
1712
1712
 
@@ -1732,7 +1732,7 @@ def stock_profile_china(ticker,category='profile', \
1732
1732
  if numOfQ > 8:
1733
1733
  numOfQ=8
1734
1734
 
1735
- titletxt=ticker_name(ticker)+":主要财务信息,每股指标(元)"
1735
+ titletxt=ticker_name(ticker,'stock')+":主要财务信息,每股指标(元)"
1736
1736
  df7['加权每股收益']=df7['加权每股收益(元)']
1737
1737
  df7['每股收益_调整后']=df7['每股收益_调整后(元)']
1738
1738
  df7['扣非后每股收益']=df7['扣除非经常性损益后的每股收益(元)']
@@ -1783,7 +1783,7 @@ def stock_profile_china(ticker,category='profile', \
1783
1783
  为了准确评估每股收益,就必须用稀释每股收益。
1784
1784
  """
1785
1785
 
1786
- titletxt=ticker_name(ticker)+":主要财务信息,利润与成本"
1786
+ titletxt=ticker_name(ticker,'stock')+":主要财务信息,利润与成本"
1787
1787
  df7['扣非后净利润(元)']=df7['扣除非经常性损益后的净利润(元)']
1788
1788
  colList=['日期','财报类别','总资产利润率(%)','主营业务利润率(%)','总资产净利润率(%)','成本费用利润率(%)', \
1789
1789
  '营业利润率(%)','主营业务成本率(%)','销售净利率(%)', '销售毛利率(%)','三项费用比重','非主营比重', \
@@ -1832,7 +1832,7 @@ def stock_profile_china(ticker,category='profile', \
1832
1832
  成本费用利润率=利润总额/成本费用总额(即成本总额+费用总额)
1833
1833
  """
1834
1834
 
1835
- titletxt=ticker_name(ticker)+":主要财务信息,报酬与收益"
1835
+ titletxt=ticker_name(ticker,'stock')+":主要财务信息,报酬与收益"
1836
1836
  colList=['日期','财报类别', '股本报酬率(%)','净资产报酬率(%)','资产报酬率(%)', '股息发放率(%)','投资收益率(%)', \
1837
1837
  '净资产收益率(%)','加权净资产收益率(%)']
1838
1838
  dftmp=df7[colList].head(numOfQ)
@@ -1876,7 +1876,7 @@ def stock_profile_china(ticker,category='profile', \
1876
1876
  股本报酬率/回报率=净利润/期初期末总股本的均值。股本是实收资本,而股权是股东权益。
1877
1877
  """
1878
1878
 
1879
- titletxt=ticker_name(ticker)+":主要财务信息,增长率"
1879
+ titletxt=ticker_name(ticker,'stock')+":主要财务信息,增长率"
1880
1880
  colList=['日期','财报类别','主营业务收入增长率(%)','净利润增长率(%)','总资产增长率(%)','净资产增长率(%)']
1881
1881
  dftmp=df7[colList].head(numOfQ)
1882
1882
 
@@ -1909,7 +1909,7 @@ def stock_profile_china(ticker,category='profile', \
1909
1909
  data_font_size=data_font_size)
1910
1910
 
1911
1911
 
1912
- titletxt=ticker_name(ticker)+":主要财务信息,资产负债分析"
1912
+ titletxt=ticker_name(ticker,'stock')+":主要财务信息,资产负债分析"
1913
1913
  colList=['日期','财报类别','流动比率','速动比率','现金比率(%)','利息支付倍数','长期债务与营运资金比率(%)', \
1914
1914
  '股东权益比率(%)','长期负债比率(%)','股东权益与固定资产比率(%)','负债与所有者权益比率(%)', \
1915
1915
  '长期资产与长期资金比率(%)','资本化比率(%)','固定资产净值率(%)','资本固定化比率(%)', \
@@ -1960,7 +1960,7 @@ def stock_profile_china(ticker,category='profile', \
1960
1960
 
1961
1961
  """
1962
1962
 
1963
- titletxt=ticker_name(ticker)+":主要财务信息,现金流量指标(均为%)"
1963
+ titletxt=ticker_name(ticker,'stock')+":主要财务信息,现金流量指标(均为%)"
1964
1964
  colList=['日期','财报类别','经营现金净流量对销售收入比率(%)','资产的经营现金流量回报率(%)','经营现金净流量与净利润的比率(%)', \
1965
1965
  '经营现金净流量对负债比率(%)','现金流量比率(%)']
1966
1966
  dftmp=df7[colList].head(numOfQ)
siat/translate.py CHANGED
@@ -1459,6 +1459,7 @@ def codetranslate0(code):
1459
1459
  # 找到目录C:\Users\Peter\anaconda3\Lib\site-packages\pandas_datareader\
1460
1460
  # 打开stooq.py中的函数def _get_params(self, symbol, country="US")
1461
1461
  # 在函数列表中加入一项"m"即可避免自动在ticker加上后缀.us的问题
1462
+ # 或者使用fix_package()函数自动修正
1462
1463
  ['CPIYKR.M','韩国CPI(同比)'],
1463
1464
  ['CPIYUK.M','英国CPI(同比)'],['CPIYDE.M','德国CPI(同比)'],
1464
1465
  ['CPIYJP.M','日本CPI(同比)'],['CPIYCN.M','中国CPI(同比)'],
@@ -1575,72 +1576,141 @@ def codetranslate0(code):
1575
1576
  ['EXPRCA.M','加拿大出口增速%'],['IMPRCA.M','加拿大进口增速%'],
1576
1577
  ['EXPRMX.M','墨西哥出口增速%'],['IMPRMX.M','墨西哥进口增速%'],
1577
1578
 
1579
+ #雅虎汇率
1580
+ ['CNYUSD=X','CCY人民币兑美元汇率'],['CNY=X','CCY美元兑人民币汇率'],
1581
+ ['JPYUSD=X','CCY日元兑美元汇率'],['JPY=X','CCY美元兑日元汇率'],
1582
+ ['KRWUSD=X','CCY韩元兑美元汇率'],['KRW=X','CCY美元兑韩元汇率'],
1583
+ ['HKDUSD=X','CCY港币兑美元汇率'],['HKD=X','CCY美元兑港币汇率'],
1584
+ ['TWDUSD=X','CCY新台币兑美元汇率'],['TWD=X','CCY美元兑新台币汇率'],
1585
+ ['PHPUSD=X','CCY菲律宾比索兑美元汇率'],['PHP=X','CCY比索美元兑菲律宾汇率'],
1586
+ ['IDRUSD=X','CCY印尼盾兑美元汇率'],['IDR=X','CCY美元兑印尼盾汇率'],
1587
+ ['THBUSD=X','CCY泰铢兑美元汇率'],['THB=X','CCY美元兑泰铢汇率'],
1588
+ ['MYRUSD=X','CCY马来西亚林吉特兑美元汇率'],['MYR=X','CCY美元兑马来西亚林吉特汇率'],
1589
+ ['SGDUSD=X','CCY新加坡币兑美元汇率'],['SGD=X','CCY美元兑新加坡币汇率'],
1590
+ ['INRUSD=X','CCY印度卢比兑美元汇率'],['INR=X','CCY美元兑印度卢比汇率'],
1591
+ ['AUDUSD=X','CCY澳大利亚元兑美元汇率'],['AUD=X','CCY美元兑澳大利亚元汇率'],
1592
+ ['NZDUSD=X','CCY新西兰元兑美元汇率'],['NZD=X','CCY美元兑新西兰元汇率'],
1593
+ ['TRYUSD=X','CCY土耳其里拉兑美元汇率'],['TRY=X','CCY美元兑土耳其里拉汇率'],
1594
+ ['ILSUSD=X','CCY新谢克尔兑美元汇率'],['ILS=X','CCY美元兑新谢克尔汇率'],
1595
+ ['VNDUSD=X','CCY越南盾兑美元汇率'],['VND=X','CCY美元兑越南盾汇率'],
1596
+ ['MOPUSD=X','CCY澳门元兑美元汇率'],['MOP=X','CCY美元兑澳门元汇率'],
1597
+ ['LAKUSD=X','CCY老挝基普兑美元汇率'],['LAK=X','CCY美元兑老挝基普汇率'],
1598
+ ['KHRUSD=X','CCY柬埔寨瑞尔兑美元汇率'],['KHR=X','CCY美元兑柬埔寨瑞尔汇率'],
1599
+ ['MMKUSD=X','CCY缅甸元兑美元汇率'],['MMK=X','CCY美元兑缅甸元汇率'],
1600
+ ['LKRUSD=X','CCY斯里兰卡卢比兑美元汇率'],['LKR=X','CCY美元兑斯里兰卡卢比汇率'],
1601
+ ['PKRUSD=X','CCY巴基斯坦卢比兑美元汇率'],['PKR=X','CCY美元兑巴基斯坦卢比汇率'],
1602
+ ['NPRUSD=X','CCY尼泊尔卢比兑美元汇率'],['NPR=X','CCY美元兑尼泊尔卢比汇率'],
1603
+ ['AFNUSD=X','CCY阿富汗尼兑美元汇率'],['AFN=X','CCY美元兑阿富汗尼汇率'],
1604
+ ['IRRUSD=X','CCY伊朗里亚尔兑美元汇率'],['IRR=X','CCY美元兑伊朗里亚尔汇率'],
1605
+ ['IQDUSD=X','CCY伊拉克第纳尔兑美元汇率'],['IQD=X','CCY美元兑伊拉克第纳尔汇率'],
1606
+ ['SYPUSD=X','CCY叙利亚镑兑美元汇率'],['SYP=X','CCY美元兑叙利亚镑汇率'],
1607
+ ['JODUSD=X','CCY约旦第纳尔兑美元汇率'],['JOD=X','CCY美元兑约旦第纳尔汇率'],
1608
+ ['SARUSD=X','CCY沙特亚尔兑美元汇率'],['SAR=X','CCY美元兑沙特亚尔汇率'],
1609
+ ['KWDUSD=X','CCY科威特第纳尔兑美元汇率'],['KWD=X','CCY美元兑科威特第纳尔汇率'],
1610
+ ['LBPUSD=X','CCY黎巴嫩镑兑美元汇率'],['LBP=X','CCY美元兑黎巴嫩镑汇率'],
1611
+ ['CADUSD=X','CCY加拿大元兑美元汇率'],['CAD=X','CCY美元兑加拿大元汇率'],
1612
+ ['MXNUSD=X','CCY墨西哥比索兑美元汇率'],['MXN=X','CCY美元兑墨西哥比索汇率'],
1613
+ ['ARSUSD=X','CCY阿根廷比索兑美元汇率'],['ARS=X','CCY美元兑阿根廷比索汇率'],
1614
+ ['CLPUSD=X','CCY智利比索兑美元汇率'],['CLP=X','CCY美元兑智利比索汇率'],
1615
+ ['BRLUSD=X','CCY巴西雷亚尔兑美元汇率'],['BRL=X','CCY美元兑巴西雷亚尔汇率'],
1616
+ ['EURUSD=X','CCY欧元兑美元汇率'],['EUR=X','CCY美元兑欧元汇率'],
1617
+ ['GBPUSD=X','CCY英镑兑美元汇率'],['GBP=X','CCY美元兑英镑汇率'],
1618
+ ['CHFUSD=X','CCY瑞士法郎兑美元汇率'],['CHF=X','CCY美元兑瑞士法郎汇率'],
1619
+ ['HUFUSD=X','CCY匈牙利福林兑美元汇率'],['HUF=X','CCY美元兑匈牙利福林汇率'],
1620
+ ['SEKUSD=X','CCY瑞典克朗兑美元汇率'],['SEK=X','CCY美元兑瑞典克朗汇率'],
1621
+ ['DKKUSD=X','CCY丹麦克朗兑美元汇率'],['DKK=X','CCY美元兑丹麦克朗汇率'],
1622
+ ['NOKUSD=X','CCY挪威克朗兑美元汇率'],['NOK=X','CCY美元兑挪威克朗汇率'],
1623
+ ['RUBUSD=X','CCY俄罗斯卢布兑美元汇率'],['RUB=X','CCY美元兑俄罗斯卢布汇率'],
1624
+ ['PLNUSD=X','CCY波兰兹罗提兑美元汇率'],['PLN=X','CCY美元兑波兰兹罗提汇率'],
1625
+ ['RONUSD=X','CCY罗马尼亚列伊兑美元汇率'],['RON=X','CCY美元兑罗马尼亚列伊汇率'],
1626
+ ['BGNUSD=X','CCY保加利亚列弗兑美元汇率'],['BGN=X','CCY美元兑保加利亚列弗汇率'],
1627
+ ['ZARUSD=X','CCY南非兰特兑美元汇率'],['ZAR=X','CCY美元兑南非兰特汇率'],
1628
+ ['EGPUSD=X','CCY埃及镑兑美元汇率'],['EGP=X','CCY美元兑埃及镑汇率'],
1629
+ ['MADUSD=X','CCY摩洛哥迪拉姆兑美元汇率'],
1630
+ ['NGNUSD=X','CCY尼日利亚奈拉兑美元汇率'],
1631
+ ['XOFUSD=X','CCY西非法郎兑美元汇率'],
1632
+ ['XAFUSD=X','CCY中非法郎兑美元汇率'],
1633
+ ['XCUUSD=X','CCY安巴东加元兑美元汇率'],
1634
+ ['XDRUSD=X','CCYIMF特别提款权兑美元汇率'],['XDR=X','CCY美元兑IMF特别提款权汇率'],
1635
+
1636
+ ['USDCNY','美元兑人民币汇率'],['CNYUSD','人民币兑美元汇率'],
1637
+ ['AUDCNY','澳大利亚元兑人民币汇率'],['CNYAUD','人民币兑澳大利亚元汇率'],
1638
+ ['JPYCNY','日元兑人民币汇率'],['CNYJPY','人民币兑日元汇率'],
1639
+ ['USDJPY','美元兑日元汇率'],['JPYUSD','日元兑美元汇率'],
1640
+ ['SGDCNY','新加坡元兑人民币汇率'],['CNYSGD','人民币兑新加坡元汇率'],
1641
+ ['SGDMYR','新加坡元兑马来西亚林吉特汇率'],['MYRSGD','马来西亚林吉特兑新加坡元汇率'],
1642
+ ['EURCNY','欧元兑人民币汇率'],['CNYEUR','人民币兑欧元汇率'],
1643
+ ['GBPCNY','英镑兑人民币汇率'],['CNYGBP','人民币兑英镑汇率'],
1644
+ ['KRWCNY','韩元兑人民币汇率'],['CNYKRW','人民币兑韩元汇率'],
1645
+ ['HKDCNY','港币兑人民币汇率'],['CNYHKD','人民币兑港币汇率'],
1646
+ ['CADCNY','加拿大元兑人民币汇率'],['CNYCAD','人民币兑加拿大元汇率'],
1647
+ ['INRCNY','印度卢比兑人民币汇率'],['CNYINR','人民币兑印度卢比汇率'],
1648
+ ['RUBCNY','俄罗斯卢布兑人民币汇率'],['CNYRUB','人民币兑俄罗斯卢布汇率'],
1649
+ ['MOPCNY','澳门元兑人民币汇率'],['CNYMOP','人民币兑澳门元汇率'],
1650
+
1651
+ ['AUDJPY','澳大利亚元兑日元汇率'],
1652
+
1653
+ ['AUDUSD','澳大利亚元兑美元汇率'],
1654
+ ['KRWUSD','韩元兑美元汇率'],
1655
+ ['HKDUSD','港币兑美元汇率'],
1656
+ ['TWDUSD','新台币兑美元汇率'],
1657
+ ['PHPUSD','菲律宾比索兑美元汇率'],
1658
+ ['IDRUSD','印尼盾兑美元汇率'],
1659
+ ['THBUSD','泰铢兑美元汇率'],
1660
+ ['MYRUSD','马来西亚林吉特兑美元汇率'],
1661
+ ['SGDUSD','新加坡币兑美元汇率'],
1662
+ ['INRUSD','印度卢比兑美元汇率'],
1663
+ ['AUDUSD','澳大利亚元兑美元汇率'],
1664
+ ['NZDUSD','新西兰元兑美元汇率'],
1665
+ ['TRYUSD','土耳其里拉兑美元汇率'],
1666
+ ['ILSUSD','新谢克尔兑美元汇率'],
1667
+ ['CADUSD','加拿大元兑美元汇率'],
1668
+ ['MXNUSD','墨西哥比索兑美元汇率'],
1669
+ ['ARSUSD','阿根廷比索兑美元汇率'],
1670
+ ['CLPUSD','智利比索兑美元汇率'],
1671
+ ['BRLUSD','巴西雷亚尔兑美元汇率'],
1672
+ ['EURUSD','欧元兑美元汇率'],
1673
+ ['GBPUSD','英镑兑美元汇率'],
1674
+ ['CHFUSD','瑞士法郎兑美元汇率'],
1675
+ ['HUFUSD','匈牙利福林兑美元汇率'],
1676
+ ['SEKUSD','瑞典克朗兑美元汇率'],
1677
+ ['DKKUSD','丹麦克朗兑美元汇率'],
1678
+ ['NOKUSD','挪威克朗兑美元汇率'],
1679
+ ['RUBUSD','俄罗斯卢布兑美元汇率'],
1680
+ ['PLNUSD','波兰兹罗提兑美元汇率'],
1681
+ ['RONUSD','罗马尼亚列伊兑美元汇率'],
1682
+ ['BGNUSD','保加利亚列弗兑美元汇率'],
1683
+ ['ZARUSD','南非兰特兑美元汇率'],
1684
+ ['EGPUSD','埃及镑兑美元汇率'],
1685
+ ['XDRUSD','IMF特别提款权兑美元汇率'],
1578
1686
 
1579
- ['CNYUSD=X','人民币/美元汇率'],['CNYUSD','人民币/美元汇率'],
1580
- ['JPYUSD=X','日元/美元汇率'],['JPYUSD','日元/美元汇率'],
1581
- ['KRWUSD=X','韩元/美元汇率'],['KRWUSD','韩元/美元汇率'],
1582
- ['HKDUSD=X','港币/美元汇率'],['HKDUSD','港币/美元汇率'],
1583
- ['TWDUSD=X','新台币/美元汇率'],['TWDUSD','新台币/美元汇率'],
1584
- ['PHPUSD=X','菲律宾比索/美元汇率'],['PHPUSD','菲律宾比索/美元汇率'],
1585
- ['IDRUSD=X','印尼盾/美元汇率'],['IDRUSD','印尼盾/美元汇率'],
1586
- ['THBUSD=X','泰铢/美元汇率'],['THBUSD','泰铢/美元汇率'],
1587
- ['MYRUSD=X','马来西亚林吉特/美元汇率'],['MYRUSD','马来西亚林吉特/美元汇率'],
1588
- ['SGDUSD=X','新加坡币/美元汇率'],['SGDUSD','新加坡币/美元汇率'],
1589
- ['INRUSD=X','印度卢比/美元汇率'],['INRUSD','印度卢比/美元汇率'],
1590
- ['AUDUSD=X','澳大利亚元/美元汇率'],['AUDUSD','澳大利亚元/美元汇率'],
1591
- ['NZDUSD=X','新西兰元/美元汇率'],['NZDUSD','新西兰元/美元汇率'],
1592
- ['TRYUSD=X','土耳其里拉/美元汇率'],['TRYUSD','土耳其里拉/美元汇率'],
1593
- ['ILSUSD=X','新谢克尔/美元汇率'],['ILSUSD','新谢克尔/美元汇率'],
1594
- ['VNDUSD=X','越南盾/美元汇率'],
1595
- ['MOPUSD=X','澳门元/美元汇率'],
1596
- ['LAKUSD=X','老挝基普/美元汇率'],
1597
- ['KHRUSD=X','柬埔寨瑞尔/美元汇率'],
1598
- ['MMKUSD=X','缅甸元/美元汇率'],
1599
- ['LKRUSD=X','斯里兰卡卢比/美元汇率'],
1600
- ['PKRUSD=X','巴基斯坦卢比/美元汇率'],
1601
- ['NPRUSD=X','尼泊尔卢比/美元汇率'],
1602
- ['AFNUSD=X','阿富汗尼/美元汇率'],
1603
- ['IRRUSD=X','伊朗里亚尔/美元汇率'],
1604
- ['IQDUSD=X','伊拉克第纳尔/美元汇率'],
1605
- ['SYPUSD=X','叙利亚镑/美元汇率'],
1606
- ['JODUSD=X','约旦第纳尔/美元汇率'],
1607
- ['SARUSD=X','沙特亚尔/美元汇率'],
1608
- ['KWDUSD=X','科威特第纳尔/美元汇率'],
1609
- ['LBPUSD=X','黎巴嫩镑/美元汇率'],
1610
-
1611
- ['CADUSD=X','加拿大元/美元汇率'],['CADUSD','加拿大元/美元汇率'],
1612
1687
  ['^NYICDX','ICE美元指数'],['DX-Y.NYB','ICE美元指数'],
1613
- ['MXNUSD=X','墨西哥比索/美元汇率'],['MXNUSD','墨西哥比索/美元汇率'],
1614
- ['ARSUSD=X','阿根廷比索/美元汇率'],['ARSUSD','阿根廷比索/美元汇率'],
1615
- ['CLPUSD=X','智利比索/美元汇率'],['CLPUSD','智利比索/美元汇率'],
1616
- ['BRLUSD=X','巴西雷亚尔/美元汇率'],['BRLUSD','巴西雷亚尔/美元汇率'],
1617
-
1618
- ['INRTUS.M','美联储基准利率'],['USDCNY','美元/人民币汇率'],
1619
- ['AUDCNY','澳大利亚元/人民币汇率'],['JPYCNY','日元/人民币汇率'],
1620
- ['USDJPY','美元/日元汇率'],['AUDJPY','澳大利亚元/日元汇率'],
1621
-
1622
1688
  ['EUR_I','STOOQ欧元指数'],
1623
- ['EURUSD=X','欧元/美元汇率'],['EURUSD','欧元/美元汇率'],
1624
- ['GBPUSD=X','英镑/美元汇率'],['GBPUSD','英镑/美元汇率'],
1625
- ['CHFUSD=X','瑞士法郎/美元汇率'],['CHFUSD','瑞士法郎/美元汇率'],
1626
- ['HUFUSD=X','匈牙利福林/美元汇率'],['HUFUSD','匈牙利福林/美元汇率'],
1627
- ['SEKUSD=X','瑞典克朗/美元汇率'],['SEKUSD','瑞典克朗/美元汇率'],
1628
- ['DKKUSD=X','丹麦克朗/美元汇率'],['DKKUSD','丹麦克朗/美元汇率'],
1629
- ['NOKUSD=X','挪威克朗/美元汇率'],['NOKUSD','挪威克朗/美元汇率'],
1630
- ['RUBUSD=X','俄罗斯卢布/美元汇率'],['RUBUSD','俄罗斯卢布/美元'],
1631
- ['PLNUSD=X','波兰兹罗提/美元汇率'],['PLNUSD','波兰兹罗提/美元'],
1632
- ['RONUSD=X','罗马尼亚列伊/美元汇率'],['RONUSD','罗马尼亚列伊/美元汇率'],
1633
- ['BGNUSD=X','保加利亚列弗/美元汇率'],['BGNUSD','保加利亚列弗/美元汇率'],
1634
-
1635
- ['ZARUSD=X','南非兰特/美元汇率'],['ZARUSD','南非兰特/美元汇率'],
1636
- ['EGPUSD=X','埃及镑/美元汇率'],['EGPUSD','埃及镑/美元汇率'],
1637
- ['MADUSD=X','摩洛哥迪拉姆/美元汇率'],
1638
- ['NGNUSD=X','尼日利亚奈拉/美元汇率'],
1639
-
1640
- ['XOFUSD=X','西非法郎/美元汇率'],
1641
- ['XAFUSD=X','中非法郎/美元汇率'],
1642
- ['XCUUSD=X','安巴东加元/美元汇率'],
1643
- ['XDRUSD=X','IMF特别提款权/美元汇率'],['XDRUSD','IMF特别提款权/美元汇率'],
1689
+
1690
+ #经济体基准利率
1691
+ ['INRTAU.M','澳大利亚基准利率'],
1692
+ ['INRTBR.M','巴西基准利率'],
1693
+ ['INRTCZ.M','捷克基准利率'],
1694
+ ['INRTCA.M','加拿大基准利率'],
1695
+ ['INRTCH.M','瑞士基准利率'],
1696
+ ['INRTEU.M','欧元区基准利率'],
1697
+ ['INRTHU.M','匈牙利基准利率'],
1698
+ ['INRTIN.M','印度基准利率'],
1699
+ ['INRTIS.M','冰岛基准利率'],
1700
+ ['INRTJP.M','日本基准利率'],
1701
+ ['INRTKR.M','韩国基准利率'],
1702
+ ['INRTMX.M','墨西哥基准利率'],
1703
+ ['INRTMY.M','马来西亚基准利率'],
1704
+ ['INRTNO.M','挪威基准利率'],
1705
+ ['INRTNZ.M','新西兰基准利率'],
1706
+ ['INRTPL.M','波兰基准利率'],
1707
+ ['INRTPH.M','菲律宾基准利率'],
1708
+ ['INRTRO.M','罗马尼亚基准利率'],
1709
+ ['INRTSE.M','瑞典基准利率'],
1710
+ ['INRTTR.M','土耳其基准利率'],
1711
+ ['INRTUS.M','美联储基准利率'],
1712
+ ['INRTUK.M','英国基准利率'],
1713
+ ['INRTZA.M','南非基准利率'],
1644
1714
 
1645
1715
 
1646
1716
  ], columns=['code','codename'])
@@ -3186,6 +3256,10 @@ def ticker1_name(ticker,ticker_type='auto'):
3186
3256
  #查找证券名称文件:优先股票
3187
3257
  if tt in ['stock']:
3188
3258
  df1=file_position(file='stock_info.pickle',package='siat',mode='read')
3259
+
3260
+ #港股
3261
+ if '.HK' in symbol and len(symbol)==8: symbol=symbol[1:]
3262
+
3189
3263
  try:
3190
3264
  tname=df1[df1['SYMBOL']==symbol]['CNAME'].values[0]
3191
3265
  except: pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siat
3
- Version: 3.0.41
3
+ Version: 3.0.43
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
@@ -17,7 +17,7 @@ siat/capm_beta.py,sha256=cxXdRVBQBllhbfz1LeTJAIWvyRYhW54nhtNUXv4HwS0,29063
17
17
  siat/capm_beta2.py,sha256=hta-X1iWPjNbG1YYIVlQF-YvKA8An3KuEyLmUEZ3hH8,25562
18
18
  siat/capm_beta_test.py,sha256=ImR0c5mc4hIl714XmHztdl7qg8v1E2lycKyiqnFj6qs,1745
19
19
  siat/cmat_commons.py,sha256=Nj9Kf0alywaztVoMVeVVL_EZk5jRERJy8R8kBw88_Tg,38116
20
- siat/common.py,sha256=PVVP59khcYr0B0Kd-lcOPlekAU8ZzmKP_nuwIgJcjro,142643
20
+ siat/common.py,sha256=F83kondrh_QRJB5bAw8fKSoh29Vg8AvivdqDDcbg0Hw,142991
21
21
  siat/compare_cross.py,sha256=3iP9TH2h3w27F2ARZc7FjKcErYCzWRc-TPiymOyoVtw,24171
22
22
  siat/compare_cross_test.py,sha256=xra5XYmQGEtfIZL2h-GssdH2hLdFIhG3eoCrkDrL3gY,3473
23
23
  siat/concepts_iwencai.py,sha256=m1YEDtECRT6FqtzlKm91pt2I9d3Z_XoP59BtWdRdu8I,3061
@@ -40,8 +40,8 @@ siat/financial_statements_test.py,sha256=FLhx8JD-tVVWSBGux6AMz1jioXX4U4bp9DmgFHY
40
40
  siat/financials.py,sha256=mbEZSNeHMMFcnPUryQWvdmNlWQvpnOG9eItgS7IVw3k,80458
41
41
  siat/financials2 - 副本.py,sha256=dKlNjIfKeoSy055fQ6E6TUj9HEoO5Ney9grD84J5kfk,14389
42
42
  siat/financials2.py,sha256=7mnsTncKsgwFu8PP4refh5C5iMIO9P0KOMSF87ZyncY,45736
43
- siat/financials_china.py,sha256=CzihEqLmCvzEpBqi4kxQCCm9S9J7njTO3vYgSQR7HDA,189079
44
- siat/financials_china2.py,sha256=ESxKyBoIETokRXLIkjkyhSjM0b1YSdXcP_rP2R5BUlU,92639
43
+ siat/financials_china.py,sha256=HdX6YKI4tUC7VnPCTAjtdC3JxGgGepu07wdrpyykxbE,190119
44
+ siat/financials_china2.py,sha256=mFwWtzwPbantjmXkGsr4CTEj9VRdZe5yITG3VwlJC9E,92655
45
45
  siat/financials_china2_test.py,sha256=Erz5k4LyOplBBvYls2MypuqHpVNJ3daiLdyeJezNPu0,2722
46
46
  siat/financials_china2_test2.py,sha256=C8CuYTMHN4Mhp-sTu-Bmg0zMXRCaYV6ezGDoYartRYQ,3507
47
47
  siat/financials_china2_test3.py,sha256=UXYSA80DNSPRhHpovc2MA9JkpILWMAQaRatbWCHBNPs,3118
@@ -85,7 +85,7 @@ siat/option_sina_api_test.py,sha256=dn-k_wrQnAaNKHoROvWJEc7lqlU0bwiV2Aa4usWAFGM,
85
85
  siat/proxy_test.py,sha256=erQJrmGs2X46z8Gb1h-7GYQ0rTUcaR8dxHExWoBz2eM,2610
86
86
  siat/quandl_test.py,sha256=EcPoXnLuqzPl5dKyVEZi3j3PJZFpsnU_iNPhLWC9p-A,1552
87
87
  siat/risk_adjusted_return.py,sha256=L5FoeOFzvItT03gNBTCaIo32hUvncOJkbchtHOveSBM,54929
88
- siat/risk_adjusted_return2.py,sha256=t-_JQRpz7Pcte9-QLUc4SYXKz8vWZtT7NnIw644w8hQ,63734
88
+ siat/risk_adjusted_return2.py,sha256=y9Eux9bbQgprFs_a-0J-7pC9P4yEpJHssDbcbFct0K0,64338
89
89
  siat/risk_adjusted_return_test.py,sha256=m_VHL5AtT74cJv5i7taTeTfnkX48y0AFJk5phawyYWg,3416
90
90
  siat/risk_evaluation.py,sha256=I6B3gty-t--AkDCO0tKF-291YfpnF-IkXcFjqNKCt9I,76286
91
91
  siat/risk_evaluation_test.py,sha256=YEXM96gKzTfwN4U61AS4Rr1tV7KgUvn4rRC6f3iMw9s,3731
@@ -95,16 +95,16 @@ siat/sector_china.py,sha256=QSNJclhzT6V9NidziMwwAs-Kk6f7nzdK6PiPGkKrBCk,111617
95
95
  siat/sector_china_test.py,sha256=1wq7ef8Bb_L8F0h0W6FvyBrIcBTEbrTV7hljtpj49U4,5843
96
96
  siat/security_price.py,sha256=2oHskgiw41KMGfqtnA0i2YjNNV6cYgtlUK0j3YeuXWs,29185
97
97
  siat/security_price2.py,sha256=kuYh0V5cqclkM6MjZUd-N361fv3oxGVVerYINuTzZrE,24622
98
- siat/security_prices.py,sha256=MUwVNuZuG_A9fGlxNYFdMalD08MkZx3Ps_In7AmOppI,102351
98
+ siat/security_prices.py,sha256=m_dWQ24Au9WMNOb1o0Igm6Sg1llz7kyIX3vSXrE5Jng,102705
99
99
  siat/security_prices_test.py,sha256=OEphoJ87NPKoNow1QA8EU_5MUYrJF-qKoWKNapVfZNI,10779
100
100
  siat/security_trend.py,sha256=o0vpWdrJkmODCP94X-Bvn-w7efHhj9HpUYBHtLl55D0,17240
101
- siat/security_trend2.py,sha256=AhIheVc0EvXShwDvMX3UbR3cX5cKYxSgUVqA_bHeCEI,24579
101
+ siat/security_trend2.py,sha256=4yBY3ve0Kddu95JemS02gfLbrHVN2_gl_irr5pA4F6w,24626
102
102
  siat/setup.py,sha256=up65rQGLmTBkhtaMLowjoQXYmIsnycnm4g1SYmeQS6o,1335
103
103
  siat/shenwan index history test.py,sha256=JCVAzOSEldHalhSFa3pqD8JI_8_djPMQOxpkuYU-Esg,1418
104
- siat/stock.py,sha256=PkNSJPwMlvwnRcbsyIrkslk_jvFfveQ7FDQg5XbEPoc,138964
104
+ siat/stock.py,sha256=9w7LzOZzt-gAzfdVfYB8nd73DrG73wLmFpIolJKUCBc,139188
105
105
  siat/stock_advice_linear.py,sha256=-twT7IGP-NEplkL1WPSACcNJjggRB2j4mlAQCkzOAuo,31655
106
106
  siat/stock_base.py,sha256=uISvbRyOGy8p9QREA96CVydgflBkn5L3OXOGKl8oanc,1312
107
- siat/stock_china.py,sha256=UsC8vy1wnyBMGGsm5r1XMjIeGoHQyIcbxS6VKGiIlRs,91425
107
+ siat/stock_china.py,sha256=zyUyghIrkkkYWlHRRP7Hoblxzfp-jrck60pTJpwMahg,91553
108
108
  siat/stock_china_test.py,sha256=eO4HWsSvc6qezl0LndjtL24lViEyrBjH_sx2c2Y2Q2M,1294
109
109
  siat/stock_info.pickle,sha256=IGUkPbvwtXbngKBMWAzgYhplE96FucuTfnc26wvBiLQ,1319270
110
110
  siat/stock_info_test.py,sha256=gfG3DbhDACbtD8wnv_R6zhj0t11XaC8NX8uLD9Qv3Fo,6122
@@ -126,13 +126,13 @@ siat/transaction_test.py,sha256=Z8g1LJCN4-mnUByXMUMoFmN0t105cbmsz2QmvSuIkbU,1858
126
126
  siat/translate-20230125.py,sha256=NPPSXhT38s5t9fzMvl_fvi4ckSB73ThLmZetVI-xGdU,117953
127
127
  siat/translate-20230206.py,sha256=-vtI125WyaJhmPotOpDAmclt_XnYVaWU9ByLWZ6FyYE,118133
128
128
  siat/translate-20230215.py,sha256=TJgtPE3n8IjljmZ4Pefy8dmHoNdFF-1zpML6BhA9FKE,121657
129
- siat/translate.py,sha256=fmI2K6o2klJEQCxYqdh1njLg7aTYPjU_P_tCRqki2W8,209799
129
+ siat/translate.py,sha256=dqzySnqC0A0IxFKhY1AUvBbj3RIE5_l_wRMn-ZJNJxs,215034
130
130
  siat/universal_test.py,sha256=CDAOffW1Rvs-TcNN5giWVvHMlch1w4dp-w5SIV9jXL0,3936
131
131
  siat/valuation.py,sha256=NKfeZMdDJOW42oLVHob6eSVBXUqlN1OCnnzwyGAst8c,48855
132
132
  siat/valuation_china.py,sha256=Tde2LzPDQy3Z7xOQQDw4ckQMPdROp_z0-GjFE6Z5_lI,67639
133
133
  siat/valuation_market_china_test.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
134
134
  siat/var_model_validation.py,sha256=f-oDewg7bPzyNanz_Y_jLH68NowAA3gXFehW_weKGG0,14898
135
- siat-3.0.41.dist-info/METADATA,sha256=seEw_evcNzXWMM5VhRD1XWxlxbsKT9XkDX5eUOi_jSw,1448
136
- siat-3.0.41.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
137
- siat-3.0.41.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
138
- siat-3.0.41.dist-info/RECORD,,
135
+ siat-3.0.43.dist-info/METADATA,sha256=8x9wW6A3GWrxYLw-PKD4UfzcY4MPZby_RNo1socVEyw,1448
136
+ siat-3.0.43.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
137
+ siat-3.0.43.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
138
+ siat-3.0.43.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.2)
2
+ Generator: bdist_wheel (0.38.4)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5