用python分析资产收益的典型化事实

Python中文社区 Python中文社区     2023-01-08     777

关键词:

典型化事实(Stylized Facts)是在实际数据中发现的一些现象。“典型化事实”在经济学中非常重要,无论是宏观经济学还是贸易、金融还是产业经济学,在理论的发展中都扮演着非常重要的角色,因而如果能发现一些“典型化事实”,对经济学的理论研究和之后的实证研究是非常重要的。扫描本文最下方二维码获取全部完整源码和Jupyter Notebook 文件打包下载。

典型化事实(Stylized Facts)是出现在许多资产回报(跨时间和市场)中的统计属性。了解它们很重要,因为当我们构建代表资产价格动态的模型时,模型必须能够捕获这些属性。

下面我们使用从 1985 年到 2018 年标普 500 指数的每日回报收益来分析五个典型化事实。

我们从雅虎财经下载标准普尔 500 指数价格并计算收益。使用以下代码导入所有需要的库:

import pandas as pd 
import numpy as np
import yfinance as yf
import seaborn as sns 
import scipy.stats as scs
import statsmodels.api as sm
import statsmodels.tsa.api as smt

在本节中,我们将用 Python去发现标准普尔 500 指数系列中的五个典型化事实。

df = yf.download('^GSPC', 
                 start='1985-01-01', 
                 end='2018-12-31',
                 progress=False)


df = df[['Adj Close']].rename(columns='Adj Close': 'adj_close')
df['log_rtn'] = np.log(df.adj_close/df.adj_close.shift(1))
df = df[['adj_close', 'log_rtn']].dropna(how = 'any')

一、资产收益的非高斯分布

运行以下步骤,通过绘制收益直方图和 Q-Q 图来发现第一个事实的存在。

1、使用观察到的收益的均值和标准差计算正态概率密度函数 (PDF):

r_range = np.linspace(min(df.log_rtn), max(df.log_rtn), num=1000)
mu = df.log_rtn.mean()
sigma = df.log_rtn.std()
norm_pdf = scs.norm.pdf(r_range, loc=mu, scale=sigma)

2、绘制直方图和 Q-Q 图:

fig, ax = plt.subplots(1, 2, figsize=(16, 8))


# histogram
sns.distplot(df.log_rtn, kde=False, norm_hist=True, ax=ax[0])                                    
ax[0].set_title('Distribution of S&P 500 returns', fontsize=16)                                                    
ax[0].plot(r_range, norm_pdf, 'g', lw=2, 
           label=f'N(mu:.2f, sigma**2:.4f)')
ax[0].legend(loc='upper left');


# Q-Q plot
qq = sm.qqplot(df.log_rtn.values, line='s', ax=ax[1])
ax[1].set_title('Q-Q plot', fontsize = 16)


# plt.tight_layout()
# plt.savefig('images/ch1_im10.png')
plt.show()

执行上面的代码会产生下图:

我们可以使用直方图(显示分布的形状)和 Q-Q 图来评估收益的正态性。此外,我们可以打印汇总统计信息:

通过查看均值、标准差、偏度和峰度等指标,我们可以推断它们偏离我们在正态下的预期。此外,Jarque-Bera 正态性检验让我们有理由拒绝原假设,即在 99% 置信水平下分布是正态的。

二、波动集聚性

运行以下代码,通过绘制收益序列来发现第二个典型化事实。

1、可视化收益序列:

df.log_rtn.plot(title='Daily S&P 500 returns', figsize=(10, 6))

执行代码会产生下图:

我们可以观察到明显的波动集聚性——波动较大的正收益和负收益时期。

三、收益不存在自相关性

我们继续去发现第三个典型化事实。

1、定义用于创建自相关图的参数:

N_LAGS = 50
SIGNIFICANCE_LEVEL = 0.05

2、运行以下代码以创建收益的自相关函数 (ACF) 图:

acf = smt.graphics.plot_acf(df.log_rtn, 
                            lags=N_LAGS, 
                            alpha=SIGNIFICANCE_LEVEL)

执行上面的代码会产生下图:

只有少数值位于置信区间之外并且可以被认为具有统计显著性。我们可以假设已经验证了收益序列中没有自相关性。

四、平方/绝对收益的自相关性小且递减

通过创建平方和绝对收益的 ACF 图来研究第四个典型化事实。

1、创建 ACF 图:

fig, ax = plt.subplots(2, 1, figsize=(12, 10))


smt.graphics.plot_acf(df.log_rtn ** 2, lags=N_LAGS, 
                      alpha=SIGNIFICANCE_LEVEL, ax = ax[0])
ax[0].set(title='Autocorrelation Plots',
          ylabel='Squared Returns')


smt.graphics.plot_acf(np.abs(df.log_rtn), lags=N_LAGS, 
                      alpha=SIGNIFICANCE_LEVEL, ax = ax[1])
ax[1].set(ylabel='Absolute Returns',
          xlabel='Lag')

执行上面的代码会产生以下图:

我们可以观察到平方回报和绝对回报的自相关值很小且不断减小,这与第四种典型化事实一致。

五、杠杆效应

对于第五个事实,运行以下步骤来调查杠杆效应的存在。

1、将波动性度量计算为滚动标准偏差:

df['moving_std_252'] = df[['log_rtn']].rolling(window=252).std()
df['moving_std_21'] = df[['log_rtn']].rolling(window=21).std()

2、绘制所有系列以进行比较:

fig, ax = plt.subplots(3, 1, figsize=(18, 15), 
                       sharex=True)


df.adj_close.plot(ax=ax[0])
ax[0].set(title='S&P 500 time series',
          ylabel='Price ($)')


df.log_rtn.plot(ax=ax[1])
ax[1].set(ylabel='Log returns (%)')


df.moving_std_252.plot(ax=ax[2], color='r', 
                       label='Moving Volatility 252d')
df.moving_std_21.plot(ax=ax[2], color='g', 
                      label='Moving Volatility 21d')
ax[2].set(ylabel='Moving Volatility',
          xlabel='Date')
ax[2].legend()

我们现在可以通过将价格序列与(滚动)波动率指标进行可视化比较来研究杠杆效应:

这一事实表明,资产波动性的大多数衡量标准与其回报呈负相关,我们确实可以观察到价格下跌时波动性增加而价格上涨时波动性减少的模式。

E N D

扫描本文最下方二维码获取全部完整源码和Jupyter Notebook 文件打包下载。

长按扫码获取完整源码

净资产收益率roe对指数基金投资有什么作用?

...比较看好的指数基金》中我曾提到这个指标,今天来详细分析下。01什么是净资产收益率呢?很简单,就是净利润与净资产的比率,公式如下:净资产收益率=净利润/净资产ROE是衡量上市公司盈利能力的重要指标,ROE越高,盈利... 查看详情

专业人士解释杜邦分析法

我们在上一篇文章中给大家简单介绍了数据分析方法中的杜邦分析法,以及杜邦分析法的分析步骤,还有杜邦分析法的主要指标。杜邦分析法的主要指标有净资产收益率、总资产收益率、营业净利率、总资产周转率、净利润、权... 查看详情

python实现资产配置(1)----markowitz投资组合模型

参考技术A现假设有A,B,C,D,E五只股票的收益率数据((第二日收盘价-第一日收盘价)/第一日收盘价)),如果投资人的目标是达到20%的年收益率,那么该如何进行资产配置,才能使得投资的风险最低?更一般的问题,假设现有x1,x2,...,xn,n支风险... 查看详情

杜邦分析法公式

参考技术A杜邦分析法,又称杜邦财务分析体系,简称杜邦体系,是利用各主要财务比率指标间的内在联系,对企业财务状况及经济效益进行综合系统分析评价的方法。该体系是以净资产收益率为龙头,以资产净利率和权益乘数... 查看详情

用python实现资本资产定价模型(代码片段)

在本文中,我们将学习如何计算资本资产定价模型(CAPM)并获得贝塔系数。资本资产定价模型(CapitalAssetPricingModel简称CAPM)是由美国学者于1964年在资产组合理论和资本市场理论的基础上发展起来的,主要研究证券... 查看详情

多因子模型用啥数据

...关键问题。参考技术A多因子模型使用多个因素数据进行分析,数据可以是从金融投资交易中收集的价格、交易量、市场情绪等信息,或者是从其他行业的统计数据,如气候、政治、经济、社会等信息,也可以是从机器学习、人... 查看详情

acmchp2一致预期收益率:资本资产定价模型

...骤从而为我们设定了比较基准,同时CAPM发展出来的很多分析方法可以转用于主动量化投资。CAPM不是确定一致预期收益率的唯一方法,还有两种可以替代的方法:第一种方法是使用历史平均收益率,但是它的问题在于太过于静态... 查看详情

在稳定增长中寻找超额收益

...资产资产报酬率=利润总额/总资产经营管理能力。财务分析中,通常用管理费用、销售费用等在业务收入中的占比,以及资产、应收账款、存货等的周转率来表示公司的管理能力。本文同样 查看详情

用python中的蒙特卡洛模拟预测股票收益(代码片段)

蒙特卡洛方法(或蒙特卡洛实验)是一大类计算算法,它们依赖于重复随机采样来获得数值结果。基本思想是使用随机性来解决原则上可能是确定性的问题。它们通常用于物理和数学问题,并且在难以或不可能使... 查看详情

用pandas分析均线交叉策略收益率(代码片段)

...一篇文章中的均线交叉策略回测中获得的结果(《用Python基于均线交叉策略进行回测》),并花一些时间更深入地挖掘权益曲线并生成一些关键绩效指标和一些有趣的数据分析。为完整起见,文末扫码加入宽客量... 查看详情

专业人士解释杜邦分析法

我们在上一篇文章中给大家讲解的杜邦分析法的指标关系说明,在这篇文章中我们给大家说一下杜邦分析法的分析思路。杜邦分析法需要从营业净利率、总资产周转率、权益乘数这几个方面考虑清楚,这样我们才能够真正掌握好... 查看详情

使用matlab分析风险之下的投资分配方案

1.discretereturns 讨论收益回报的离散性(例如,每天每周等)grossreturn:总收益,指的是(不计成本的)所有的收益netreturn通常称为净回报,指的是扣除所有成本的真正收益annualizedgrossreturn年化总收益annualized netreturn年化净收... 查看详情

可供出售金融资产的会计处理

可供出售金融资产的会计处理:可供出售金融资产应当以公允价值加上交易费用构成其入账成本,并以公允价值口径进行后续计量。公允价值变动形成的利得或损失,应当计入所有者权益(资本公积--其他资本公积),在该金融资... 查看详情

肖星老师《一本书读懂财报》经典语句摘录(下)实战篇

1.都有哪些财务分析的方法呢?同型分析恐怕是最常用的。这是一种结构分析。各个项目在利润表中分别占比多少就是利润表的结构;从收入到利润的过程中,每一个步骤都损耗了多少,这就是对利润表进行同型分析的成果。对... 查看详情

python分析股票收益(代码片段)

查看详情

数学建模matlab应用实战系列(九十一)-熵权法应用案例(附matlab和python代码)

前言这也是用来赋权重的一种算法。前面建模算法讲到了层次分析法,主要的缺点就是完全靠个人的评价主观性太强了,用来挑男友还是可以的,毕竟是你自己挑不用管别人。这篇要讲一个更加客观的赋权重的方法叫做熵权法。... 查看详情

python金融学基础——夏普比率(sharpe-ratio)和资产组合价值(portfolio-value)(代码片段)

...尝试预测未来的走向。从这节课开始,我们正式进入Python金融学基础,会介绍一些金融学的概念和实现方法。本节课主要以苹果、亚马逊、IBM、思科以及沃尔玛的股票市场价格为原始数据,分析这几只股票的资产组合... 查看详情

数字资产交易所量化交易系统开发

...用户容易被市场和情绪所影响判断,量化交易是用大数据分析制定策略,减少感性操作,减少操盘失误,尽量避免一失足成千古恨的后悔心理。量化交易并不是数字资产交易领域的原 查看详情