Как рассчитать бета-версию rolling window Bull и Bear? — PerformanceAnalytics R

#r #loops #regression #quantitative-finance #performanceanalytics

#r #циклы #регрессия #количественный-финансы #performanceanalytics

Вопрос:

 library("PerformanceAnalytics")
  

данные:

 dput(head(all_returns5, n = 25))
structure(c(NA, 0.0127576508492631, -0.0136465076457385, 0.024306527050457, 
0.0105905227296192, 0.00170260583823545, 0.00718128277256991, 
0.00586860402322142, 0.0151164985424574, 0.0159574248302818, 
0.00499428585372597, -0.00887664957569334, 0.00105954910979489, 
-0.001152238197206, -0.00444480741549869, 0.00105617627274368, 
0.00744484484443464, 0.00426836832012567, 0.00107116244411332, 
0.00196203363775194, -0.00629245692483171, 0.00524543005619238, 
-0.00225940746129893, 0.00663963281493696, 0.00562598092478561, 
NA, 0.0120981992422189, -0.0113201724823986, 0.0249611906463298, 
0.0106580760970605, 0.000364737785248703, 0.00653118163660005, 
0.00499259772576921, 0.0128739559010203, 0.0202916489382277, 
0.00550467062962512, -0.00484865851267591, 0.0012957392154338, 
-0.00124865674804386, -0.00587223531372894, -0.000762183503300262, 
0.00189928452655175, 0.00347922741357132, 0.00189669822772509, 
-0.00199912159808557, -0.00676813815499955, 0.00762402407908214, 
-0.001243366186505, 0.00498724722171628, -0.0042675972294608, 
NA, 0.00641802582479989, 0.00538141680614102, -0.00528658875904287, 
0.00930662557781203, 0.0137208297320657, 0.00523147783456657, 
0.00301929583567651, 0.00510586278051228, 0.0331361109078938, 
0.0117636124646494, 0.00181532660568906, -0.00746210004191683, 
0.00225678023887554, 0.00516617799392516, -0.00627497216217998, 
0.00545331505308311, -0.0085223920387747, 0.00989601470516921, 
-0.00481877226063276, -0.00728508771929826, 0.00638422896628521, 
0.00809099848979722, 0.000940655933317824, 0.00316737947207457, 
NA, 0.00701062547924214, -0.00148663838427798, 0.00791633379330392, 
0.00378296584522264, 0.0126341480923153, 0.000602559103959122, 
-0.00410910379029406, 0.0130539944511632, 0.0141497840665705, 
0.00602409638554224, -0.00361346272971308, 0.00117431699651172, 
0.00131093248697689, -0.00585701981050812, -0.00242592271703346, 
0.00260552371026579, 0.00540540540540535, 0.0047904604356217, 
0.00205796604356023, -0.00670888242341261, 0.0109238774595954, 
-0.00228388328333795, 0.0119238785062694, -0.00256600715780941, 
NA, 0.00726924377324467, -0.00413986013986023, 0.0247738891073535, 
0.00422102839600935, 0.0137562094000765, 0, 0.00215389585913517, 
0.0174090591585621, 0.0133086876155268, 0.00448220149059253, 
-0.00726404815026194, -0.0076307949615847, 0.00847948596408066, 
-0.00720701900981824, 0.00220936349289858, 0.00482888935544823, 
0.00699958211450058, -0.00373482726423902, 0.000781005935645229, 
-0.00312158576556887, 0.00798496946923422, -0.00295122708915807, 
0.0114244170950824, -0.00123222262155365, NA, 0.00608596424496, 
-0.000756143667296816, -0.00302686341278846, 0.0197343453510437, 
0.0148864905098622, 0.00990099009900991, -0.00290486564996362, 
0.00509832483612538, 0.0311594202898551, 0.00210822206605754, 
-0.00245441795231416, -0.0042179261862918, 0.00635368866925523, 
-0.00245527884952645, -0.00914205344585095, 0.013484740951029, 
-0.00420168067226878, 0.0014064697609002, -0.00105337078651691, 
-0.00843585237258337, 0.00708968450903935, 0.000703977472720885, 
0.00844178684488228, 0.00244157656086497, NA, 0, 0, -0.00343642611683859, 
0.0137931034482759, 0.0136054421768708, 0.00335570469798663, 
0, 0.00668896321070211, 0.0332225913621262, 0, 0.00321543408360125, 
-0.00641025641025639, 0, 0, 0, 0.00967741935483857, -0.00319488817891367, 
0, 0.00320512820512819, -0.00319488817891367, 0.00641025641025639, 
0, 0.00955414012738842, 0.00315457413249209, NA, 0.0101867572156198, 
-0.00403361344537823, 0.0134998312521095, 0.0153180153180152, 
0, 0.0127910790423089, 0.00777202072538863, 0.0292416452442159, 
0.01311270683734, -0.00123266563944546, -0.00493674791730936, 
-0.00837209302325581, 0.00469043151969983, -0.00809212573918461, 
0.00784436774395969, 0.0177459526774595, -0.00244723156928717, 
0.00919963201471941, 0.00425402613187487, 0.000605143721633894, 
0.0139098881161173, -0.0020876826722338, 0.0203227734608489, 
0.00878734622144095, NA, 0.0104281009879255, -0.00869092884302014, 
0.0213698630136987, 0.007510729613734, 0.00585729499467513, 0.00476442562202228, 
0.00316122233930449, 0.00105042016806722, 0.0194123819517313, 
0.00823468862583643, -0.00918836140888202, 0.00257599175682643, 
-0.000513874614594068, -0.00205655526992288, -0.00566718186501802, 
0.0020725388601035, 0.00620475698035161, 0.00411099691675232, 
-0.00204708290685773, -0.0102564102564102, 0.00984455958549213, 
-0.000513083632632028, 0.00513347022587252, -0.00306435137895811, 
NA, 0.0169746454662656, -0.0160574688358335, 0.0244792785054757, 
0.00775518759169991, 0.00457570715474209, 0.0126293995859212, 
0.00674708648538136, 0.0241673436230707, 0.0067420186396987, 
0.00354540082726018, -0.00902845927379781, -0.00693206575559524, 
0.00239329876346228, -0.00775964982093114, 0.00220573491076803, 
0.0184073629451782, 0.000785854616895953, -0.00490773458971339, 
0.00887749062931542, -0.0148611654282361, 0.00813815005954743, 
-0.0059066745422327, 0.013269954446425, 0.0158326817826426), class = c("xts", 
"zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", index = structure(c(1421020800, 
1421107200, 1421193600, 1421280000, 1421366400, 1421625600, 1421712000, 
1421798400, 1421884800, 1421971200, 1422230400, 1422316800, 1422403200, 
1422489600, 1422576000, 1422835200, 1422921600, 1423008000, 1423094400, 
1423180800, 1423440000, 1423526400, 1423612800, 1423699200, 1423785600
), tzone = "UTC", tclass = "Date"), .Dim = c(25L, 10L), .Dimnames = list(
    NULL, c("DB3018", "LU0929189636", "LU0256881987", "LU0219424305", 
    "LU0219424131", "LU0196036957", "IE0032904330", "IE0031574977", 
    "IE0004766675", "IE00BKWQ0G16")))
> 
  

У меня есть следующая функция, которая использует два ряда возврата, а именно портфолио и бенчмарк. Это выглядит так:

 CAPM.beta(data[,1], data[,2], Rf = 0)

CAPM.beta.bull(data[,1], data[,2], Rf = 0)

CAPM.beta.bear(data[,1], data[,2], Rf = 0)
  

Приведенная ниже таблица по существу вычисляет соотношение CAPM.beta.bull / CAPM.beta.bear :

 TimingRatio(data[,1], data[,2], Rf = 0)
  

Пакет поставляется с собственной функцией rolling window:

 apply.fromstart(R, FUN = "mean", gap = 14) 
  

однако вышесказанное ограничено ЗАБАВОЙ, в которой используется ввод 1 возвращаемой серии. например. «среднее»

Я хотел бы рассчитать CAPM.beta.bull amp; CAPM.beta.bear ИЛИ TimingRatio за заданный интервал скользящего окна.

Заранее благодарю вас

Комментарии:

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

2. я думаю, что вопрос очень ясен. примените функцию к скользящему окну. Это конкретный вопрос для пакета PA, и он был помечен соответствующим образом. для их оценки требуются длительные данные временных рядов, которые есть у любого, кто использует этот пакет. в качестве альтернативы data(portfolio_bacon) предоставляет образцы из пакета PA. Спасибо.

3. Итак, вы просите людей, пытающихся помочь вам бесплатно, выполнить дополнительную работу по созданию примера для тестирования вместо того, чтобы делать это самостоятельно. Окей, доки.

4. спасибо, что придерживаетесь правил прямо здесь. опубликованы примеры данных.

Ответ №1:

Приведенный ниже код использует скользящее окно 25, вводя «окно» непосредственно в формулу PA. Он использует XTS возвраты в качестве входных данных.

это для 3 типов бета-версий, доступных в пакете.

 results <- data.frame()


for (i in 25:nrow(all_returns5)){

  # rolling window to be put in -1 also needs to be adjusted in the for loop at i in x:...) 

  start_n <- i - 24
  end_n <- i

  # get the date 

  date_tmp <- index(all_returns5[i])


  # apply the formula on the looped datasets 

  output_bear <- as.matrix(CAPM.beta.bear(all_returns5[start_n:end_n,2], all_returns5[start_n:end_n,1], Rf = 0))


  output_bull <- as.matrix(CAPM.beta.bull(all_returns5[start_n:end_n,2], all_returns5[start_n:end_n,1], Rf = 0))


  output_beta <- as.matrix(CAPM.beta(all_returns5[start_n:end_n,2], all_returns5[start_n:end_n,1], Rf = 0))


  FINAL_OUTPUT <- cbind(output_bear, output_bull, output_beta)
                rownames(FINAL_OUTPUT) <- as.character(date_tmp)
                colnames(FINAL_OUTPUT) <- c("Beta Bear (-)", "Beta Bull ( )", "Beta")

# store results in frame 

  results <- rbind(results, FINAL_OUTPUT)

print(FINAL_OUTPUT)

}