相關

模擬退貨

  • January 9, 2020

我將從一個相當廣泛的問題開始:我試圖模擬不同類別投資組合中大量資產的回報——第一步是股票和固定收益,比如 100 隻股票和 100 只債券。主要目標是在回報中保留類似於現實相關結構的東西。有什麼好的方法去做呢?

我的第一個想法是估計類之間的相關性,根據歷史均值、標準差和相關性繪製多元正態回報(是的,我知道,但如果你有更好的想法,我想听聽),然後複製兩個帶有隨機錯誤的基線返回系列,比如(偽 R 程式碼,我想我的意思很清楚)

require(mnormt)
n <- 100 # number of assets
m <- 1000 # days of simulated data
means <- apply(cbind(equity,bond),2,mean)
Sigma <- cov(cbind(equity,bond))
sim.returns <- rmnorm(1000,means,Sigma)
sim.equities <- matrix(sim.returns[,"equity"]*rnorm(m*n,mean=1,sd=0.5),ncol=n)
sim.bonds <- matrix(sim.returns[,"bond"]*rnorm(m*n,mean=1,sd=0.2),ncol=n)

歡迎提出任何建議、改進或其他意見 - 您將如何做,​​或者做得更好?

更新:這就是我現在的狀態(截至 2011-04-29):

require(quantmod)
rets.dax <- dailyReturn(GDAXI)
(DBCNumber <- 100)
(DBCNames <- as.character(paste("DBC",1:DBCNumber,sep="_")))
(DBCBetas <- runif(DBCNumber, min=0.8,max=1.5)) # seeding Betas
DBCErrors <- matrix(rnorm(nrow(rets.dax)*DBCNumber,sd=0.01),ncol=DBCNumber) #seeding errors
DBCReturns <- matrix(rep(NA,nrow(rets.dax)*DBCNumber),ncol=DBCNumber)
#simulating returns with the betas and errors
for(i in 1:DBCNumber){DBCReturns[,i] <- rets.dax*DBCBetas[i]+DBCErrors[,i]} 
DBCReturns <- xts(DBCReturns,order.by=index(rets.dax))
colnames(DBCReturns) <- DBCNames
DBCIndizes <- xts(apply(DBCReturns+1,2,cumprod),order.by=index(rets.dax)) #calculating prices

cols <- heat.colors(DBCNumber)
chart.RelativePerformance(DBCReturns,rets.dax,colorset=cols, lwd=1)

我現在對股票回報很滿意,但是您對債券回報有什麼建議(數據源,我可以從股票中複製方法嗎?)

我有一些想法,但沒有真正的答案:)。

  • 您從不正常的 DAX 獲取返回,然後使其正常並對其應用正常雜訊。似乎將雜訊應用於原始的非標準化 DAX 可能會稍微好一些。
  • 你考慮過t分佈嗎?R中有多元t分佈包(例如,mnormt
  • 正常的,瘦尾巴真的在情節中表現出來。我希望少數應該有巨大的回報或損失。

由此我有兩個建議:

  • 為什麼不直接從雅虎下載真實的股票數據QuantMod呢?是否有任何軟體包具有用於提取所有程式碼的腳本?
  • 為什麼不分配一個 $ \beta $ 每個模擬股票(和債券)?只要 $ \beta $ s 總和為 1,應該沒問題(儘管那樣你會很容易受到關於分佈分佈的假設的影響 $ \beta $ - 使用真實數據可以讓你擺脫這種情況,儘管即使那樣你也容易受到時間段的影響)。

我認為最好的方法是使用真實市場數據進行某種阻塞式引導抽樣。如果您使用純模擬方法來“組成”數據集,那麼您很有可能最終會得到一個錯誤指定的模型。

對於初學者,您可以使用 R 包 quantmod 來提取每日股市數據併計算收益,而 tseries 包中的 tsbootstrap 函式將讓您建構具有一定現實基礎的假設收益序列。

引用自:https://quant.stackexchange.com/questions/1018