siat 3.0.43__py3-none-any.whl → 3.0.44__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/capm_beta2.py CHANGED
@@ -35,8 +35,8 @@ def get_market_index_code(ticker):
35
35
  """
36
36
  功能:基于股票ticker确定其所在市场的大盘指数代码
37
37
  """
38
- ticker=ticker1_cvt2yahoo(ticker)
39
- _,_,suffix=split_prefix_suffix(ticker.upper())
38
+ ticker=tickers_cvt2yahoo(ticker)
39
+ _,_,suffix=split_prefix_suffix(ticker)
40
40
 
41
41
  if suffix in ['SS']:
42
42
  mktidx='000001.SS' #上证综合指数
@@ -78,15 +78,14 @@ if __name__=='__main__':
78
78
 
79
79
  start2='2022-10-31'
80
80
  end='2024-3-23'
81
- ret_type='Annual Ret%'
82
81
  RF=0.01759
83
82
  regtrddays=252
84
83
 
85
84
  mktidx='auto'; source='auto'
86
85
 
87
- reg_result,dretdf3=regression_capm(ticker,start2,end,ret_type,RF,regtrddays)
86
+ reg_result,dretdf3=regression_capm(ticker,start2,end,RF,regtrddays)
88
87
 
89
- def regression_capm(ticker,start2,end,ret_type='Annual Ret%',RF=0,regtrddays=252, \
88
+ def regression_capm(ticker,start2,end,RF=0,regtrddays=252, \
90
89
  mktidx='auto',source='auto',ticker_type='auto'):
91
90
  """
92
91
  功能:进行CAPM回归,R-Rf=beta*(Rm-Rf),无截距项回归
@@ -138,13 +137,9 @@ def regression_capm(ticker,start2,end,ret_type='Annual Ret%',RF=0,regtrddays=252
138
137
  dretdf1=pd.merge(marketdf1,pricedf1,how='inner',left_index=True,right_index=True)
139
138
 
140
139
  #准备CAPM回归文件
141
- ret_type_lower=ret_type.lower()
142
140
  dretname='Daily Ret'
143
141
  #计算日无风险利率
144
142
  RF_daily=RF / 365
145
- if '%' in ret_type_lower:
146
- dretname='Daily Ret%'
147
- RF_daily=RF_daily * 100
148
143
 
149
144
  dretx=dretname+'_x' #指数日收益率
150
145
  drety=dretname+'_y' #股票日收益率
@@ -194,6 +189,8 @@ def regression_capm(ticker,start2,end,ret_type='Annual Ret%',RF=0,regtrddays=252
194
189
  if 'index' in list(dretdf3):
195
190
  del dretdf3['index']
196
191
 
192
+ reg_result['mktidx']=mktidx
193
+
197
194
  return reg_result,dretdf3
198
195
 
199
196
  #==============================================================================
@@ -220,9 +217,9 @@ def get_capm_beta(ticker,start,end,RF=0,regtrddays=252,mktidx='auto', \
220
217
  start2=date_adjust(start,adjust=-365/252 * regtrddays -31*2)
221
218
 
222
219
  reg_result,_=regression_capm(ticker=ticker,start2=start2,end=end, \
223
- ret_type="Annual Ret%",RF=RF, \
220
+ RF=RF, \
224
221
  regtrddays=regtrddays,mktidx=mktidx, \
225
- source=source,ticker_type=ticker_type)
222
+ source=source,ticker_type=ticker_type)
226
223
 
227
224
  startpd=pd.to_datetime(date_adjust(start,adjust=-7))
228
225
  endpd=pd.to_datetime(end)
@@ -246,6 +243,7 @@ if __name__=='__main__':
246
243
  annotate=False
247
244
  mktidx='auto'
248
245
  source='auto'
246
+ ticker_type='auto'
249
247
 
250
248
  betas=compare_mticker_1beta(ticker,start,end)
251
249
 
@@ -298,7 +296,7 @@ def compare_mticker_1beta(ticker,start,end, \
298
296
  else:
299
297
  dft=df_tmp[['beta']]
300
298
  dft.rename(columns={'beta':ticker_name(t,tt)},inplace=True)
301
-
299
+ mktidx_name=ticker_name(df_tmp['mktidx'].values[0])
302
300
  if len(df)==0: #第一个
303
301
  df=dft
304
302
  else:
@@ -310,7 +308,9 @@ def compare_mticker_1beta(ticker,start,end, \
310
308
 
311
309
  #仅用于绘图和制表
312
310
  df1=df.copy()
313
- for c in list(df1):
311
+ beta_list=list(df1)
312
+
313
+ for c in beta_list:
314
314
  #是否绘制水平线
315
315
  if df1[c].max() > axhline_value and df1[c].min() < axhline_value:
316
316
  axhline_label='零线'
@@ -323,7 +323,7 @@ def compare_mticker_1beta(ticker,start,end, \
323
323
  else:
324
324
  footnote2="假设年化无风险利率为零。"
325
325
 
326
- footnote3="贝塔系数基于日收益率,回归期间跨度为"+str(regression_period)+"个自然日。"
326
+ footnote3="基于"+mktidx_name+",回归期间为"+str(regression_period)+"个自然日。"
327
327
 
328
328
  import datetime; todaydt = datetime.date.today()
329
329
  footnote4="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
@@ -361,6 +361,7 @@ if __name__=='__main__':
361
361
  annotate=False
362
362
  mktidx='auto'
363
363
  source='auto'
364
+ ticker_type='auto'
364
365
 
365
366
  betas=compare_1ticker_mRF(ticker,start,end,RF)
366
367
 
@@ -412,7 +413,8 @@ def compare_1ticker_mRF(ticker,start,end, \
412
413
  else:
413
414
  dft=df_tmp[['beta']]
414
415
  dft.rename(columns={'beta':"基于无风险利率"+str(round(t*100,4))+'%'},inplace=True)
415
-
416
+ mktidx_name=ticker_name(df_tmp['mktidx'].values[0])
417
+
416
418
  if len(df)==0: #第一个
417
419
  df=dft
418
420
  else:
@@ -424,7 +426,9 @@ def compare_1ticker_mRF(ticker,start,end, \
424
426
 
425
427
  #仅用于绘图和制表
426
428
  df1=df.copy()
427
- for c in list(df1):
429
+ beta_list=list(df1)
430
+
431
+ for c in beta_list:
428
432
  #是否绘制水平线
429
433
  if df1[c].max() > axhline_value and df1[c].min() < axhline_value:
430
434
  axhline_label='零线'
@@ -438,7 +442,8 @@ def compare_1ticker_mRF(ticker,start,end, \
438
442
  footnote1="注:"
439
443
  footnote2=""
440
444
 
441
- footnote3="贝塔系数基于日收益率,回归期间跨度为"+str(regression_period)+"个自然日。"
445
+ #footnote3="贝塔系数基于日收益率,回归期间跨度为"+str(regression_period)+"个自然日。"
446
+ footnote3="基于"+mktidx_name+",回归期间为"+str(regression_period)+"个自然日。"
442
447
 
443
448
  import datetime; todaydt = datetime.date.today()
444
449
  footnote4="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
@@ -526,7 +531,7 @@ def compare_1ticker_mregression_period(ticker,start,end, \
526
531
  else:
527
532
  dft=df_tmp[['beta']]
528
533
  dft.rename(columns={'beta':"基于"+str(t)+"自然日回归"},inplace=True)
529
-
534
+ mktidx_name=ticker_name(df_tmp['mktidx'].values[0])
530
535
  if len(df)==0: #第一个
531
536
  df=dft
532
537
  else:
@@ -538,7 +543,9 @@ def compare_1ticker_mregression_period(ticker,start,end, \
538
543
 
539
544
  #仅用于绘图和制表
540
545
  df1=df.copy()
541
- for c in list(df1):
546
+ beta_list=list(df1)
547
+
548
+ for c in beta_list:
542
549
  #是否绘制水平线
543
550
  if df1[c].max() > axhline_value and df1[c].min() < axhline_value:
544
551
  axhline_label='零线'
@@ -548,8 +555,9 @@ def compare_1ticker_mregression_period(ticker,start,end, \
548
555
  footnote1="注:"
549
556
  footnote2=""
550
557
 
551
- footnote3="贝塔系数基于日收益率,无风险利率为"+str(round(RF*100,4))+'%'
552
-
558
+ #footnote3="贝塔系数基于日收益率,无风险利率为"+str(round(RF*100,4))+'%'
559
+ footnote3="基于"+mktidx_name+",回归期间为"+str(regression_period)+"个自然日。"
560
+
553
561
  import datetime; todaydt = datetime.date.today()
554
562
  footnote4="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
555
563
  if footnote3 !='':
siat/common.py CHANGED
@@ -1155,7 +1155,7 @@ def split_prefix_suffix(ticker):
1155
1155
  """
1156
1156
  将证券代码拆分为前后两部分
1157
1157
  """
1158
- ticker=ticker.upper()
1158
+ #ticker=ticker.upper()
1159
1159
  result=False
1160
1160
  try:
1161
1161
  pos=ticker.index('.')
@@ -282,7 +282,7 @@ def get_rolling_treynor_alpha(ticker,start,end,rar_name="alpha", \
282
282
  start2=date_adjust(start1,adjust=-regression_period-7*2)
283
283
 
284
284
  #CAPM回归,计算贝塔系数
285
- reg_result,dretdf3=regression_capm(ticker,start2,end,ret_type=ret_type,RF=RF, \
285
+ reg_result,dretdf3=regression_capm(ticker,start2,end,RF=RF, \
286
286
  regtrddays=regtrddays,mktidx=mktidx, \
287
287
  source=source,ticker_type=ticker_type)
288
288
 
@@ -368,7 +368,7 @@ def get_expanding_treynor_alpha(ticker,start,end,rar_name="alpha", \
368
368
  start2=date_adjust(start1,adjust=-regression_period-7*2)
369
369
 
370
370
  #CAPM回归,计算贝塔系数
371
- reg_result,dretdf3=regression_capm(ticker,start2,end,ret_type=ret_type,RF=RF, \
371
+ reg_result,dretdf3=regression_capm(ticker,start2,end,RF=RF, \
372
372
  regtrddays=regtrddays,mktidx=mktidx, \
373
373
  source=source,ticker_type=ticker_type)
374
374
 
@@ -910,7 +910,7 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
910
910
  from IPython.display import display
911
911
  display(df3)
912
912
  """
913
-
913
+ """
914
914
  disph=df1.style.hide() #不显示索引列
915
915
  dispp=disph.format(precision=3) #设置带有小数点的列精度调整为小数点后3位
916
916
  #设置标题/列名
@@ -931,7 +931,7 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
931
931
 
932
932
  from IPython.display import display
933
933
  display(dispf2)
934
-
934
+ """
935
935
 
936
936
  """
937
937
  print(df1.to_string(justify='left'))
@@ -977,7 +977,10 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
977
977
 
978
978
  footnote3=''
979
979
  if 'treynor' in rar or 'alpha' in rar:
980
- footnote3="贝塔系数回归期间"+str(regression_period)+"个自然日"
980
+ if mktidx=='auto':
981
+ mktidx=get_market_index_code(ticker[0] if isinstance(ticker,list) else ticker)
982
+ mktidx_name=ticker_name(mktidx)
983
+ footnote3="贝塔系数基于"+mktidx_name+",回归期间"+str(regression_period)+"个自然日"
981
984
 
982
985
  import datetime; todaydt = datetime.date.today()
983
986
  footnote4="数据来源: 综合新浪/stooq/Yahoo,"+str(todaydt)+"统计"
@@ -987,7 +990,9 @@ def compare_mticker_mrar(ticker,start,end,rar=['sharpe','alpha','sortino','treyn
987
990
  footnotex=footnote1+footnote2+'\n'+footnote4
988
991
 
989
992
  #print("\n"+footnotex)
990
- print(footnotex)
993
+ #print(footnotex)
994
+
995
+ df_display_CSS(df1,titletxt=titletxt,footnote=footnotex,decimals=4)
991
996
 
992
997
  return df
993
998
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: siat
3
- Version: 3.0.43
3
+ Version: 3.0.44
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
@@ -14,10 +14,10 @@ siat/bond_china.py,sha256=eYv-nMoWSS5fZ4VxnuJ29QFY9GUS6meGiIc0Xjm1fQI,3038
14
14
  siat/bond_test.py,sha256=yUOFw7ddGU-kb1rJdnsjkJWziDNgUR7OLDA7F7Ub91A,5246
15
15
  siat/bond_zh_sina.py,sha256=26BohGcS120utwqg9dJvdGm5OkuNpNu5bco80uOuQpU,4423
16
16
  siat/capm_beta.py,sha256=cxXdRVBQBllhbfz1LeTJAIWvyRYhW54nhtNUXv4HwS0,29063
17
- siat/capm_beta2.py,sha256=hta-X1iWPjNbG1YYIVlQF-YvKA8An3KuEyLmUEZ3hH8,25562
17
+ siat/capm_beta2.py,sha256=UOI4sCz3ld7yezlARqPHvgHzfduDiGeRqNa82dDTCZ8,25849
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=F83kondrh_QRJB5bAw8fKSoh29Vg8AvivdqDDcbg0Hw,142991
20
+ siat/common.py,sha256=0_fT64-X80rOPOqc6x6D_3WOLN2mKQ4UWZTuRqoLIAc,142992
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
@@ -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=y9Eux9bbQgprFs_a-0J-7pC9P4yEpJHssDbcbFct0K0,64338
88
+ siat/risk_adjusted_return2.py,sha256=0HtLKvXSZ8NO3lyVPRAj55axtvqsvpnHkzIi4NOdhmc,64593
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
@@ -132,7 +132,7 @@ 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.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,,
135
+ siat-3.0.44.dist-info/METADATA,sha256=lpYsF83FvwNlChiPm7slWucBOXtr6f2JcxFVEiMDSps,1448
136
+ siat-3.0.44.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
137
+ siat-3.0.44.dist-info/top_level.txt,sha256=r1cVyL7AIKqeAmEJjNR8FMT20OmEzufDstC2gv3NvEY,5
138
+ siat-3.0.44.dist-info/RECORD,,
File without changes