import pandas as pd
import numpy as np
import datetime
import statsmodels.api as sm

import plotly.plotly as py
import plotly.graph_objs as go
import plotly.tools as tls
from plotly.graph_objs import *
import plotly.graph_objs as go
import cufflinks as cf

py.sign_in('DemoAccount','2qdyfjyr7o')

第一节:Fama-French三因子模型

Fama和French提出了一个和sharpe风格分析在理念伤非常接近的业绩分析方法,他们提出了用如下回归方程进行业绩分析。 $$r_p(t)= \alpha_p + \beta\cdot r_b(t) + \beta \cdot SMB(t) + \beta_v \cdot HML(t) + \epsilon_p(t) $$这看起来像是增加了额外两项的标准CAPM回归。SMB(t)是一个买入小盘股卖出大盘股的组合收益率。HML(t)是一个买入高净市率股票卖空低净市率股票的投资组合收益率。Fema和Franch的方法在两个维度进行了控制,同时使用了回归的方法。
# 拿到基准收益率
index_change_rate = get_price_change_rate('000001.XSHG',start_date='20160514', end_date='20170515')
# 拿到无风险利率
risk_free_rate = get_yield_curve(start_date='20160514', end_date='20170515', tenor=None, country='cn')['0S']
# 反年化处理
risk_free_rate = (risk_free_rate+1)**(1/244)-1
# 取与基准相同的交易日
risk_free_rate = risk_free_rate[list(index_change_rate.index)]
price_change_rate = pd.DataFrame()
price_change_rate['risk_free_rate'] = risk_free_rate
price_change_rate['000001.XSHG'] = index_change_rate
price_change_rate
risk_free_rate 000001.XSHG
2016-05-16 0.000070 0.008402
2016-05-17 0.000070 -0.002518
2016-05-18 0.000070 -0.012719
2016-05-19 0.000070 -0.000217
2016-05-20 0.000070 0.006618
2016-05-23 0.000072 0.006428
2016-05-24 0.000072 -0.007729
2016-05-25 0.000074 -0.002332
2016-05-26 0.000076 0.002613
2016-05-27 0.000076 -0.000495
2016-05-30 0.000076 0.000498
2016-05-31 0.000074 0.033363
2016-06-01 0.000075 -0.001066
2016-06-02 0.000075 0.004023
2016-06-03 0.000075 0.004599
2016-06-06 0.000073 -0.001560
2016-06-07 0.000073 0.000664
2016-06-08 0.000073 -0.003026
2016-06-13 0.000073 -0.032143
2016-06-14 0.000071 0.003218
2016-06-15 0.000069 0.015840
2016-06-16 0.000069 -0.004985
2016-06-17 0.000069 0.004277
2016-06-20 0.000067 0.001284
2016-06-21 0.000068 -0.003549
2016-06-22 0.000068 0.009377
2016-06-23 0.000068 -0.004677
2016-06-24 0.000068 -0.013027
2016-06-27 0.000068 0.014510
2016-06-28 0.000072 0.005820
... ... ...
2017-03-30 0.000116 -0.009588
2017-03-31 0.000115 0.003824
2017-04-05 0.000112 0.014830
2017-04-06 0.000112 0.003272
2017-04-07 0.000110 0.001710
2017-04-10 0.000108 -0.005240
2017-04-11 0.000106 0.005987
2017-04-12 0.000107 -0.004602
2017-04-13 0.000100 0.000651
2017-04-14 0.000096 -0.009125
2017-04-17 0.000094 -0.007363
2017-04-18 0.000094 -0.007900
2017-04-19 0.000096 -0.008142
2017-04-20 0.000104 0.000446
2017-04-21 0.000105 0.000331
2017-04-24 0.000102 -0.013747
2017-04-25 0.000101 0.001609
2017-04-26 0.000101 0.002003
2017-04-27 0.000103 0.003610
2017-04-28 0.000106 0.000784
2017-05-02 0.000107 -0.003470
2017-05-03 0.000108 -0.002661
2017-05-04 0.000108 -0.002544
2017-05-05 0.000108 -0.007780
2017-05-08 0.000109 -0.007871
2017-05-09 0.000108 0.000622
2017-05-10 0.000108 -0.009006
2017-05-11 0.000106 0.002855
2017-05-12 0.000102 0.007190
2017-05-15 0.000099 0.002178

243 rows × 2 columns

# 取2016-05-15的估值数据作为SMB和HML的计算标准
all_stocks_value = get_fundamentals(
    query(
        fundamentals.eod_derivative_indicator.pb_ratio,
        fundamentals.eod_derivative_indicator.market_cap)
    , '2016-05-15', interval = '1d' ,report_quarter = False)
all_stocks_value = all_stocks_value.major_xs(all_stocks_value.major_axis[0])
all_stocks_value['bp_ratio'] = 1/all_stocks_value['pb_ratio']
del all_stocks_value['pb_ratio']
all_stocks_value = all_stocks_value.dropna(how = 'any')
all_stocks_value
market_cap bp_ratio
000005.XSHE 7.47327e+09 0.152798
600602.XSHG 1.26845e+10 0.262
600651.XSHG 1.02955e+10 0.317914
600652.XSHG 1.14247e+10 0.182093
600654.XSHG 2.46982e+10 0.119852
600653.XSHG 7.64927e+09 0.291265
600601.XSHG 9.0649e+09 0.395977
000004.XSHE 3.09286e+09 0.0255849
000002.XSHE 2.69686e+11 0.373162
000001.XSHE 1.48095e+11 1.26662
000009.XSHE 1.95511e+10 0.228493
000012.XSHE 2.21438e+10 0.364804
600608.XSHG 2.9762e+09 0.00107698
600604.XSHG 1.79126e+10 0.162396
000016.XSHE 1.10043e+10 0.256575
600605.XSHG 2.66546e+09 0.209617
600606.XSHG 1.42246e+11 0.384793
000011.XSHE 7.22327e+09 0.290833
000017.XSHE 5.53553e+09 0.00215181
000007.XSHE 5.49467e+09 0.0686625
000006.XSHE 9.77396e+09 0.45436
000020.XSHE 5.66322e+09 0.0556839
000008.XSHE 3.21549e+10 0.174077
000014.XSHE 3.55001e+09 0.200064
000018.XSHE 1.95209e+10 0.0697408
600609.XSHG 4.8733e+09 0.0540941
600610.XSHG 1.45265e+10 0.0793393
600611.XSHG 1.7526e+10 0.506791
600612.XSHG 2.08986e+10 0.227713
600613.XSHG 7.51973e+09 0.297832
... ... ...
300503.XSHE 3.904e+09 0.160994
603520.XSHG 4.9488e+09 0.160671
603919.XSHG 7.8176e+09 0.193431
002789.XSHE 4.22971e+09 0.242442
300505.XSHE 3.73627e+09 0.152061
601020.XSHG 1.16376e+10 0.120376
300484.XSHE 8.79268e+09 0.0563768
603861.XSHG 9.65885e+09 0.182655
300506.XSHE 4.482e+09 0.114185
002792.XSHE 1.035e+10 0.167003
002791.XSHE 9.24963e+09 0.243582
300474.XSHE 1.35543e+10 0.0598795
603028.XSHG 5.04749e+09 0.129406
603798.XSHG 4.838e+09 0.143127
603701.XSHG 4.1552e+09 0.0704265
002793.XSHE 4.499e+09 0.0789129
603868.XSHG 2.09829e+10 0.0595444
300508.XSHE 5.25528e+09 0.0384578
603726.XSHG 3.75091e+09 0.121014
300509.XSHE 4.1096e+09 0.080525
603029.XSHG 3.42651e+09 0.148427
603822.XSHG 3.2208e+09 0.128284
002795.XSHE 4.566e+09 0.0496047
300507.XSHE 5.38027e+09 0.0665531
603528.XSHG 6.02886e+09 0.120557
300511.XSHE 7.0785e+09 0.0970676
300510.XSHE 2.47899e+09 0.124228
603101.XSHG 4.908e+09 0.133595
002796.XSHE 1.9864e+09 0.133518
002797.XSHE 4.05841e+10 0.153226

2835 rows × 2 columns

# 拿到所有股票的日收益率数据
all_price_change_rate = get_price_change_rate(list(all_stocks_value.index),start_date='20160514', end_date='20170515')
all_price_change_rate

results matching ""

    No results matching ""