乐趣区

关于数据挖掘:拓端tecdatR语言做复杂金融产品的几何布朗运动的模拟

原文链接:http://tecdat.cn/?p=5334

几何布朗运动(GBM)是模仿大多数依赖某种模式的门路依赖的金融工具的规范主力。尽管 GBM 基于有依据的实践,但人们永远不应遗记它的最后目标 – 粒子静止的建模遵循严格的正态分布脉冲。根本公式由下式给出:

规范维纳过程代表翻新。在对气体进行建模时成果很好,在财务建模方面存在一些重大的缺点。问题是维纳过程有两个十分严格的条件:

a)翻新通常是分布式的,均匀零和方差为 tb)翻新是独立的

当初,至多有一些金融市场数据裸露的人都晓得股票回报不满足第一个条件,有时甚至不满足第二个条件。广泛的共识是,股票收益是扭曲的,是无效的,并且尾巴不平均。尽管股票收益趋于收敛于失常散布且频率递加(即月收益率比日收益率更失常),但大多数学者会批准 t 散布或 Cauchy 散布更适宜收益。

然而,在实践中,大多数人在模仿布朗运动时只是采纳正态分布,并承受由此产生的资产价格不是 100%精确。另一方面,我不满足于这种半解决方案,我将在上面的例子中展现自觉信赖 GBM 的老本是多少。我提出了一种伪布朗办法,其中随机翻新是从教训回报的核密度估计而不是假如的正态分布中采样的。这种办法的益处在于它产生的后果更靠近于过来察看到的后果而没有齐全复制过来(这将是间接从过来的翻新中抽样随机翻新的后果)。

介绍性例子

在咱们进入乏味的局部之前,咱们展现了市场上节约了多少钱,咱们从一个简略的例子开始。咱们须要加载三个包及其依赖项(您能够在页面底部下载此帖子的 R -)

install.packages("quantmod")

require(quantmod)

对于咱们的第一个例子,咱们将尝试模仿 AT&T 的回报。以下命令容许咱们从雅虎财经下载价格信息并计算每月日志回报为了确定我在开始时所做的观点,咱们将比拟回报散布与正态分布。

att <- getSymbols("T", from = "1985-01-01", to = "2015-12-31", auto.assign = FALSE)
plot(density(attr), main = "Distribution of AT&T Returns")
rug(jitter(attr))

即便没有艺术史硕士学位,大多数人也会批准这两行不匹配。对于那些不依赖于这种视觉办法的人来说,牢靠的 Kolmogorov-Smirnov 测试提供了一种更正式的办法。

set.seed(2013)
ks.test(attr, rnorm(n = length(attr), mean = mean(attr), sd = sd(attr)))

测试返回的 p 值为 0.027,这远远不够(p 值越小,咱们必须得出的论断是两个散布不同)。接下来咱们设置规范 GBM 性能。我齐全分明各种 GBM 函数作为泛滥包的一部分存在。尽管如此,我还是决定创立本人的函数,以使外部工作更加通明。

m((mu * dt * x) + #drift
rnorm(1, mean = 0, sd = 1) * sqrt(dt) * sigma * x) #random innovation
x
}

在这个简略的函数中(我晓得有更优雅的办法来实现这一点,但后果放弃不变)rnorm 函数充当 Wiener 过程驱动程序。毋庸置疑,这并不尊重咱们下面所看到的。相比之下,我的伪布朗函数从过来教训回报的核密度估计中抽样随机翻新。

pseudoGBM <- function(x, rets, n, ...) {
N <
y\[\[i\]\] <- x + x * (mean(rets) + samp\[i\])
x <- y\[\[i\]\]
}
return(y)
}

不可否认,这个函数有点简洁,因为它假如动态增量(即 dt = 1)并且简直不须要用户输出。它只须要一个起始值(x),一个过来返回的向量(rets)和指定的门路长度(n)。… 输出容许用户将其余命令传递给密度函数。这使用户能够通过增加带宽命令(bw =)来管制核密度估计的平滑度。没有任何进一步的麻烦,让咱们开始应用上述性能进行模仿。在第一个例子中,咱们仅应用起始值 x 中的两个函数来模仿一个价格门路,即系列中的最初一个价格。要查看两个办法的执行状况,咱们计算模仿序列的回报并将它们的散布与教训散布进行比拟。

x <- as.numeric(tail(att$T.Adjusted, n = 1))
set.seed(2013)

attPGBMr <- diff(log(attPGBM))\[-1\]
d1 <- density(attr)
d2 <- density(attGBMr)
d3 <- density(attPGBMr)
plot(range(d1$x, d3$x), range(d1$y, d3$y), type = "n",
ylab = "Density", xlab = "Returns", main = "Comparison of Achieved Densities")
lines(d1, col = "black", lwd = 1)
lines(d2, col = "red", lty = 2)
lines(d3, col = "blue", lty = 3)

显然,咱们看到 PGBM 函数(蓝线)在产生靠近教训回报散布(黑线)的回报时优于规范 GBM 函数(红线)。同样,要害(或视觉上能干)的读者能够查看 KS 测试的后果。

ks.test(attr, attPGBMr)

ks.test(attr, attGBMr)

咱们再次看到 PGBM 函数(p 值 = 0.41)远远优于 GBM 函数(p 值 = 0.02)。

高级示例

正如所承诺的那样,咱们的第二个例子将展现当一个人在不能代表根底数据时谬误地假如正态分布时,在线上有多少钱。自从金融黑暗时代醒来以来,欧洲特地体现出对结构性金融产品的渴望,这些产品能够参加股票市场,同时限度或打消上行危险。此类证券通常依赖于门路,因而通常应用 GBM 进行建模。

咱们将应用 Generali Germany 提供的一种特定产品 – Rente Chance Plus – 这是我开发 PGBM 性能的最后起因。当我在私人银行工作时,我的工作是评估这个特定的安全性,从基于 GBM 的规范蒙特卡罗模仿开始,但很快意识到这还不够。Rente Chance Plus 提供 20%参加 EUROSTOXX 50 指数下限至 15%的下限,初始投资和实现收益均无上行。安全性在每年年底评估。只管 Generali 能够在 20 年的投资期内自在扭转参与率和资本化率,但为了论证,咱们将假如这些因素放弃不变。

从下面反映咱们的程序,咱们首先从雅虎财经下载 EUROSTOXX 50 价格信息。

eu <- getSymbols("^STOXX50E", from = "1990-01-01", to = "2015-12-31", auto.assign = FALSE)

接下来,咱们看看数据与正态分布的拟合水平如何,或者说如许蹩脚。

plot(density(eur), main ibution of EUROSTOXX 50 Returns")

ks.tst(eu.r, rnm(n = length(eu.r), mean = mean(eu.r), sd = sd(eu.r)))

从严格的视角来看,这看起来比 AT&T 散布更蹩脚。EUROSTOXX 的回报显然是负面偏差,有点 leptokurtic。KS 测试返回 p 值为 0.06,确认视觉不匹配。当初咱们曾经确定正态分布不是最合适的,咱们能够看看谬误地假如它的结果。咱们将应用规范 GBM 和我的 PGBM 函数运行 10,000 次迭代的模仿并比拟后果(如果您正在复制以下代码,请在期待时给本人喝杯咖啡。这将破费一些工夫来运行)。

x <- as.numer

SIM1 <- as.data.frame(matrix(replicate(10000, {eu.GBM <- myGBM(x=x, mu = mean(eu.r), sigma = sd(SIM2 <- as.data.frame(matrix(replicate(10000, {eu.PGBM <- pseudoGBM(x = x, n = 240, rets = eu.r)}), ncol = 1000, 10000), SIM1\[seq(0, 240, 12), \])), start = c(2016), frequency = 1)

sim2 <- ts(as.matrix(rbind(rep(x, 10000), SIM2\[seq(0, 240, 12), \])), start = c(2016), frequency = 1)

当然,咱们对 EUROSTOXX 50 的价格水平不感兴趣,而是在参与率和下限率的束缚下评估的回报。好消息是最艰难的局部就在咱们身后。计算回报和利用束缚非常简单。对后果进行调整并不容易。

s1.r <-(sim2))

, s2.r\*0.2, 0.15\*0.20)

S1<-colSums(s1.r)

S2<-colSumS1,arkred")

rug(jitter(S2), side = 1, col = "darkblue")

ks.test(S1, S2)

咱们能够分明地看到,PGBM 函数(蓝色)模仿的累积回报体现出负偏差,并且范畴比规范 GBM 函数(红色)模仿的回报更宽。请留神,因为安全性没有上行限度,散布在下尾区看起来并不相同。KS 测试以极其确定的形式证实两种散布是不同的(然而,小的 p 值次要是由大样本量引起的)。当初答复这个百万美元的问题(实际上十分字面)。线路上有多少钱?好吧,如果 Generali 应用正态分布来预测回报并相应地从新投保,他们会 ……

均值(S1)-mean(S2)

… 低估了累计回报率约 0.6%。 这可能看起来并不多,但如果咱们假如平安数量为 10 亿欧元,那么 Generali 就达不到 600 万欧元 – 相当多的钱只是假如谬误的调配。

论断和局限

那么咱们从中学到了什么呢?用于对任何依赖门路的平安定价模型中的翻新进行建模的散布可能会产生重大影响。尽管这个陈说自身就很显著,但散布差别的水平令人诧异。当然,在 Generali 和其余机构工作的人可能比我更聪慧,他们十分分明失常散布并不总是最佳抉择。然而,大多数人会应用更正式的(但可能只是不精确的)散布,如 t 散布或 Cauchy 散布。应用核密度散布是一种闻所未闻的办法。这是有起因的。

首先,不能保障核密度估计比未回避的正态分布更精确地示意未知的根底散布。应用过来的数据预测将来总是让任何数据科学家的口味都不好,但可怜的是咱们别无选择。然而,规范 GBM 固有的正态分布的确过于依赖过来的信息(即历史均值和标准偏差),但在形式化解决方案方面具备微小的劣势,因为其核心作用(双关语仅用于后见之明)概率论。

其次,内核密度估计对应用的带宽十分敏感。如果带宽太大,您将取得平滑的散布,然而,与正态分布没有区别。如果带宽太小,您将取得一个十分强调极值的散布,特地是如果您预计内核密度的数据样本相当小。在下面的例子中,咱们应用了密度函数中固有的主动带宽选择器,但简直没有方法晓得最佳带宽是什么。

上述办法还有其余局限性,因为咱们做了许多十分不切实际的假如。在 Generali 的例子中,咱们假如 Generali 没有扭转参与率和下限率,这是不太可能的。然而,更一般地说,咱们对金融市场做出了一些根本假如。知情(心愿)咱们假如资本市场是无效的。因而,咱们假如回报中没有自相干,这是维纳过程的第二个条件,但这是否代表了根底数据?

acf(eu.r,main =“EUROSTOXX 50 返回的自相干”)

有问题欢送分割咱们!

退出移动版