2017-11-18 68 views
2

下面是來自小插曲的相關代碼,稍微修改以使其適合頁面,並使其易於再現。可視化代碼被忽略。評論來自vignette作者。爲什麼模擬股票收益率在R中的pbo(回測過擬合概率)包中的「pbo」小插圖中重新縮放並重新居中?

(全小插曲:https://cran.r-project.org/web/packages/pbo/vignettes/pbo.html

library(pbo) 

#First, we assemble the trials into an NxT matrix where each column 
#represents a trial and each trial has the same length T. This example 
#is random data so the backtest should be overfit.` 

set.seed(765) 
n <- 100 
t <- 2400 
m <- data.frame(matrix(rnorm(n*t),nrow=t,ncol=n, 
         dimnames=list(1:t,1:n)), check.names=FALSE) 

sr_base <- 0 
mu_base <- sr_base/(252.0) 
sigma_base <- 1.00/(252.0)**0.5 

for (i in 1:n) { 
    m[,i] = m[,i] * sigma_base/sd(m[,i]) # re-scale 
    m[,i] = m[,i] + mu_base - mean(m[,i]) # re-center 
} 

#We can use any performance evaluation function that can work with the 
#reassembled sub-matrices during the cross validation iterations. 
#Following the original paper we can use the Sharpe ratio as 

sharpe <- function(x,rf=0.03/252) { 
    sr <- apply(x,2,function(col) { 
    er = col - rf 
    return(mean(er)/sd(er)) 
    }) 
    return(sr) 
} 

#Now that we have the trials matrix we can pass it to the pbo function 
#for analysis. 

my_pbo <- pbo(m,s=8,f=sharpe,threshold=0) 

summary(my_pbo) 

這裏的部分我很好奇:

sr_base <- 0 
mu_base <- sr_base/(252.0) 
sigma_base <- 1.00/(252.0)**0.5 

for (i in 1:n) { 
    m[,i] = m[,i] * sigma_base/sd(m[,i]) # re-scale 
    m[,i] = m[,i] + mu_base - mean(m[,i]) # re-center 
} 

爲什麼內的for循環轉化數據,並執行這種重新的縮放和重新定位需要用真實的回報來完成?或者,這只是作者爲了讓他的模擬回報更像真實的東西而做的事情?

谷歌搜索和搜索通過計算器翻轉了一些文章和關於縮放到時間的平方根的波動,但這看起來不像我見過的。通常它們涉及將短期(即每日)波動性度量乘以時間的根源,但這不完全是這樣。此外,該軟件包的文檔不包含這部分重新縮放和重新對中代碼。文檔:https://cran.r-project.org/web/packages/pbo/pbo.pdf

所以:

  • 爲什麼以這種方式改變了數據/這是什麼 轉型的結果呢?

  • 難道只需要這個模擬數據,還是我需要
    同樣改變真實的回報?

回答

0

我張貼的R-幫助郵件列表上這個問題,並得到了如下回答:

「嗨,喬, 的定心和重新縮放爲他的榜樣的目的而作出,並 特別值得注意的是,夏普函數的rf(riskfree) 參數的默認值爲.03/252,即年利率爲3%,轉換成日利率爲 ,用十進制表示 這意味着這個函數的另一個參數x應該是DAILY 返回,以十進制表示。

假設他想從 的年收益分佈中創建隨機數據,均值爲MU_A和ANNUAL STD偏差SIGMA_A,均以十進制表示。 等價的每日回報將意味着MU_D = MU_A/252和標準 偏差SIGMA_D = SIGMA_A/SQRT(252)。

他通過名稱mu_base和SIGMA_D通過名稱sigma_base調用MU_D。

他的循環現在轉換其矩陣中的隨機數,以便每列 具有平均MU_D和標準偏差SIGMA_D。

HTH, 埃裏克「

我遵循了這樣的:

」如果我理解正確的話,如果我想用從backtests而不是模擬的回報實際回報,我需要以確保我的風險調整回報率衡量標準,在這種情況下,夏普比率與我的回報(即每日回報率,每日回報率,每月月度回報率等)相匹配。而且我不需要像投資者模擬回報那樣來轉換回報,因爲真實回報將具有他們擁有的任何屬性(意味着他們將擁有他們碰巧擁有的任何平均值和標準值)。 「

我被告知這是正確的。

+0

我通過電子郵件發送軟件包的作者,他確認這個解釋是準確的 –