siat 3.1.23__py3-none-any.whl → 3.2.1__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 +41 -19
- siat/markowitz2-20240620.py +2614 -0
- siat/markowitz2.py +52 -4
- siat/risk_adjusted_return2.py +45 -6
- siat/sector_china.py +17 -9
- siat/security_price2.py +12 -1
- siat/security_prices.py +38 -17
- siat/security_trend2-20240620.py +493 -0
- siat/security_trend2.py +17 -11
- siat/stock.py +76 -22
- siat/stock_technical-20240620.py +2736 -0
- siat/stock_technical.py +207 -52
- siat/valuation_china.py +7 -5
- {siat-3.1.23.dist-info → siat-3.2.1.dist-info}/METADATA +1 -1
- {siat-3.1.23.dist-info → siat-3.2.1.dist-info}/RECORD +17 -14
- {siat-3.1.23.dist-info → siat-3.2.1.dist-info}/WHEEL +0 -0
- {siat-3.1.23.dist-info → siat-3.2.1.dist-info}/top_level.txt +0 -0
siat/capm_beta2.py
CHANGED
@@ -85,7 +85,9 @@ if __name__=='__main__':
|
|
85
85
|
|
86
86
|
reg_result,dretdf3=regression_capm(ticker,start2,end,RF,regtrddays)
|
87
87
|
|
88
|
-
def regression_capm(ticker,start2,end,
|
88
|
+
def regression_capm(ticker,start2,end, \
|
89
|
+
adjust='', \
|
90
|
+
RF=0,regtrddays=252, \
|
89
91
|
mktidx='auto',source='auto',ticker_type='auto'):
|
90
92
|
"""
|
91
93
|
功能:进行CAPM回归,R-Rf=beta*(Rm-Rf),无截距项回归
|
@@ -100,8 +102,9 @@ def regression_capm(ticker,start2,end,RF=0,regtrddays=252, \
|
|
100
102
|
print("*** DEBUG:",ticker,start2,end)
|
101
103
|
#pricedf=get_price(ticker,start2,end,source=source)
|
102
104
|
#pricedf=get_price_security(ticker,start2,end,source=source)
|
103
|
-
pricedf,found=get_price_1ticker_mixed(ticker=ticker,fromdate=start2, \
|
104
|
-
|
105
|
+
pricedf,found=get_price_1ticker_mixed(ticker=ticker,fromdate=start2,todate=end, \
|
106
|
+
adjust=adjust, \
|
107
|
+
source=source,ticker_type=ticker_type)
|
105
108
|
|
106
109
|
if pricedf is None:
|
107
110
|
print(" #Error(regression_capm): info of security",ticker_name(ticker,ticker_type),"not found or inaccessible")
|
@@ -124,8 +127,10 @@ def regression_capm(ticker,start2,end,RF=0,regtrddays=252, \
|
|
124
127
|
mktidx=get_market_index_code(ticker)
|
125
128
|
|
126
129
|
#marketdf=get_price(mktidx,start2,end,source=source)
|
127
|
-
|
128
|
-
|
130
|
+
#大盘指数实际上无复权价?
|
131
|
+
marketdf,found=get_price_1ticker_mixed(ticker=mktidx,fromdate=start2,todate=end, \
|
132
|
+
adjust=adjust, \
|
133
|
+
source=source,ticker_type=ticker_type)
|
129
134
|
|
130
135
|
if marketdf is None:
|
131
136
|
print(" #Error(regression_capm): info of market index",mktidx,"not found or inaccessible")
|
@@ -137,7 +142,11 @@ def regression_capm(ticker,start2,end,RF=0,regtrddays=252, \
|
|
137
142
|
dretdf1=pd.merge(marketdf1,pricedf1,how='inner',left_index=True,right_index=True)
|
138
143
|
|
139
144
|
#准备CAPM回归文件
|
140
|
-
|
145
|
+
if adjust == '':
|
146
|
+
dretname='Daily Ret'
|
147
|
+
else:
|
148
|
+
dretname='Daily Adj Ret'
|
149
|
+
|
141
150
|
#计算日无风险利率
|
142
151
|
RF_daily=RF / 365
|
143
152
|
|
@@ -207,7 +216,7 @@ if __name__=='__main__':
|
|
207
216
|
beta1=get_capm_beta(ticker,start,end,RF,regtrddays)
|
208
217
|
beta1.plot()
|
209
218
|
|
210
|
-
def get_capm_beta(ticker,start,end,RF=0,regtrddays=252,mktidx='auto', \
|
219
|
+
def get_capm_beta(ticker,start,end,adjust='',RF=0,regtrddays=252,mktidx='auto', \
|
211
220
|
source='auto',ticker_type='auto'):
|
212
221
|
"""
|
213
222
|
功能:套壳函数regression_capm,仅返回滚动的贝塔系数,基于日收益率
|
@@ -217,6 +226,7 @@ def get_capm_beta(ticker,start,end,RF=0,regtrddays=252,mktidx='auto', \
|
|
217
226
|
start2=date_adjust(start,adjust=-365/252 * regtrddays -31*2)
|
218
227
|
|
219
228
|
reg_result,_=regression_capm(ticker=ticker,start2=start2,end=end, \
|
229
|
+
adjust=adjust, \
|
220
230
|
RF=RF, \
|
221
231
|
regtrddays=regtrddays,mktidx=mktidx, \
|
222
232
|
source=source,ticker_type=ticker_type)
|
@@ -248,6 +258,7 @@ if __name__=='__main__':
|
|
248
258
|
betas=compare_mticker_1beta(ticker,start,end)
|
249
259
|
|
250
260
|
def compare_mticker_1beta(ticker,start,end, \
|
261
|
+
adjust='', \
|
251
262
|
RF=0,regression_period=365, \
|
252
263
|
graph=True,axhline_value=1,axhline_label='',facecolor='whitesmoke', \
|
253
264
|
annotate=False,annotate_value=False, \
|
@@ -289,7 +300,7 @@ def compare_mticker_1beta(ticker,start,end, \
|
|
289
300
|
|
290
301
|
#关闭print输出
|
291
302
|
with HiddenPrints():
|
292
|
-
df_tmp=get_capm_beta(t,start,end,RF,regtrddays,mktidx,source,ticker_type=tt)
|
303
|
+
df_tmp=get_capm_beta(t,start,end,adjust,RF,regtrddays,mktidx,source,ticker_type=tt)
|
293
304
|
|
294
305
|
if df_tmp is None:
|
295
306
|
break
|
@@ -366,6 +377,7 @@ if __name__=='__main__':
|
|
366
377
|
betas=compare_1ticker_mRF(ticker,start,end,RF)
|
367
378
|
|
368
379
|
def compare_1ticker_mRF(ticker,start,end, \
|
380
|
+
adjust='', \
|
369
381
|
RF=[0,0.02,0.05], \
|
370
382
|
regression_period=365, \
|
371
383
|
graph=True,axhline_value=1,axhline_label='',facecolor='whitesmoke', \
|
@@ -406,7 +418,7 @@ def compare_1ticker_mRF(ticker,start,end, \
|
|
406
418
|
for t in RF:
|
407
419
|
#关闭print输出
|
408
420
|
with HiddenPrints():
|
409
|
-
df_tmp=get_capm_beta(ticker,start,end,t,regtrddays,mktidx,source,ticker_type=ticker_type)
|
421
|
+
df_tmp=get_capm_beta(ticker,start,end,adjust,t,regtrddays,mktidx,source,ticker_type=ticker_type)
|
410
422
|
|
411
423
|
if df_tmp is None:
|
412
424
|
break
|
@@ -484,6 +496,7 @@ if __name__=='__main__':
|
|
484
496
|
betas=compare_1ticker_mregression_period(ticker,start,end,RF,regression_period)
|
485
497
|
|
486
498
|
def compare_1ticker_mregression_period(ticker,start,end, \
|
499
|
+
adjust='', \
|
487
500
|
RF=0, \
|
488
501
|
regression_period=[183,365,730], \
|
489
502
|
graph=True,axhline_value=1,axhline_label='',facecolor='whitesmoke', \
|
@@ -524,7 +537,7 @@ def compare_1ticker_mregression_period(ticker,start,end, \
|
|
524
537
|
|
525
538
|
#关闭print输出
|
526
539
|
with HiddenPrints():
|
527
|
-
df_tmp=get_capm_beta(ticker,start,end,RF,regtrddays,mktidx,source,ticker_type=ticker_type)
|
540
|
+
df_tmp=get_capm_beta(ticker,start,end,adjust,RF,regtrddays,mktidx,source,ticker_type=ticker_type)
|
528
541
|
|
529
542
|
if df_tmp is None:
|
530
543
|
break
|
@@ -601,7 +614,9 @@ if __name__=='__main__':
|
|
601
614
|
|
602
615
|
betas=compare_beta_security(ticker,start,end,RF)
|
603
616
|
|
604
|
-
def compare_beta_security(ticker,start,end,
|
617
|
+
def compare_beta_security(ticker,start,end, \
|
618
|
+
adjust='', \
|
619
|
+
RF=0,regression_period=365, \
|
605
620
|
graph=True,facecolor='whitesmoke', \
|
606
621
|
annotate=False,annotate_value=False, \
|
607
622
|
mark_top=False,mark_bottom=False,mark_end=False, \
|
@@ -618,8 +633,10 @@ def compare_beta_security(ticker,start,end,RF=0,regression_period=365, \
|
|
618
633
|
if isinstance(RF,list):
|
619
634
|
RF=RF[0]
|
620
635
|
|
621
|
-
df=compare_mticker_1beta(ticker,start,end,
|
622
|
-
|
636
|
+
df=compare_mticker_1beta(ticker,start,end, \
|
637
|
+
adjust=adjust, \
|
638
|
+
RF=RF,regression_period=regression_period, \
|
639
|
+
graph=graph,facecolor=facecolor, \
|
623
640
|
annotate=annotate,annotate_value=annotate, \
|
624
641
|
mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
|
625
642
|
mktidx=mktidx,source=source, \
|
@@ -632,8 +649,10 @@ def compare_beta_security(ticker,start,end,RF=0,regression_period=365, \
|
|
632
649
|
#情形2:1只证券,多个RF。时间区间要尽可能短,不然难以看出差异!
|
633
650
|
if isinstance(RF,list):
|
634
651
|
if len(RF) > 1:
|
635
|
-
df=compare_1ticker_mRF(ticker,start,end,
|
636
|
-
|
652
|
+
df=compare_1ticker_mRF(ticker,start,end, \
|
653
|
+
adjust=adjust, \
|
654
|
+
RF=RF,regression_period=regression_period, \
|
655
|
+
graph=graph,facecolor=facecolor, \
|
637
656
|
annotate=annotate,annotate_value=annotate, \
|
638
657
|
mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
|
639
658
|
mktidx=mktidx,source=source, \
|
@@ -647,8 +666,9 @@ def compare_beta_security(ticker,start,end,RF=0,regression_period=365, \
|
|
647
666
|
if isinstance(regression_period,list):
|
648
667
|
if len(regression_period) > 1:
|
649
668
|
df=compare_1ticker_mregression_period(ticker,start,end, \
|
650
|
-
|
651
|
-
|
669
|
+
adjust=adjust, \
|
670
|
+
RF=RF,regression_period=regression_period, \
|
671
|
+
graph=graph,facecolor=facecolor, \
|
652
672
|
annotate=annotate,annotate_value=annotate, \
|
653
673
|
mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
|
654
674
|
mktidx=mktidx,source=source, \
|
@@ -659,8 +679,10 @@ def compare_beta_security(ticker,start,end,RF=0,regression_period=365, \
|
|
659
679
|
regression_period=regression_period[0]
|
660
680
|
|
661
681
|
#情形4:1只证券,1个RF,1个回归天数?
|
662
|
-
df=compare_mticker_1beta(ticker,start,end,
|
663
|
-
|
682
|
+
df=compare_mticker_1beta(ticker,start,end, \
|
683
|
+
adjust=adjust, \
|
684
|
+
RF=RF,regression_period=regression_period, \
|
685
|
+
graph=graph,facecolor=facecolor, \
|
664
686
|
annotate=annotate,annotate_value=annotate, \
|
665
687
|
mark_top=mark_top,mark_bottom=mark_bottom,mark_end=mark_end, \
|
666
688
|
mktidx=mktidx,source=source, \
|