siat 1.7.47__py3-none-any.whl → 1.7.49__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
@@ -1854,7 +1854,20 @@ def print_list(alist,leading_blanks=1):
1854
1854
 
1855
1855
  return
1856
1856
  #==============================================================================
1857
+ # FUNCTION TO REMOVE TIMEZONE
1858
+ def remove_timezone(dt):
1859
+
1860
+ # HERE `dt` is a python datetime
1861
+ # object that used .replace() method
1862
+ return dt.replace(tzinfo=None)
1857
1863
  #==============================================================================
1864
+ def remove_df_index_timezone(df):
1865
+ df['timestamp']=df.index
1866
+ df['timestamp'] = df['timestamp'].apply(remove_timezone)
1867
+ df.index=df['timestamp']
1868
+ del df['timestamp']
1869
+
1870
+ return df
1858
1871
  #==============================================================================
1859
1872
  #==============================================================================
1860
1873
 
siat/markowitz.py CHANGED
@@ -26,6 +26,7 @@ import pandas as pd
26
26
  import numpy as np
27
27
  import datetime
28
28
  #==============================================================================
29
+ import seaborn as sns
29
30
  import matplotlib.pyplot as plt
30
31
  #统一设定绘制的图片大小:数值为英寸,1英寸=100像素
31
32
  plt.rcParams['figure.figsize']=(12.8,7.2)
@@ -51,14 +52,14 @@ import sys; czxt=sys.platform
51
52
  if czxt in ['win32','win64']:
52
53
  plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体
53
54
  mpfrc={'font.family': 'SimHei'}
55
+ sns.set_style('whitegrid',{'font.sans-serif':['simhei','Arial']})
54
56
 
55
- if czxt in ['darwin']: #MacOSX
57
+ if czxt in ['darwin','linux']: #MacOSX
58
+ #plt.rcParams['font.family'] = ['Arial Unicode MS'] #用来正常显示中文标签
56
59
  plt.rcParams['font.family']= ['Heiti TC']
57
60
  mpfrc={'font.family': 'Heiti TC'}
61
+ sns.set_style('whitegrid',{'font.sans-serif':['Arial Unicode MS','Arial']})
58
62
 
59
- if czxt in ['linux']: #website Jupyter
60
- plt.rcParams['font.family']= ['Heiti TC']
61
- mpfrc={'font.family':'Heiti TC'}
62
63
 
63
64
  # 解决保存图像时'-'显示为方块的问题
64
65
  plt.rcParams['axes.unicode_minus'] = False
@@ -232,7 +233,8 @@ if __name__=='__main__':
232
233
  printout=True
233
234
 
234
235
  def portfolio_cumret(portfolio,thedate,pastyears=1, \
235
- rate_period='1Y',rate_type='shibor',RF=False,printout=True):
236
+ rate_period='1Y',rate_type='shibor',RF=False, \
237
+ printout=True,graph=True):
236
238
  """
237
239
  功能:绘制投资组合的累计收益率趋势图,并与等权和市值加权组合比较
238
240
  注意:中国部分历史区段的treasury历史可能无法取得;
@@ -248,7 +250,7 @@ def portfolio_cumret(portfolio,thedate,pastyears=1, \
248
250
  totalshares=np.sum(sharelist0)
249
251
  if abs(totalshares - 1) >= 0.000001:
250
252
  print("\n #Warning(portfolio_cumret): total weights is",totalshares,", it requires 1.0 here")
251
- print(" Automatically converted into total weights 1")
253
+ print(" Automatically converted into total weights 1")
252
254
  sharelist=list(sharelist0/totalshares)
253
255
  else:
254
256
  sharelist=sharelist0
@@ -272,7 +274,8 @@ def portfolio_cumret(portfolio,thedate,pastyears=1, \
272
274
 
273
275
  #..........................................................................
274
276
  # 抓取投资组合股价
275
- prices=get_prices(tickerlist,start,thedate)
277
+ #prices=get_prices(tickerlist,start,thedate)
278
+ prices=get_prices_simple(tickerlist,start,thedate)
276
279
  if prices is None:
277
280
  print(" #Error(portfolio_cumret): failed to get portfolio prices",pname)
278
281
  return None
@@ -305,43 +308,45 @@ def portfolio_cumret(portfolio,thedate,pastyears=1, \
305
308
  #..........................................................................
306
309
 
307
310
  # 绘制原投资组合的收益率曲线,以便使用收益率%来显示
308
- plotsr = StockReturns['Portfolio']
309
- plotsr.plot(label=pname)
310
- plt.axhline(y=0,ls=":",c="red")
311
-
312
- if lang == 'Chinese':
313
- title_txt="投资组合: 日收益率的变化趋势"
314
- ylabel_txt="日收益率"
315
- source_txt="来源: Sina/EM/stooq, "
316
- else:
317
- title_txt="Investment Portfolio: Daily Return"
318
- ylabel_txt="Daily Return"
319
- source_txt="Source: sina/eastmoney/stooq, "
320
-
321
- plt.title(title_txt)
322
- plt.ylabel(ylabel_txt)
323
-
324
- stoday = datetime.date.today()
325
- plt.xlabel(source_txt+str(stoday))
326
- plt.legend()
327
- plt.show()
311
+ if graph:
312
+ plotsr = StockReturns['Portfolio']
313
+ plotsr.plot(label=pname)
314
+ plt.axhline(y=0,ls=":",c="red")
315
+
316
+ if lang == 'Chinese':
317
+ title_txt="投资组合: 日收益率的变化趋势"
318
+ ylabel_txt="日收益率"
319
+ source_txt="来源: Sina/EM/stooq, "
320
+ else:
321
+ title_txt="Investment Portfolio: Daily Return"
322
+ ylabel_txt="Daily Return"
323
+ source_txt="Source: sina/eastmoney/stooq, "
324
+
325
+ plt.title(title_txt)
326
+ plt.ylabel(ylabel_txt)
327
+
328
+ stoday = datetime.date.today()
329
+ plt.xlabel(source_txt+str(stoday))
330
+ plt.legend()
331
+ plt.show()
328
332
  #..........................................................................
329
333
 
330
334
  # 计算原投资组合的持有收益率,并绘图
331
- name_list=["Portfolio"]
332
- label_list=[pname]
333
-
334
- if lang == 'Chinese':
335
- titletxt="投资组合: 持有收益率的变化趋势"
336
- ylabeltxt="持有收益率"
337
- xlabeltxt="来源: Sina/EM/stooq, "+str(stoday)
338
- else:
339
- titletxt="Investment Portfolio: Holding Return"
340
- ylabeltxt="Holding Return"
341
- xlabeltxt="Source: sina/eastmoney/stooq, "+str(stoday)
335
+ name_list=["Portfolio"]
336
+ label_list=[pname]
337
+
338
+ if lang == 'Chinese':
339
+ titletxt="投资组合: 持有收益率的变化趋势"
340
+ ylabeltxt="持有收益率"
341
+ xlabeltxt="来源: Sina/EM/stooq, "+str(stoday)
342
+ else:
343
+ titletxt="Investment Portfolio: Holding Return"
344
+ ylabeltxt="Holding Return"
345
+ xlabeltxt="Source: sina/eastmoney/stooq, "+str(stoday)
342
346
 
343
347
  #绘制持有收益率曲线
344
- cumulative_returns_plot(StockReturns,name_list,titletxt,ylabeltxt,xlabeltxt,label_list)
348
+ if graph:
349
+ cumulative_returns_plot(StockReturns,name_list,titletxt,ylabeltxt,xlabeltxt,label_list)
345
350
  #..........................................................................
346
351
 
347
352
  # 构造等权重组合Portfolio_EW的持有收益率
@@ -376,7 +381,8 @@ def portfolio_cumret(portfolio,thedate,pastyears=1, \
376
381
  titletxt=title_txt
377
382
 
378
383
  #绘制各个投资组合的持有收益率曲线
379
- cumulative_returns_plot(StockReturns,name_list,titletxt,ylabeltxt,xlabeltxt,label_list)
384
+ if graph:
385
+ cumulative_returns_plot(StockReturns,name_list,titletxt,ylabeltxt,xlabeltxt,label_list)
380
386
 
381
387
  #打印各个投资组合的持股比例
382
388
  member_returns=stock_return
@@ -393,7 +399,8 @@ def portfolio_cumret(portfolio,thedate,pastyears=1, \
393
399
  portfolio_returns=cvt_portfolio_name(pname,portfolio_returns)
394
400
 
395
401
  #打印现有投资组合策略的排名
396
- portfolio_ranks(portfolio_returns,pname)
402
+ if printout:
403
+ portfolio_ranks(portfolio_returns,pname)
397
404
 
398
405
  return [[portfolio,thedate,member_returns,rf_df,member_prices], \
399
406
  [portfolio_returns,portfolio_weights,portfolio_weights_ew,portfolio_weights_lw]]
@@ -407,7 +414,7 @@ if __name__=='__main__':
407
414
  #==============================================================================
408
415
 
409
416
  def portfolio_expret(portfolio,today,pastyears=1, \
410
- rate_period='1Y',rate_type='shibor',RF=False,printout=True):
417
+ rate_period='1Y',rate_type='shibor',RF=False,printout=True,graph=True):
411
418
  """
412
419
  功能:绘制投资组合的持有期收益率趋势图,并与等权和市值加权组合比较
413
420
  套壳原来的portfolio_cumret函数,以维持兼容性
@@ -417,7 +424,7 @@ def portfolio_expret(portfolio,today,pastyears=1, \
417
424
  """
418
425
  #处理失败的返回值
419
426
  results=portfolio_cumret(portfolio,today,pastyears, \
420
- rate_period,rate_type,RF,printout)
427
+ rate_period,rate_type,RF,printout,graph)
421
428
  if results is None: return None
422
429
 
423
430
  [[portfolio,thedate,member_returns,rf_df,member_prices], \
@@ -453,7 +460,7 @@ def portfolio_corr(pf_info):
453
460
  import seaborn as sns
454
461
  # 创建热图
455
462
  sns.heatmap(correlation_matrix,annot=True,cmap="YlGnBu",linewidths=0.3,
456
- annot_kws={"size": 8})
463
+ annot_kws={"size": 16})
457
464
  plt.title(pname+": 成份股收益率之间的相关系数")
458
465
  plt.ylabel("成份股票")
459
466
 
@@ -2038,7 +2045,141 @@ if __name__=='__main__':
2038
2045
  fromdate,todate='2019-1-1','2020-8-1'
2039
2046
  df=portfolio_ef(stocks,fromdate,todate)
2040
2047
 
2048
+ #==============================================================================
2049
+ if __name__=='__main__':
2050
+ tickers=['^GSPC','000001.SS','^HSI','^N225','^BSESN']
2051
+ start='2023-1-1'
2052
+ end='2023-3-22'
2053
+ info_type='Volume'
2054
+ df=security_correlation(tickers,start,end,info_type='Close')
2055
+
2056
+
2057
+ def cm2inch(x,y):
2058
+ return x/2.54,y/2.54
2059
+
2060
+ def security_correlation(tickers,start,end,info_type='Close'):
2061
+ """
2062
+ 功能:股票/指数收盘价之间的相关性
2063
+ info_type='Close': 默认Close, 还可为Open/High/Low/Volume
2064
+ """
2065
+ info_types=['Close','Open','High','Low','Volume']
2066
+ info_types_cn=['收盘价','开盘价','最高价','最低价','成交量']
2067
+ if not(info_type in info_types):
2068
+ print(" #Error(security_correlation): invalid information type",info_type)
2069
+ print(" Supported information type:",info_types)
2070
+ return None
2071
+ pos=info_types.index(info_type)
2072
+ info_type_cn=info_types_cn[pos]
2073
+
2074
+ #屏蔽函数内print信息输出的类
2075
+ import os, sys
2076
+ class HiddenPrints:
2077
+ def __enter__(self):
2078
+ self._original_stdout = sys.stdout
2079
+ sys.stdout = open(os.devnull, 'w')
2080
+
2081
+ def __exit__(self, exc_type, exc_val, exc_tb):
2082
+ sys.stdout.close()
2083
+ sys.stdout = self._original_stdout
2084
+
2085
+ print(" Searching for security prices, please wait ...")
2086
+ with HiddenPrints():
2087
+ prices=get_prices_simple(tickers,start,end)
2088
+ df=prices[info_type]
2089
+ df.dropna(axis=0,inplace=True)
2090
+
2091
+ # here put the import lib
2092
+ import seaborn as sns
2093
+ sns.set(font='SimHei') # 解决Seaborn中文显示问题
2094
+ #sns.set_style('whitegrid',{'font.sans-serif':['SimHei','Arial']})
2095
+ #sns.set_style('whitegrid',{'font.sans-serif':['FangSong']})
2096
+
2097
+ import numpy as np
2098
+ from scipy.stats import pearsonr
2099
+
2100
+ collist=list(df)
2101
+ for col in collist:
2102
+ df.rename(columns={col:codetranslate(col)},inplace=True)
2103
+ df_coor = df.corr()
2104
+
2105
+
2106
+ #fig = plt.figure(figsize=(cm2inch(16,12)))
2107
+ fig = plt.figure(figsize=(cm2inch(12,8)))
2108
+ ax1 = plt.gca()
2109
+
2110
+ #构造mask,去除重复数据显示
2111
+ mask = np.zeros_like(df_coor)
2112
+ mask[np.triu_indices_from(mask)] = True
2113
+ mask2 = mask
2114
+ mask = (np.flipud(mask)-1)*(-1)
2115
+ mask = np.rot90(mask,k = -1)
2116
+
2117
+ im1 = sns.heatmap(df_coor,annot=True,cmap="YlGnBu"
2118
+ , mask=mask#构造mask,去除重复数据显示
2119
+ ,vmax=1,vmin=-1
2120
+ , fmt='.2f',ax = ax1,annot_kws={"size": 6})
2121
+
2122
+ ax1.tick_params(axis = 'both', length=0)
2123
+
2124
+ #计算相关性显著性并显示
2125
+ rlist = []
2126
+ plist = []
2127
+ for i in df.columns.values:
2128
+ for j in df.columns.values:
2129
+ r,p = pearsonr(df[i],df[j])
2130
+ rlist.append(r)
2131
+ plist.append(p)
2132
+
2133
+ rarr = np.asarray(rlist).reshape(len(df.columns.values),len(df.columns.values))
2134
+ parr = np.asarray(plist).reshape(len(df.columns.values),len(df.columns.values))
2135
+ xlist = ax1.get_xticks()
2136
+ ylist = ax1.get_yticks()
2137
+
2138
+ widthx = 0
2139
+ widthy = -0.15
2140
+
2141
+ # 星号的大小
2142
+ font_dict={'size':5}
2143
+
2144
+ for m in ax1.get_xticks():
2145
+ for n in ax1.get_yticks():
2146
+ pv = (parr[int(m),int(n)])
2147
+ rv = (rarr[int(m),int(n)])
2148
+ if mask2[int(m),int(n)]<1.:
2149
+ if abs(rv) > 0.5:
2150
+ if pv< 0.05 and pv>= 0.01:
2151
+ ax1.text(n+widthx,m+widthy,'*',ha = 'center',color = 'white',fontdict=font_dict)
2152
+ if pv< 0.01 and pv>= 0.001:
2153
+ ax1.text(n+widthx,m+widthy,'**',ha = 'center',color = 'white',fontdict=font_dict)
2154
+ if pv< 0.001:
2155
+ #print([int(m),int(n)])
2156
+ ax1.text(n+widthx,m+widthy,'***',ha = 'center',color = 'white',fontdict=font_dict)
2157
+ else:
2158
+ if pv< 0.05 and pv>= 0.01:
2159
+ ax1.text(n+widthx,m+widthy,'*',ha = 'center',color = 'k',fontdict=font_dict)
2160
+ elif pv< 0.01 and pv>= 0.001:
2161
+ ax1.text(n+widthx,m+widthy,'**',ha = 'center',color = 'k',fontdict=font_dict)
2162
+ elif pv< 0.001:
2163
+ ax1.text(n+widthx,m+widthy,'***',ha = 'center',color = 'k',fontdict=font_dict)
2164
+
2165
+ plt.title("证券"+info_type_cn+"之间的相关性")
2166
+ plt.tick_params(labelsize=6)
2167
+
2168
+ footnote1="\n显著性数值:***非常显著(<0.001),**很显著(<0.01),*显著(<0.05),其余为不显著"
2169
+ footnote2="\n系数绝对值:>=0.8极强相关,0.6-0.8强相关,0.4-0.6相关,0.2-0.4弱相关,否则为极弱(不)相关"
2170
+
2171
+ footnote3="\n观察期间: "+start+'至'+end
2172
+ import datetime as dt; stoday=dt.date.today()
2173
+ footnote4=";来源:Sina/EM/stooq/Yahoo,"+str(stoday)
2174
+
2175
+ fontxlabel={'size':6}
2176
+ plt.xlabel(footnote1+footnote2+footnote3+footnote4,fontxlabel)
2177
+ #plt.xticks(rotation=45)
2178
+ plt.show()
2179
+
2180
+ return df_coor
2041
2181
 
2182
+ #==============================================================================
2042
2183
 
2043
2184
 
2044
2185
 
siat/security_prices.py CHANGED
@@ -92,6 +92,7 @@ def get_prices(ticker,fromdate,todate,adj=False,retry_count=3,pause=1):
92
92
  print(" #Error(get_prices): invalid date period from",fromdate,'to',todate)
93
93
  return None
94
94
 
95
+ """
95
96
  #尝试pandas_datareader+FRED(仅对部分国外市场指数有效)
96
97
  if ticker[0]=='^':
97
98
  print(" Trying to capture info from fred for",ticker)
@@ -103,6 +104,7 @@ def get_prices(ticker,fromdate,todate,adj=False,retry_count=3,pause=1):
103
104
  print(" #Warning(get_prices): zero record found in fred for",ticker)
104
105
  else:
105
106
  return prices
107
+ """
106
108
 
107
109
  #尝试AkShare+Sina+EM(新浪,对中国内地股票、港股和美股有效,但不包括国外市场指数)
108
110
  #printmsg=str(ticker)+" from "+fromdate+' to '+todate
@@ -822,6 +824,73 @@ if __name__=='__main__':
822
824
  dfm2=get_prices_ak(['600519.SS','AAPL'],'2020-12-1','2021-1-31')
823
825
 
824
826
  #==============================================================================
827
+ if __name__=='__main__':
828
+ ticker=['600519.SS','000858.SZ']
829
+ fromdate='2020-12-1'
830
+ todate='2021-1-31'
831
+ adjust='none'
832
+
833
+ def get_prices_simple(ticker,fromdate,todate,adjust='none'):
834
+ """
835
+ 功能:直接循环获取股票或指数的历史行情,多个股票
836
+ """
837
+ #检查是否为多个股票:单个股票代码
838
+ if isinstance(ticker,str):
839
+ df=get_prices(ticker,fromdate,todate,adjust=adjust)
840
+ return df
841
+
842
+ #检查是否为多个股票:空的列表
843
+ if isinstance(ticker,list) and len(ticker) == 0:
844
+ pass
845
+ return None
846
+
847
+ #检查是否为多个股票:列表中只有一个代码
848
+ if isinstance(ticker,list) and len(ticker) == 1:
849
+ ticker1=ticker[0]
850
+ df=get_prices(ticker1,fromdate,todate,adjust=adjust)
851
+ return df
852
+
853
+ import pandas as pd
854
+ #处理列表中的第一个股票
855
+ i=0
856
+ df=None
857
+ while df is None:
858
+ t=ticker[i]
859
+ #df=get_prices(t,fromdate,todate,adjust=adjust)
860
+ df=get_prices(t,fromdate,todate)
861
+ if not (df is None):
862
+ columns=create_tuple_for_columns(df,t)
863
+ df.columns=pd.MultiIndex.from_tuples(columns)
864
+ else:
865
+ i=i+1
866
+ if (i+1) == len(ticker):
867
+ #已经到达股票代码列表末尾
868
+ return df
869
+
870
+ #对抗时区不匹配问题
871
+ df.index=pd.to_datetime(df.index)
872
+ #处理列表中的其余股票
873
+ for t in ticker[(i+1):]:
874
+ #dft=get_prices(t,fromdate,todate,adjust=adjust)
875
+ dft=get_prices(t,fromdate,todate)
876
+ if dft is None: continue
877
+ if len(dft)==0: continue
878
+
879
+ if not (dft is None):
880
+ columns=create_tuple_for_columns(dft,t)
881
+ dft.columns=pd.MultiIndex.from_tuples(columns)
882
+
883
+ dft.index=pd.to_datetime(dft.index)
884
+ df=pd.merge(df,dft,how='inner',left_index=True,right_index=True)
885
+
886
+ return df
887
+
888
+ if __name__=='__main__':
889
+ dfm=get_prices_simple(['600519.SS','000858.SZ'],'2020-12-1','2021-1-31')
890
+ dfm2=get_prices_simple(['600519.SS','AAPL'],'2020-12-1','2021-1-31')
891
+
892
+ #==============================================================================
893
+
825
894
  if __name__=='__main__':
826
895
  ticker='AAPL'
827
896
  start='2020-12-1'
@@ -1886,6 +1955,7 @@ if __name__ =="__main__":
1886
1955
 
1887
1956
  #==============================================================================
1888
1957
 
1958
+
1889
1959
  #==============================================================================
1890
1960
  #==============================================================================
1891
1961
  #==============================================================================
@@ -1,11 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siat
3
- Version: 1.7.47
3
+ Version: 1.7.49
4
4
  Summary: Securities Investment Analysis Tools (siat)
5
5
  Home-page: https://pypi.org/project/siat/
6
6
  Author: Prof. WANG Dehong, Business School, BFSU (北京外国语大学 国际商学院 王德宏 教授)
7
7
  Author-email: wdehong2000@163.com
8
8
  License: Copyright (C) WANG Dehong, 2023. For educational purpose only!
9
+ Platform: UNKNOWN
9
10
  Requires-Dist: pandas-datareader
10
11
  Requires-Dist: yfinance
11
12
  Requires-Dist: plotly-express
@@ -36,3 +37,4 @@ Requires-Dist: prettytable
36
37
  The author is not responsible for the results of applying this plug-in in real
37
38
  investment activities.
38
39
 
40
+
@@ -14,7 +14,7 @@ siat/bond_test.py,sha256=yUOFw7ddGU-kb1rJdnsjkJWziDNgUR7OLDA7F7Ub91A,5246
14
14
  siat/capm_beta.py,sha256=L40UbrSU4QQ5CxmEu8CpLT5WptsOUOfDRF7Pxdw6HZs,28499
15
15
  siat/capm_beta_test.py,sha256=ImR0c5mc4hIl714XmHztdl7qg8v1E2lycKyiqnFj6qs,1745
16
16
  siat/cmat_commons.py,sha256=Nj9Kf0alywaztVoMVeVVL_EZk5jRERJy8R8kBw88_Tg,38116
17
- siat/common.py,sha256=IGzz1kZmPjyMD-AMgKSlVAz5tNIPrhmxkOdZfsFlwDE,63127
17
+ siat/common.py,sha256=F_l3c329WhviT6jwcqcL0uDL0jrZNqLxnJMmPRHTVyM,63508
18
18
  siat/concepts_iwencai.py,sha256=m1YEDtECRT6FqtzlKm91pt2I9d3Z_XoP59BtWdRdu8I,3061
19
19
  siat/concepts_kpl.py,sha256=SJ9UaJp5i79EXKZ3dPa_vBEoG_zgl1Ig5rZAm-ubgM4,4941
20
20
  siat/copyrights.py,sha256=YMLjZb328YpFMR-s_GUu0HBgeGce3pV7DgRut8S3I7w,690
@@ -53,7 +53,7 @@ siat/holding_risk.py,sha256=108tiI7DDl8uUZkyUiq6Y-McKeim1mxYsgqgk7CcXw8,30544
53
53
  siat/holding_risk_test.py,sha256=FRlw_9wFG98BYcg_cSj95HX5WZ1TvkGaOUdXD7-V86s,474
54
54
  siat/local_debug_test.py,sha256=CDAOffW1Rvs-TcNN5giWVvHMlch1w4dp-w5SIV9jXL0,3936
55
55
  siat/market_china.py,sha256=2_ov1KQwRtHQ6PXNO1TS4-wUPhBuoWla326g0x_xUgQ,31158
56
- siat/markowitz.py,sha256=1pMJFjkCsKHS8A5GuzLBUizG33nEr_vliUGIt2CfVRE,85662
56
+ siat/markowitz.py,sha256=sIgfOUkD23CxKgEfBL9sidzpa36De49ufNd2XdrWdpQ,91344
57
57
  siat/markowitz_ccb_test.py,sha256=xBkkoaNHdq9KSUrNuHGgKTdNYUvgi84kNYcf719eoyE,1593
58
58
  siat/markowitz_ef_test.py,sha256=wjNlICkgRIqnonPeSIHo4Mu2GRtb9dr21wDt2kMNEcI,4032
59
59
  siat/markowitz_old.py,sha256=Lf7O_4QWT8RsdkHiUyc_7kKY3eZjKDtFR89Fz3pwYnY,33046
@@ -76,7 +76,7 @@ siat/risk_free_rate_test.py,sha256=CpmhUf8aEAEZeNu4gvWP2Mz2dLoIgBX5bI41vfUBEr8,4
76
76
  siat/sector_china.py,sha256=mTMspgBgd07pesdMhGm-SpTr-rcKts-kaEsIM3kXsjk,58803
77
77
  siat/sector_china_test.py,sha256=tvFQYptmj7jq6H5kNaRJtcP5Wgb-eWvaoSl33Y47ZsM,4210
78
78
  siat/security_price.py,sha256=ibrdUJyt_n0c8oKRbVStE1_ptmWkzy4YIHjpc_fGiPQ,29148
79
- siat/security_prices.py,sha256=oe_QLqmQtrWOP2oP-hQc9-TaGoMpiMfvLG38lkZTqfI,69727
79
+ siat/security_prices.py,sha256=Xl7EHz16qCUIzuPGpEi-g-tLGQKk3MqHmic556-Vs7U,71984
80
80
  siat/security_prices_test.py,sha256=OEphoJ87NPKoNow1QA8EU_5MUYrJF-qKoWKNapVfZNI,10779
81
81
  siat/setup.py,sha256=up65rQGLmTBkhtaMLowjoQXYmIsnycnm4g1SYmeQS6o,1335
82
82
  siat/shenwan index history test.py,sha256=JCVAzOSEldHalhSFa3pqD8JI_8_djPMQOxpkuYU-Esg,1418
@@ -104,7 +104,7 @@ siat/universal_test.py,sha256=CDAOffW1Rvs-TcNN5giWVvHMlch1w4dp-w5SIV9jXL0,3936
104
104
  siat/valuation_china.py,sha256=U9FQgFcbJcS-S0cwy8iJ9Z0Rf8sxCN5Pxhm1DItUUgQ,51206
105
105
  siat/valuation_market_china_test.py,sha256=gbJ0ioauuo4koTPH6WKUkqcXiQPafnbhU5eKJ6lpdLA,1571
106
106
  siat/var_model_validation.py,sha256=zB_Skk_tmzIR15l6oAW3am4HBGVIG-eZ8gJhCdXZ8Qw,14859
107
- siat-1.7.47.dist-info/METADATA,sha256=MGvcCH1qOJbiYXFVQQKmJdHYZ1Iw9B4Fj7gvEF2WdeA,1381
108
- siat-1.7.47.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
109
- siat-1.7.47.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
110
- siat-1.7.47.dist-info/RECORD,,
107
+ siat-1.7.49.dist-info/METADATA,sha256=X2D3EGkVuQ5cx9rdtAx0Ipu74S_VraqWUmrUCP-bDNw,1400
108
+ siat-1.7.49.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92
109
+ siat-1.7.49.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
110
+ siat-1.7.49.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.37.1)
2
+ Generator: bdist_wheel (0.37.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5