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