2

Hier ist der entsprechende Code aus der Vignette, leicht verändert, um auf die Seite hier zu passen und es einfach zu reproduzieren. Code für Visualisierungen wurde weggelassen. Kommentare stammen vom Vignettenautor.Warum werden simulierte Aktienrenditen in der "pbo" -Vignette im pbo-Paket (Wahrscheinlichkeit des Backtest-Überbaus) in R neu skaliert und zentriert?

(Full Vignette: 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) 

Hier ist der Teil ich bin neugierig:

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 
} 

Warum die Daten innerhalb der for-Schleife transformiert ist, und tut diese Art der Wieder- Skalierung und Rezentrierung müssen mit realen Renditen erfolgen? Oder ist das etwas, was der Autor tut, damit seine simulierten Renditen mehr wie das Original aussehen?

Googeln und Durchsuchen Stackoverflow ergab einige Artikel und Beiträge bezüglich der Skalierung der Volatilität auf die Quadratwurzel der Zeit, aber das sieht nicht ganz so aus, wie ich es gesehen habe. Üblicherweise beinhalten sie das Multiplizieren eines kurzfristigen (d. H. Täglichen) Maßes der Volatilität mit der Wurzel der Zeit, aber dies ist nicht ganz so. Außerdem enthält die Dokumentation für das Paket nicht diesen Teil des Codes für die erneute Skalierung und Neuzentrierung. Dokumentation: https://cran.r-project.org/web/packages/pbo/pbo.pdf

So:

  • Warum werden die Daten auf diese Weise transformiert/was ist Ergebnis dieser Transformation?

  • ist es nur notwendig für diese simulierten Daten, oder muss ich
    ähnlich reale Renditen verwandeln?

Antwort

0

Ich stellte diese Frage auf der r-Hilfe-Mailingliste und bekam folgende Antwort:

„Hallo Joe, Die Zentrierung und Neuskalierung für die Zwecke seines Beispiels erfolgt und auch, um mit seiner Definition der Sharpe-Funktion im Einklang zu sein. Beachten Sie insbesondere, dass die Sharpe-Funktion hat die RFF (Risk Free) Parameter mit einem Standardwert von 0,03/252 dh eine jährliche 3% Rate konvertiert auf eine tägliche Rate , ausgedrückt in Dezimal Das bedeutet, dass das andere Argument für diese Funktion, x, sollte täglich 0 seingibt zurück, ausgedrückt in Dezimal.

Angenommen, er wollte Zufallsdaten aus einer Verteilung von Retouren mit JÄHRLICHES Mittel MU_A und JÄHRLICHE Standardabweichung SIGMA_A, beide in Dezimalzahl angegeben, erstellen. Die äquivalenten DAILY-Returns hätten den Mittelwert MU_D = MU_A/252 und den Standard Abweichung SIGMA_D = SIGMA_A/SQRT (252).

Er nennt MU_D mit dem Namen mu_base und SIGMA_D mit dem Namen sigma_base.

Seine Schleife konvertiert nun die Zufallszahlen in seiner Matrix, so dass jede Spalte Mittelwert MU_D und Standardabweichung SIGMA_D hat.

HTH, Eric „

ich damit weiterverfolgt:

“ Wenn ich richtig verstehen, wenn ich die tatsächlichen Renditen von Backtests statt simulierten kehrt verwenden bin zu wollen, würde ich brauchen um sicherzustellen, dass meine risikoadjustierte Rendite, die Sharp-Ratio in diesem Fall, mit meinen Renditen übereinstimmt (dh tägliche Renditen mit täglicher Sharpe, monatlich mit monatlich usw.). Und ich würde Renditen nicht wie die simulierten Renditen in der Vignette transformieren müssen, da die realen Renditen alle Eigenschaften haben werden, die sie haben (was bedeutet, dass sie einen beliebigen durchschnittlichen und Standard-Dev haben). Ist das korrekt? "

Mir wurde gesagt, dass das korrekt war.

+0

Ich mailte dem Paketautor und er bestätigte, dass diese Erklärung korrekt ist –

Verwandte Themen