相關
模擬退貨
我將從一個相當廣泛的問題開始:我試圖模擬不同類別投資組合中大量資產的回報——第一步是股票和固定收益,比如 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 函式將讓您建構具有一定現實基礎的假設收益序列。