R語言做復(fù)雜金融產(chǎn)品的幾何布朗運(yùn)動(dòng)的模擬
原文鏈接:http://tecdat.cn/?p=5334
?

?
幾何布朗運(yùn)動(dòng)(GBM)是模擬大多數(shù)依賴某種形式的路徑依賴的金融工具的標(biāo)準(zhǔn)主力。雖然GBM基于有根據(jù)的理論,但人們永遠(yuǎn)不應(yīng)忘記它的最初目的 - 粒子運(yùn)動(dòng)的建模遵循嚴(yán)格的正態(tài)分布脈沖。基本公式由下式給出:

?
標(biāo)準(zhǔn)維納過程代表創(chuàng)新。在對(duì)氣體進(jìn)行建模時(shí)效果很好,在財(cái)務(wù)建模方面存在一些嚴(yán)重的缺陷。問題是維納過程有兩個(gè)非常嚴(yán)格的條件:
a)創(chuàng)新通常是分布式的,平均零和方差為tb)創(chuàng)新是獨(dú)立的
現(xiàn)在,至少有一些金融市場數(shù)據(jù)暴露的人都知道股票回報(bào)不滿足第一個(gè)條件,有時(shí)甚至不滿足第二個(gè)條件。普遍的共識(shí)是,股票收益是扭曲的,是有效的,并且尾巴不均勻。雖然股票收益趨于收斂于正常分布且頻率遞減(即月收益率比日收益率更正常),但大多數(shù)學(xué)者會(huì)同意t分布或Cauchy分布更適合收益。
然而,在實(shí)踐中,大多數(shù)人在模擬布朗運(yùn)動(dòng)時(shí)只是采用正態(tài)分布,并接受由此產(chǎn)生的資產(chǎn)價(jià)格不是100%準(zhǔn)確。另一方面,我不滿足于這種半解決方案,我將在下面的例子中展示盲目信任GBM的成本是多少。我提出了一種偽布朗方法,其中隨機(jī)創(chuàng)新是從經(jīng)驗(yàn)回報(bào)的核密度估計(jì)而不是假設(shè)的正態(tài)分布中采樣的。這種方法的好處在于它產(chǎn)生的結(jié)果更接近于過去觀察到的結(jié)果而沒有完全復(fù)制過去(這將是直接從過去的創(chuàng)新中抽樣隨機(jī)創(chuàng)新的結(jié)果)。
介紹性例子
在我們進(jìn)入有趣的部分之前,我們展示了市場上浪費(fèi)了多少錢,我們從一個(gè)簡單的例子開始。我們需要加載三個(gè)包及其依賴項(xiàng)(您可以在頁面底部下載此帖子的R-)
install.packages("quantmod")
require(quantmod)
對(duì)于我們的第一個(gè)例子,我們將嘗試模擬AT&T的回報(bào)。以下命令允許我們從雅虎財(cái)經(jīng)下載價(jià)格信息并計(jì)算每月日志回報(bào)為了確定我在開始時(shí)所做的觀點(diǎn),我們將比較回報(bào)分布與正態(tài)分布。
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))
?

即使沒有藝術(shù)史碩士學(xué)位,大多數(shù)人也會(huì)同意這兩行不匹配。對(duì)于那些不依賴于這種視覺方法的人來說,可靠的Kolmogorov-Smirnov測試提供了一種更正式的方法。
set.seed(2013)
ks.test(attr, rnorm(n = length(attr), mean = mean(attr), sd = sd(attr)))
?
測試返回的p值為0.027,這遠(yuǎn)遠(yuǎn)不夠(p值越小,我們必須得出的結(jié)論是兩個(gè)分布不同)。接下來我們設(shè)置標(biāo)準(zhǔn)GBM功能。我完全清楚各種GBM函數(shù)作為眾多包的一部分存在。盡管如此,我還是決定創(chuàng)建自己的函數(shù),以使內(nèi)部工作更加透明。
m((mu * dt * x) + #drift
rnorm(1, mean = 0, sd = 1) * sqrt(dt) * sigma * x) #random innovation
x
}
?
在這個(gè)簡單的函數(shù)中(我知道有更優(yōu)雅的方法來實(shí)現(xiàn)這一點(diǎn),但結(jié)果保持不變)rnorm函數(shù)充當(dāng)Wiener進(jìn)程驅(qū)動(dòng)程序。毋庸置疑,這并不尊重我們上面所看到的。相比之下,我的偽布朗函數(shù)從過去經(jīng)驗(yàn)回報(bào)的核密度估計(jì)中抽樣隨機(jī)創(chuàng)新。
pseudoGBM <- function(x, rets, n, ...) {
N <
y[[i]] <- x + x * (mean(rets) + samp[i])
x <- y[[i]]
}
return(y)
}
?
不可否認(rèn),這個(gè)函數(shù)有點(diǎn)簡潔,因?yàn)樗僭O(shè)靜態(tài)增量(即dt = 1)并且?guī)缀醪恍枰脩糨斎?。它只需要一個(gè)起始值(x),一個(gè)過去返回的向量(rets)和指定的路徑長度(n)。...輸入允許用戶將其他命令傳遞給密度函數(shù)。這使用戶可以通過添加帶寬命令(bw =)來控制核密度估計(jì)的平滑度。沒有任何進(jìn)一步的麻煩,讓我們開始使用上述功能進(jìn)行模擬。在第一個(gè)例子中,我們僅使用起始值x中的兩個(gè)函數(shù)來模擬一個(gè)價(jià)格路徑,即系列中的最后一個(gè)價(jià)格。 要查看兩個(gè)方法的執(zhí)行情況,我們計(jì)算模擬序列的回報(bào)并將它們的分布與經(jīng)驗(yàn)分布進(jìn)行比較。
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函數(shù)(藍(lán)線)在產(chǎn)生接近經(jīng)驗(yàn)回報(bào)分布(黑線)的回報(bào)時(shí)優(yōu)于標(biāo)準(zhǔn)GBM函數(shù)(紅線)。同樣,關(guān)鍵(或視覺上無能)的讀者可以查看KS測試的結(jié)果。
ks.test(attr, attPGBMr)
ks.test(attr, attGBMr)
我們再次看到PGBM函數(shù)(p值= 0.41)遠(yuǎn)遠(yuǎn)優(yōu)于GBM函數(shù)(p值= 0.02)。
高級(jí)示例
正如所承諾的那樣,我們的第二個(gè)例子將展示當(dāng)一個(gè)人在不能代表基礎(chǔ)數(shù)據(jù)時(shí)錯(cuò)誤地假設(shè)正態(tài)分布時(shí),在線上有多少錢。自從金融黑暗時(shí)代醒來以來,歐洲特別表現(xiàn)出對(duì)結(jié)構(gòu)性金融產(chǎn)品的渴望,這些產(chǎn)品可以參與股票市場,同時(shí)限制或消除下行風(fēng)險(xiǎn)。此類證券通常依賴于路徑,因此通常使用GBM進(jìn)行建模。
我們將使用Generali Germany提供的一種特定產(chǎn)品 - Rente Chance Plus - 這是我開發(fā)PGBM功能的最初原因。當(dāng)我在私人銀行工作時(shí),我的任務(wù)是評(píng)估這個(gè)特定的安全性,從基于GBM的標(biāo)準(zhǔn)蒙特卡羅模擬開始,但很快意識(shí)到這還不夠。Rente Chance Plus提供20%參與EUROSTOXX 50指數(shù)上限至15%的上限,初始投資和實(shí)現(xiàn)收益均無下行。安全性在每年年底評(píng)估。盡管Generali可以在20年的投資期內(nèi)自由改變參與率和資本化率,但為了論證,我們將假設(shè)這些因素保持不變。
從上面反映我們的程序,我們首先從雅虎財(cái)經(jīng)下載EUROSTOXX 50價(jià)格信息。
eu <- getSymbols("^STOXX50E", from = "1990-01-01", to = "2015-12-31", auto.assign = FALSE)
接下來,我們看看數(shù)據(jù)與正態(tài)分布的擬合程度如何,或者說多么糟糕。
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)))

從嚴(yán)格的視角來看,這看起來比AT&T分布更糟糕。EUROSTOXX的回報(bào)顯然是負(fù)面偏差,有點(diǎn)leptokurtic。KS測試返回p值為0.06,確認(rèn)視覺不匹配?,F(xiàn)在我們已經(jīng)確定正態(tài)分布不是最合適的,我們可以看看錯(cuò)誤地假設(shè)它的后果。我們將使用標(biāo)準(zhǔn)GBM和我的PGBM函數(shù)運(yùn)行10,000次迭代的模擬并比較結(jié)果(如果您正在復(fù)制以下代碼,請(qǐng)?jiān)诘却龝r(shí)給自己喝杯咖啡。這將花費(fèi)一些時(shí)間來運(yùn)行)。
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)
當(dāng)然,我們對(duì)EUROSTOXX 50的價(jià)格水平不感興趣,而是在參與率和上限率的約束下評(píng)估的回報(bào)。好消息是最困難的部分就在我們身后。計(jì)算回報(bào)和應(yīng)用約束非常簡單。對(duì)結(jié)果進(jìn)行調(diào)整并不容易。
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函數(shù)(藍(lán)色)模擬的累積回報(bào)表現(xiàn)出負(fù)偏差,并且范圍比標(biāo)準(zhǔn)GBM函數(shù)(紅色)模擬的回報(bào)更寬。請(qǐng)注意,由于安全性沒有下行限制,分布在下尾區(qū)看起來并不相同。KS測試以極其確定的方式證實(shí)兩種分布是不同的(然而,小的p值主要是由大樣本量引起的)?,F(xiàn)在回答這個(gè)百萬美元的問題(實(shí)際上非常字面)。線路上有多少錢?好吧,如果Generali使用正態(tài)分布來預(yù)測回報(bào)并相應(yīng)地重新投保,他們會(huì)......
均值(S1)-mean(S2)
...低估了累計(jì)回報(bào)率約0.6%。這可能看起來并不多,但如果我們假設(shè)安全數(shù)量為10億歐元,那么Generali就達(dá)不到600萬歐元 - 相當(dāng)多的錢只是假設(shè)錯(cuò)誤的分配。
結(jié)論和局限
那么我們從中學(xué)到了什么呢?用于對(duì)任何依賴路徑的安全定價(jià)模型中的創(chuàng)新進(jìn)行建模的分布可能會(huì)產(chǎn)生重大影響。雖然這個(gè)陳述本身就很明顯,但分布差異的程度令人驚訝。當(dāng)然,在Generali和其他機(jī)構(gòu)工作的人可能比我更聰明,他們非常清楚正常分布并不總是最佳選擇。但是,大多數(shù)人會(huì)使用更正式的(但可能只是不準(zhǔn)確的)分布,如t分布或Cauchy分布。使用核密度分布是一種聞所未聞的方法。這是有原因的。
首先,不能保證核密度估計(jì)比未回避的正態(tài)分布更準(zhǔn)確地表示未知的基礎(chǔ)分布。使用過去的數(shù)據(jù)預(yù)測未來總是讓任何數(shù)據(jù)科學(xué)家的口味都不好,但不幸的是我們別無選擇。然而,標(biāo)準(zhǔn)GBM固有的正態(tài)分布確實(shí)過于依賴過去的信息(即歷史均值和標(biāo)準(zhǔn)偏差),但在形式化解決方案方面具有巨大的優(yōu)勢,因?yàn)槠浜诵淖饔茫p關(guān)語僅用于后見之明)概率論。
其次,內(nèi)核密度估計(jì)對(duì)使用的帶寬非常敏感。如果帶寬太大,您將獲得平滑的分布,但是,與正態(tài)分布沒有區(qū)別。如果帶寬太小,您將獲得一個(gè)非常強(qiáng)調(diào)極值的分布,特別是如果您估計(jì)內(nèi)核密度的數(shù)據(jù)樣本相當(dāng)小。在上面的例子中,我們使用了密度函數(shù)中固有的自動(dòng)帶寬選擇器,但幾乎沒有辦法知道最佳帶寬是什么。
上述方法還有其他局限性,因?yàn)槲覀冏隽嗽S多非常不切實(shí)際的假設(shè)。在Generali的例子中,我們假設(shè)Generali沒有改變參與率和上限率,這是不太可能的。然而,更一般地說,我們對(duì)金融市場做出了一些基本假設(shè)。知情(希望)我們假設(shè)資本市場是有效的。因此,我們假設(shè)回報(bào)中沒有自相關(guān),這是維納過程的第二個(gè)條件,但這是否代表了基礎(chǔ)數(shù)據(jù)?
acf(eu.r,main =“EUROSTOXX 50返回的自相關(guān)”)

?