实证资产定价(Empirical asset pricing)已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍,也可以通过Pypi直接查看。

Pypi: pip install --upgrade EAP

Github: GitHub - whyecofiliter/EAP: empirical asset pricing

在Markowitz(1952)的均值-方差范式中,投资者在形成投资组合时只考虑均值和方差,并由此范式发展了CAPM。Arditi(1967,1971)提出了收益率的第三个矩——偏态,他表明,投资者对收益率分布呈负偏态的投资要求更高的回报率。Scott和Horvath(1980)将分析扩展到其他更高阶矩的预期回报。

Harvey and Siddique(2000)将系统偏态引入证券定价,由此将总偏态分为系统偏态(又称共偏态)和特质偏态。文献通常认为,共偏态与股票的未来收益率呈负相关,并且特质偏态是被分散的,这受到了一些文献的质疑(Kane,1982;Baberis and Huang,2008)。

总偏度定义为

共偏度定义为(Harvey and Siddique, 2000)

特异性偏度为

公式中的残差由下式计算

计算期为12个月。在这个演示中,数据集从2000年1月开始,从CSMAR数据集中收集。警告:请勿将此演示中的数据集用于任何商业目的。

# %% set system path
import sys,ossys.path.append(os.path.abspath(".."))# %% import data
import pandas as pdmonth_return = pd.read_hdf('.\\data\\month_return.h5', key='month_return')
company_data = pd.read_hdf('.\\data\\last_filter_pe.h5', key='data')
trade_data = pd.read_hdf('.\\data\\mean_filter_trade.h5', key='data')
beta = pd.read_hdf('.\\data\\beta.h5', key='data')
risk_premium = pd.read_hdf('.\\data\\risk_premium.h5', key='data')

数据预处理

# %% data preprocessing
# forward the monthly return for each stock
# emrwd is the return including dividend
month_return['emrwd'] = month_return.groupby(['Stkcd'])['Mretwd'].shift(-1)
# emrnd is the return including no dividend
month_return['emrnd'] = month_return.groupby(['Stkcd'])['Mretnd'].shift(-1)
# select the A share stock
month_return = month_return[month_return['Markettype'].isin([1, 4, 16])]# % distinguish the stocks whose size is among the up 30% stocks in each month
def percentile(stocks) :return stocks >= stocks.quantile(q=.3)month_return['cap'] = month_return.groupby(['Trdmnt'])['Msmvttl'].apply(percentile)# merge data
data = month_return[['Stkcd', 'Trdmnt', 'Mretwd']]
data['Date_merge'] = pd.to_datetime(data['Trdmnt'])
risk_premium['Date_merge'] = risk_premium.index
data = pd.merge(data, risk_premium[['MKT', 'SMB', 'HML', 'Date_merge']], on=['Date_merge']).dropna()

构建代理变量

# %% construct proxy variable
import numpy as np
import statsmodels.api as sm
from scipy.stats import skewskewness = pd.Series(index=data.index, dtype=float, name='skewness')
coskewness = pd.Series(index=data.index, dtype=float, name='coskewness')
idioskewness = pd.Series(index=data.index, dtype=float, name='idioskewness')
for i in data.groupby('Stkcd'):row, col = np.shape(i[1])for j in range(row-12):skewness.loc[i[1].index[j+11]] = skew(i[1].iloc[j:j+12, 2])endog = np.array([i[1].iloc[j:j+12, 4], i[1].iloc[j:j+12, 4]**2]).Tmodel_coskew = sm.OLS(i[1].iloc[j:j+12, 2], sm.add_constant(endog)).fit()coskewness.loc[i[1].index[j+11]] = model_coskew.params[2]model_idioskew = sm.OLS(i[1].iloc[j:j+12, 2], sm.add_constant(i[1].iloc[j:j+12, 4:7])).fit()idioskewness.loc[i[1].index[j+11]] = skew(model_idioskew.resid)return_company = pd.concat([data, skewness, coskewness, idioskewness, month_return[['cap', 'Msmvttl', 'Ndaytrd', 'emrwd']]], axis=1)

总偏度。数据集#1的结果与文献不一致,在单变量分析中,尽管由于绝对t值大于2.3,差异收益显著,但收益序列的顺序不一致。

在双变量分析中,由于绝对t值小于2.3,差异收益率不显著,这表明总偏度因子不提供超额收益。

# %% construct test_data for bivariate analysis
# dataset 1
from portfolio_analysis import Bivariate, Univariate
import numpy as np# select stocks whose size is among the up 30% stocks in each month and whose trading
# days are more than or equal to 10 days
test_data_1 = return_company[(return_company['cap']==True) & (return_company['Ndaytrd']>=10)]
test_data_1 = test_data_1[['emrwd', 'Msmvttl', 'skewness', 'Date_merge']].dropna()
test_data_1 = test_data_1[(test_data_1['Date_merge'] >= '2000-01-01') & (test_data_1['Date_merge'] <= '2019-12-01')]# Univariate analysis
uni_1 = Univariate(np.array(test_data_1[['emrwd', 'skewness', 'Date_merge']]), number=9)
uni_1.summary_and_test()
uni_1.print_summary_by_time()
uni_1.print_summary()=====================================================================
+---------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
|  Group  |   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9   |   10  |  Diff |
+---------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| Average | 0.008 | 0.008 | 0.007 | 0.009 | 0.007 | 0.009 | 0.009 | 0.009 | 0.008 | 0.011 | 0.003 |
|  T-Test | 8.576 | 8.419 | 7.786 | 9.093 | 7.652 | 9.199 | 9.362 | 8.877 | 8.584 |  10.6 | 2.362 |
+---------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+# Bivariate analysis
bi_1 = Bivariate(np.array(test_data_1), number=4)
bi_1.average_by_time()
bi_1.summary_and_test()
bi_1.print_summary_by_time()
bi_1.print_summary()
=====================================================================
+-------+---------+---------+---------+---------+---------+--------+
| Group |    1    |    2    |    3    |    4    |    5    |  Diff  |
+-------+---------+---------+---------+---------+---------+--------+
|   1   |  0.024  |  0.022  |  0.021  |  0.023  |  0.025  | 0.001  |
|       |  14.565 |  13.84  |  13.484 |  14.584 |  14.149 | 0.323  |
|   2   |  0.008  |  0.013  |   0.01  |  0.012  |  0.012  | 0.004  |
|       |  5.627  |  9.234  |  6.737  |  8.375  |  7.731  | 1.911  |
|   3   |  0.007  |  0.006  |  0.007  |  0.009  |  0.008  |  0.0   |
|       |  4.488  |  4.209  |  4.475  |  6.156  |  5.395  | 0.111  |
|   4   |  0.004  |  0.006  |  0.006  |  0.004  |  0.006  | 0.001  |
|       |  2.697  |  3.714  |  3.905  |  2.497  |   3.58  | 0.535  |
|   5   |  -0.003 |  -0.004 |  -0.003 |  -0.003 |  -0.002 |  0.0   |
|       |  -1.843 |  -2.713 |  -1.823 |  -2.029 |  -1.567 | 0.228  |
|  Diff |  -0.027 |  -0.026 |  -0.024 |  -0.026 |  -0.027 |  -0.0  |
|       | -11.849 | -11.725 | -10.724 | -11.715 | -12.268 | -0.094 |
+-------+---------+---------+---------+---------+---------+--------+

共偏度。数据集#2的结果与文献不一致,在单变量分析中,尽管由于绝对t值大于2.3,差异收益显著,但收益序列的顺序不一致。

在双变量分析中,由于绝对t值小于2.3,差异收益率不显著,这表明共偏态因子不提供超额收益。

# %% construct test_data for bivariate analysis
# dataset 2
from portfolio_analysis import Bivariate, Univariate
import numpy as np# select stocks whose size is among the up 30% stocks in each month and whose trading
# days are more than or equal to 10 days
test_data_2 = return_company[(return_company['cap']==True) & (return_company['Ndaytrd']>=10)]
test_data_2 = test_data_2[['emrwd', 'Msmvttl', 'coskewness', 'Date_merge']].dropna()
test_data_2 = test_data_2[(test_data_2['Date_merge'] >= '2000-01-01') & (test_data_2['Date_merge'] <= '2019-12-01')]# Univariate analysis
uni_2 = Univariate(np.array(test_data_2[['emrwd', 'coskewness', 'Date_merge']]), number=9)
uni_2.summary_and_test()
uni_2.print_summary_by_time()
uni_2.print_summary()=====================================================================
+---------+-------+-------+-------+-------+-------+-------+-------+-------+--------+-------+-------+
|  Group  |   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9    |   10  |  Diff |
+---------+-------+-------+-------+-------+-------+-------+-------+-------+--------+-------+-------+
| Average | 0.008 | 0.009 | 0.007 |  0.01 | 0.007 | 0.009 | 0.009 | 0.008 | 0.009  | 0.011 | 0.003 |
|  T-Test | 8.241 | 9.001 | 7.365 | 9.666 | 7.632 | 9.234 | 9.014 | 8.691 | 10.114 | 11.73 | 2.595 |
+---------+-------+-------+-------+-------+-------+-------+-------+-------+--------+-------+-------+# Bivariate analysis
bi_2 = Bivariate(np.array(test_data_2), number=4)
bi_2.average_by_time()
bi_2.summary_and_test()
bi_2.print_summary_by_time()
bi_2.print_summary()
=====================================================================
+-------+---------+---------+--------+--------+---------+--------+
| Group |    1    |    2    |   3    |   4    |    5    |  Diff  |
+-------+---------+---------+--------+--------+---------+--------+
|   1   |  0.022  |  0.022  | 0.023  | 0.022  |  0.025  | 0.003  |
|       |  14.748 |  13.599 | 15.127 | 13.191 |  13.98  | 1.465  |
|   2   |  0.009  |  0.012  | 0.009  | 0.011  |  0.013  | 0.004  |
|       |  6.551  |  8.696  | 5.983  | 7.881  |  9.526  | 1.958  |
|   3   |  0.007  |  0.008  | 0.007  | 0.008  |  0.006  | -0.001 |
|       |  4.559  |  4.966  | 4.612  | 5.373  |  4.528  | -0.26  |
|   4   |  0.006  |  0.005  | 0.004  | 0.005  |  0.006  |  0.0   |
|       |  3.778  |  2.985  | 2.629  | 3.513  |  3.853  |  0.02  |
|   5   |  -0.002 |  -0.004 | -0.002 | -0.004 |  -0.002 |  0.0   |
|       |  -1.129 |  -2.603 | -1.222 | -2.493 |  -1.143 | 0.011  |
|  Diff |  -0.024 |  -0.026 | -0.025 | -0.026 |  -0.027 | -0.003 |
|       | -11.291 | -11.861 | -11.57 | -11.34 | -11.015 | -1.08  |
+-------+---------+---------+--------+--------+---------+--------+

特质性偏度。数据集#3的结果与文献一致,即在单变量分析中,由于绝对t值小于2.3,差异收益不显著。

在双变量分析中,由于绝对t值小于2.3,差异收益率不显著,这表明特质偏度因子不提供超额收益。

# %% construct test_data for bivariate analysis
# dataset 3
from portfolio_analysis import Bivariate, Univariate
import numpy as np# select stocks whose size is among the up 30% stocks in each month and whose trading
# days are more than or equal to 10 days
test_data_3 = return_company[(return_company['cap']==True) & (return_company['Ndaytrd']>=10)]
test_data_3 = test_data_3[['emrwd', 'Msmvttl', 'idioskewness', 'Date_merge']].dropna()
test_data_3 = test_data_3[(test_data_3['Date_merge'] >= '2000-01-01') & (test_data_3['Date_merge'] <= '2019-12-01')]# Univariate analysis
uni_3 = Univariate(np.array(test_data_3[['emrwd', 'idioskewness', 'Date_merge']]), number=9)
uni_3.summary_and_test()
uni_3.print_summary_by_time()
uni_3.print_summary()
=====================================================================
+---------+--------+-------+-------+-------+-------+--------+-------+-------+-------+-------+-------+
|  Group  |   1    |   2   |   3   |   4   |   5   |   6    |   7   |   8   |   9   |   10  |  Diff |
+---------+--------+-------+-------+-------+-------+--------+-------+-------+-------+-------+-------+
| Average |  0.01  | 0.008 | 0.008 | 0.009 | 0.009 | 0.011  | 0.006 | 0.009 | 0.008 |  0.01 | 0.001 |
|  T-Test | 10.385 | 7.249 | 8.548 | 9.025 | 8.954 | 11.601 | 6.609 | 9.145 | 7.674 | 9.964 |  0.43 |
+---------+--------+-------+-------+-------+-------+--------+-------+-------+-------+-------+-------+# Bivariate analysis
bi_3 = Bivariate(np.array(test_data_3), number=4)
bi_3.average_by_time()
bi_3.summary_and_test()
bi_3.print_summary_by_time()
bi_3.print_summary()
=====================================================================
+-------+---------+---------+---------+---------+---------+--------+
| Group |    1    |    2    |    3    |    4    |    5    |  Diff  |
+-------+---------+---------+---------+---------+---------+--------+
|   1   |  0.023  |  0.021  |  0.026  |   0.02  |  0.026  | 0.003  |
|       |  12.798 |  13.936 |  15.498 |  13.077 |  13.947 |  1.32  |
|   2   |  0.012  |  0.011  |  0.012  |   0.01  |   0.01  | -0.002 |
|       |  7.916  |  7.402  |  8.251  |  7.194  |  6.609  | -1.04  |
|   3   |  0.008  |  0.009  |  0.008  |  0.004  |  0.008  |  -0.0  |
|       |  5.345  |  6.356  |  4.972  |  2.965  |  5.339  | -0.032 |
|   4   |  0.005  |  0.003  |  0.006  |  0.007  |  0.005  |  0.0   |
|       |  3.067  |  2.279  |  3.414  |  4.156  |  3.488  | 0.205  |
|   5   |  -0.003 |  -0.002 |  -0.002 |  -0.003 |  -0.003 |  -0.0  |
|       |  -2.029 |  -1.535 |  -1.256 |  -1.865 |  -2.183 | -0.138 |
|  Diff |  -0.026 |  -0.023 |  -0.028 |  -0.023 |  -0.029 | -0.003 |
|       | -10.992 | -10.301 | -12.114 | -10.841 | -12.072 | -1.123 |
+-------+---------+---------+---------+---------+---------+--------+

偏度因子(skewness)——投资组合分析(EAP.portfolio_analysis)相关推荐

  1. 市场因子(Market Factor)——投资组合分析(EAP.portfolio_analysis)

    实证资产定价(Empirical asset pricing)已经发布于Github. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍. Github: GitHub - ...

  2. 投资组合的风险因子调整——投资组合分析(EAP.portfolio_analysis)

    实证资产定价(Empirical asset pricing)已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍,也可以通过Pypi直接查看 ...

  3. 投资组合分析:portfolio_analysis.Tangenvy_portfolio(切点组合)

    实证资产定价(Empirical asset pricing)已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍,也可以通过Pypi直接查看 ...

  4. 盈利因子(Profitability factor)——投资组合分析(EAP.portfolio_analysis)

    本文根据Bail et al.的著作Empirical Asset Pricing编写相关程序,投资组合分析的模块是EAP.portfolio_analysis.本文的Package已发布于Githu ...

  5. 投资组合分析:EAP.portfolio_analysis

    投资组合分析是实证资产定价中最常用的工具之一.它的主要用途是研究因子对资产价格的影响,主要方法是通过构建投资组合(portfolios)和投资组合差分(differenced portfolios), ...

  6. R语言使用moments包计算偏度(Skewness)和峰度(Kurtosis)实战:计算偏度(Skewness)和峰度(Kurtosis)、确定样本数据是否具有与正态分布匹配的偏度和峰度(假设检验)

    R语言使用moments包计算偏度(Skewness)和峰度(Kurtosis)实战:计算偏度(Skewness)和峰度(Kurtosis).确定样本数据是否具有与正态分布匹配的偏度和峰度(假设检验) ...

  7. 使用Python进行交易策略和投资组合分析

    我们将在本文中衡量交易策略的表现.并将开发一个简单的动量交易策略,它将使用四种资产类别:债券.股票和房地产.这些资产类别的相关性很低,这使得它们成为了极佳的风险平衡选择. 动量交易策略 这个策略是基于 ...

  8. 投资组合风险收益率公式_投资组合分析的基础收益和亏损

    投资组合风险收益率公式 In this story, we are going to do some basic portfolio returns analysis in python. 在这个故事 ...

  9. 有效前沿和最优投资组合matlab,matlab 实验名称:投资组合分析 实验性质:综合性和研究探索性 实 联合开发网 - pudn.com...

    matlab 所属分类:matlab例程 开发工具:matlab 文件大小:5918KB 下载次数:30 上传日期:2017-12-27 13:31:24 上 传 者:waffle 说明:  实验名称 ...

最新文章

  1. Pycharm 和 vscode 多光标、折叠代码和代码格式化快捷键
  2. 真的有人在偷听我们讲话么?
  3. activity 启动模式_Android世界:Activity的启动模式及其适用范围
  4. SAP S/4HANA Service Management和SAP FSM基于CPI的集成场景介绍
  5. 直博清华!陕西女学霸:从农村走出,3次斩获国奖,还被央视采访
  6. oracle 并行用索引,分区索引并行导致的性能问题
  7. spring事务到底用于service层还是dao层
  8. Eclipse中Java Web开发插件安装
  9. 空格、句读、标点:从近代报刊到现代汉字标点符号萌芽与发展的考据
  10. 不是复制硅谷,而是与硅谷建立人脉
  11. Golang 基础:原生并发 goroutine channel 和 select 常见使用场景
  12. 79元限抢Jeep专柜「冰丝速干裤」!穿上它让你“胯下生风”,比裸奔还爽!
  13. PointNet 翻译:
  14. 生成微信支付二维码及微信支付
  15. ubuntu下实现和windows共享文档
  16. 如何更改 think-cell 图表的默认颜色?使用教程
  17. 2的N次方是多少位数
  18. 免费 内网穿透工具 实测好用
  19. python bottle使用实例
  20. python爬虫解决频繁访问_爬虫遇到IP访问频率限制的解决方案

热门文章

  1. [病毒木马] 利用 Windows 任务计划程序
  2. 一份触目惊心的性犯罪方案
  3. 根据格林公式判断多边形顺时针和逆时针
  4. 格林公式的原理理解(考研数学)
  5. 接了很多私活之后的感触
  6. arcgis js 完整悬停效果实现
  7. scrollLeft
  8. 计算机软件模型改进,基于改进Kano模型的服务优化研究_樊根耀.docx 计算机软件及应用...
  9. Unicode编码问题 如:\u529e\u7406\u9996\u6c7d\u52a0\u6cb9
  10. Mule封装DB以及Mule Rest接口开发