Почему смоделированная доходность акций повторно масштабируется и повторно центрируется в виньетке «pbo» в пакете pbo (вероятность бэктеста) в R?

Вот соответствующий код из виньетки, слегка измененный, чтобы он поместился на странице здесь и чтобы его было легко воспроизвести. Код для визуализаций опущен. Комментарии от автора виньетки.

(Полная виньетка: 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, и нужно ли такое масштабирование и повторное центрирование выполнять с реальной отдачей? Или это просто то, что автор делает, чтобы его смоделированные возвращения больше походили на настоящие?

Поиск в Google и поиск через stackoverflow выявил несколько статей и сообщений о масштабировании волатильности до квадратного корня из времени, но это не совсем похоже на то, что я видел. Обычно они включают умножение некоторой краткосрочной (т.е. ежедневной) меры волатильности на корень времени, но это не совсем так. Кроме того, документация для пакета не включает этот фрагмент кода повторного масштабирования и повторного центрирования. Документация: https://cran.r-project.org/web/packages/pbo/pbo.pdf

So:

  • Почему данные преобразуются таким образом/что является результатом этого преобразования?

  • Нужно ли это только для этих смоделированных данных, или мне нужно
    аналогичным образом преобразовывать реальные доходы?


person Joe O    schedule 18.11.2017    source источник


Ответы (1)


Я разместил этот вопрос в списке рассылки r-help и получил следующий ответ:

«Привет, Джо! Центрирование и масштабирование выполняются для целей его примера, а также в соответствии с его определением функции Sharpe. В частности, обратите внимание, что функция Sharpe имеет параметр rf (без риска) со значением по умолчанию. значение 0,03/252, т. е. ГОДОВАЯ ставка 3 %, преобразованная в ЕЖЕДНЕВНУЮ ставку, выраженную в десятичном выражении.

Предположим, он хотел создать случайные данные из распределения доходностей с ГОДОВЫМ средним значением MU_A и ГОДОВЫМ стандартным отклонением SIGMA_A, оба значения указаны в десятичном виде. Эквивалентная ЕЖЕДНЕВНАЯ доходность будет иметь среднее значение MU_D = MU_A / 252 и стандартное отклонение SIGMA_D = SIGMA_A/SQRT (252).

Он называет MU_D именем mu_base и SIGMA_D именем sigma_base.

Его цикл теперь преобразует случайные числа в его матрице так, чтобы каждый столбец имел среднее значение MU_D и стандартное отклонение SIGMA_D.

ХТХ, Эрик"

Я продолжил это:

«Если я правильно понимаю, если я хочу использовать фактическую доходность от бэктестов, а не смоделированную доходность, мне нужно убедиться, что моя мера доходности с поправкой на риск, в данном случае коэффициент Шарпа, совпадает по масштабу с моей доходностью. (т. е. ежедневная доходность с ежедневным шарпом, ежемесячная с ежемесячной и т. д.) И мне не нужно было бы преобразовывать доходность, как смоделированные доходности в виньетке, поскольку реальные доходы будут иметь любые свойства, которые у них есть (это означает, что они будут иметь какое бы среднее и стандартное отклонение они ни имели). Верно?»

Мне сказали, что это правильно.

person Joe O    schedule 21.11.2017
comment
Я написал автору пакета по электронной почте, и он подтвердил, что это объяснение верно. - person Joe O; 23.11.2017