简单收益率
假设上周末,你和两个朋友坐在咖啡馆里聊天。朋友 Rick 说,他买的股票昨天涨了整整 1 美元。另一个朋友 Morty 说,这算什么,他的股票昨天涨了 10 美元。你认为哪一个投资更好? 这个问题无法回答,原因在于,你不知道两只股票的价格水平。 假设 Rick 持有的是 Global Eagle Entertainment(ENT)公司的股票,这只股票的价格在 5 美元左右,而 Morty 持有的是 Google(GOOGL) 公司股票,价格在 900 美元左右。买一股 GOOGL 的金额,可以用来买 180 股 ENT。Rick 和 Morty 都用 900 美元进行股票投资,Rick 昨天收益了 180 美元,而 Morty 只收益了 10 美元,很显然 Rick 的投资更好。 从这个简单的例子中,我们知道了价格(绝对指标)的不可靠。我们需要一个相对指标来比较不同的投资机会,那就是收益率。 假设P t表示t时刻的资产价格,如果该资产不分红,则单期的简单收益率为
收益率相对于价格的优越性,除了上述例子体现的可比性之外,还有优良的统计性质(例如平稳性)
对数收益率
假设P t表示t时刻的资产价格,如果该资产不分红,则单期的对数收益率为
image.png
对数收益率也具有可比性和平稳性。相较于简单收益率,对数收益率最大的优点是它在时间上具有可加性。 k 期的对数收益率为
image.png
对数收益率和简单收益率之间存在如下关系
image.png
简单收益率它反映的价格的增长率,而对数收益率是连续复利的收益率
金融数据来源
- FRED
- Yahoo Finance
- Bloomberg
- CEIC
- RESSET
- CSMAR
-
WIND
常用金融类R工具包
quantmod 工具包为金融中建立定量模型、数据获取、作图等一系列用途提供了许多函数。
fBasics 工具包中有许多可以用来探索金融收益率序列基本性质的函数,包括分布性质、参数估计和假设检验。
tseries 工具包主要用于时间序列分析,它提供了一些统计检验函数。
收益率序列特征
平稳性
平稳的随机过程分为严平稳过程(strictly stationary process)和弱平稳过程(weakly stationary process)。严平稳是指随机变量的联合分布不随时间发生改变,这在现实生活中很难实现。弱平稳是指随机变量的一阶矩(期望)不随时间改变,且相同时间间隔的随机变量之间的协方差保持不变(时间间隔取 0 可以推出方差不变)。 时间序列可以看作随机过程的一次实现,因此也分为平稳序列和非平稳序列。通常假设收益率序列是弱平稳序列。
下图是 2012 年 9 月 27 日至 2017 年 9 月 27 日 Google 公司股票价格的时间序列图。从图中可以看出,价格序列是非平稳的,呈现出明显的上升趋势。
下图是 Google 公司股票的简单收益率和对数收益率时间序列图。从图中可以看出,两个序列都围绕一个水平值进行上下波动,没有上升或下降的趋势,因而是平稳序列,相对于非平稳的价格,我们更偏好平稳的收益率。 我们还发现,两个图形的形状几乎完全相同,这是因为我们选取的日度数据,时间间隔很小,收益率非常接近 0,简单收益率和对数收益率近似相等。
image.png
尖峰、厚尾、左偏
尖峰、厚尾、左偏这三个特征都是相对于正态分布来说的,所以把它们放在一起。 下图是均值和方差相同的两个分布的概率密度图形。其中,灰色部分是对数收益率的概率直方图,而棕色虚线是正态分布的概率密度曲线。可以看出,相对于正态分布,对数收益率呈现明显的尖峰厚尾特征,这意味着出现极端值的可能性更大。 左偏是指分布的尾巴向左拖曳,意味着出现负极端值的概率进一步增大,因此对金融资产进行风险管理就至关重要了。从下图中并不能看到明显的左偏趋势。
image.png
下图为对数收益率和正态分布随机变量的 Quantile-Quantile Plot,我们来看看它的形成过程。 假设收益率序列为{rt},r1是对数收益率分布的y1阶分位数。我们在正态分布中找到r1,发现它是正态分布的x1阶分位数。
(x1,y1)就形成了图中的一个棕色小圈。如果收益率序列服从正态分布,那么棕色小圈应该完全落在图中那条直线上,棕色小圈与直线偏离越大,收益率越不服从正态分布。 我们看 Q-Q plot 两端的棕色小圈,发现它们偏离直线较远,这说明收益率可能具有尖峰、厚尾、左偏的特征。
image.png
波动聚集
下图是对数收益率的时间序列图,可以看出,大的价格变动往往结群出现。也就是说,大的价格变动跟着大的价格变动,小的价格变动跟着小的价格变动,这就是波动聚集。波动率是衡量金融风险最常用的指标,波动聚集描述的是波动率在时间上的相关性。
image.png
长记忆性
长记忆性是指序列的自相关性随时间衰减很缓慢(比指数衰减缓慢)。从下面的自相关图可以看出,对数收益率在很长的时间范围内都呈现出小而显著的自相关性,因而具有长记忆性。
image.png
获取数据和预处理
> library(quantmod)
> library(fBasics)
> library(tseries)
>
> dat <- getSymbols('GOOGL', from = '2012-09-27', to = '2017-09-27')
> dim(GOOGL)
[1] 1257 6
> head(GOOGL)
GOOGL.Open GOOGL.High GOOGL.Low GOOGL.Close GOOGL.Volume GOOGL.Adjusted
2012-09-27 380.3553 381.8018 376.2012 378.6286 7854300 378.6286
2012-09-28 377.4525 380.0300 375.9510 377.6276 5561400 377.6276
2012-10-01 379.9049 382.8829 378.4835 381.2713 6329600 381.2713
2012-10-02 382.9830 383.3784 375.5105 378.8739 5574800 378.8739
2012-10-03 378.2383 382.3423 376.4765 381.6316 4412100 381.6316
2012-10-04 381.7567 385.3303 380.0801 384.4094 4903400 384.4094
可以看到,我们的数据包含 1257 个观测值(样本),6 个变量分别是开盘价、最高价、最低价、收盘价、交易量和调整后的收盘价。
> GOOGL.simrtn <- diff(GOOGL[,6])/c(1, GOOGL[1:1256,6])
> GOOGL.logrtn <- diff(log(GOOGL[,6]))
> head(GOOGL.simrtn)
GOOGL.Adjusted
2012-09-27 NA
2012-09-28 -0.002643770
2012-10-01 0.009648780
2012-10-02 -0.006287911
2012-10-03 0.007278810
2012-10-04 0.007278752
> head(GOOGL.logrtn)
GOOGL.Adjusted
2012-09-27 NA
2012-09-28 -0.002647271
2012-10-01 0.009602528
2012-10-02 -0.006307764
2012-10-03 0.007252448
2012-10-04 0.007252390
由于是日度数据,简单收益率和对数收益率非常接近。并且由于差分的缘故,两个序列的第一个值都变成了 NA。
时间序列图
> chartSeries(GOOGL, theme="white")
image.png
> chartSeries(GOOGL, theme="white", TA=NULL)
image.png
> tdx <- c(1:length(GOOGL[,6]))/250 + 2012.75
> plot(tdx, GOOGL[,6], type='l', xlab='year', ylab='daily price', main='GOOGL [2012/09/27-2017/09/27')
> grid()
> abline(v=2016.75, lwd=2, lty=1, col='grey')
> abline(h=720, lwd=3, lty=3, col='grey30')
image.png
接下来我们如法炮制收益率的时间序列图
> chartSeries(GOOGL.simrtn, theme='white')
image.png
> chartSeries(GOOGL.logrtn, theme='white')
image.png
> simrtn <- as.numeric(GOOGL.simrtn[2:1257])
> logrtn <- as.numeric(GOOGL.logrtn[2:1257])
> tdx2 <- c(1:length(logrtn))/250 + 2012.75
> par(mfrow=c(2, 1))
> plot(tdx2, simrtn, type='l', xlab='year', ylab='simple return')
> plot(tdx2, logrtn, type='l', xlab='year', ylab='log return')
image.png
概率分布图
接下来画对数收益率的概率分布图,将它与正态分布图对比。
> hist(logrtn, breaks=60, col='grey', xlab='', main='log return', prob=T)
> x <- seq(min(logrtn), max(logrtn), 0.001)
> y <- dnorm(x, mean=mean(logrtn), sd=sd(logrtn))
> lines(x, y, col='brown', lwd=2, lty=2)
image.png
Q-Q plot 和 ACF plot
> qqnorm(logrtn, col='brown', ylab='quantile of log returns', xlab='normal quantile')
> qqline(logrtn)
> acf(logrtn, lag=40, main='log returns')
image.png
概率统计值
> basicStats(logrtn)
logrtn
nobs 1256.000000
NAs 0.000000
Minimum -0.083455
Maximum 0.150645
1. Quartile -0.005930
3. Quartile 0.007616
Mean 0.000722
Median 0.000460
Sum 0.906586
SE Mean 0.000391
LCL Mean -0.000046
UCL Mean 0.001489
Variance 0.000192
Stdev 0.013863
Skewness 1.460489
Kurtosis 18.532233
对数收益率序列共 1256 个观测值,0 个 NA 值,最小值、最大值、1/3 分位数、2/3 分位数、均值、中位数等统计量也一应俱全。特别注意峰度 Kurtosis 为 18.532233,大于 3,说明它相对于正态分布具有尖峰厚尾特征。偏度 Skewness 为 1.460489,大于 0,说明是右偏分布,这与金融收益率经常呈现左偏分布的经验相悖。
> normalTest(logrtn, method='jb')
Title:
Jarque - Bera Normalality Test
Test Results:
STATISTIC:
X-squared: 18487.7818
P VALUE:
Asymptotic p Value: < 2.2e-16
Description:
Thu Nov 19 07:32:44 2020 by user: Administrator
检验统计量非常大,p 值非常小,应当拒绝原假设。对数收益率不服从正态分布。
> adf.test(logrtn)
Augmented Dickey-Fuller Test
data: logrtn
Dickey-Fuller = -11.508, Lag order = 10, p-value = 0.01
alternative hypothesis: stationary
Warning message:
In adf.test(logrtn) : p-value smaller than printed p-value
值小于 0.01,则可以在 1% 的显著性水平下拒绝原假设,接受备择假设,对数收益率序列是平稳序列。
网友评论