关于数据挖掘:R语言收益率和波动性模拟股票价格COMP226带自测题

38次阅读

共计 1880 个字符,预计需要花费 5 分钟才能阅读完成。

全文链接:http://tecdat.cn/?p=29581

在本工作表中,咱们将钻研价格、收益率和波动性。波动性通常用收益率的均方差来掂量,例如夏普比率的分母,它被用作危险的衡量标准。咱们将应用股票价格的均匀对数收益率和波动性(对数回报的均方差)来模仿股票价格。

价格和收益率

library(quantmod)
getSymbols("AAPL")
price_AAPL <- Ad(AAPL)
plot(price_AAPL, main = "AAPL prices")

咱们留神到的第一件事是,这个价格序列仿佛不是安稳的,也就是说,没有显著的平均价格(因而议论价格的均方差实际上没有意义)。应用这种非安稳工夫序列是十分有问题的——工夫序列剖析的大部分集中在安稳工夫序列上;在虚词工夫序列中应用工夫序列的第一步通常是导出安稳工夫序列,也就是说,一个随工夫变动具备恒定均值和均方差的工夫序列。因为价格不是安稳的,咱们将注意力转向股票的收益率。

returns_AAPL <- diff(log(price_AAPL)) 
plot(returns_AAPL, main = "AAPL % returns") 

请留神,在收益率图中有一些聚类,不是在收益率的符号中(这对交易 AAPL 股票间接有用),而是在收益率的幅度中,也就是说,今天的收益率可能在幅度上与明天的收益率类似(无论是正的还是负的)。除此之外,收益率比价格稳固得多。让咱们看看它们的柱状图。

hist(returns_AAPL, breaks = 100, col="brown") 

练习

查看当咱们应用简略收益率而不是对数收益率时,咱们方才看到的两个数字是否十分类似

解答

library(TTR)
dev.off()

请留神,简略的收益率直方图十分类似,但不完全相同。

收益率的散布仿佛有点像正态(高斯)散布。像布莱克 - 斯科尔斯期权定价公式这样的模型是基于收益率实际上是对数正态分布的假如。事实上,这只是对事实的近似——理论股价收益率比正态分布所暗示的更有可能呈现极值(也就是说,理论回报散布有肥尾)。

独立性怎么样?

这些收益率在工夫上是互相独立的吗?这里有一个疾速的办法来局部答复这个问题:

acf(returns_AAPL[-1], main = "Autocorrelation of returns") 

该自相关检查给定周期与将来周期之间的相关性。

请留神,间断收益率之间仿佛没有任何自相干。然而,咱们曾经留神到收益率幅度的一些聚类,这通常被称为稳定率聚类。应用 acf 反复下面的图表,但应用收益率的绝对值(应用函数 abs()取得)。你当初将察看到自相干。

解答

acf(abs(returns_AAPL[-1]), main = "Autocorrelation of absolute returns")
dev.off()

请留神上面新图中的自相干。

这些回报的平均值和均方差是多少?

> mu
[1] 0.001369495
> sigma
[1] 0.02572958

什么是波动性?

定义

稳定率是收益率的年化均方差。20 的稳定率意味着一年后资产价格从现值上涨或上涨超过 20% 的可能性约为三分之一。这是基于收益率是对数正态分布的假如,这不是真的,但它依然是一个有用的建模假如,至多作为终点。在 R 中,给定一系列每日价格,对数回报的年化均方差的计算如下:

sqrt(252) * sd(diff(log(priceSeriesDaily))) * 100

应用收益率模仿股票价格

仿佛对数收益率有一个稳固的均值和均方差。让咱们假如它们实际上是正态分布的,所以模仿股票价格的目标。假如对数收益率正态分布为均方差 μ 和均方差 sigma。那么咱们如何模仿价格?回忆一下对数收益率的定义:

重新安排咱们失去

因而,咱们将应用以下办法来模仿股票价格:

1. 设置一个初始化价格(在上面的代码中是 100)。2. 从正态分布中绘制一个随机数,均匀 μ 和均方差 sigma 是模仿的参数。这个数字将代表日志返回。3. 对日志返回进行指数运算,并将其与之前的价格相乘以取得新的价格。4. 反复步骤 2. 和 3. 进行许多模仿步骤。

练习

执行上述步骤以模仿价格过程并生成单个模仿价格轨迹,并绘制它以生成如下图的图形:

解答

plot(p, type = "l"
dev.off()

练习

将上一个练习中的模仿代码包装在一个函数中,并应用它来产生 6 种不同的模仿价格轨迹。应用

par(mfrow=c(3,3)) 

将它们放在 3×3 的网格中,以便能够直观地比拟。它们可能会产生如下内容:

解答

 
par(mfrow=c(3,3))
for (i in 1:6) dotion(simNumber=i)
dev.off()

正文完
 0