Оптимизация портфеля в условиях расхождения Кулбека Лейблера, неотъемлемые вопросы? - PullRequest
0 голосов
/ 23 июня 2019

Я работаю над оптимизацией портфеля, где стараюсь минимизировать меру расхождения между плотностью портфеля и целевым доходом.Для этого я написал код, который работает, но с двумя основными проблемами.

1) Я хотел бы интегрировать для большего диапазона, но возвращение не является конечным значением.Это происходит главным образом из-за того, что функция для оценки плотности возвращает предельный диапазон значений и затем 0. Как я мог это исправить, потому что, когда я установил более высокую поддержку в Kdensity, я получил ошибку.

2) Может случиться так, что моя мера дивергенции (Кульбака Лейблера) отрицательна, что на практике невозможно, но я не знаю, откуда исходит отрицательное значение.Может ли кто-нибудь помочь мне?

Я покажу ниже, что я уже пробовал.Средняя целевая доходность и дисперсия являются одним из оптимального портфеля коэффициента Шарпа.

S1P <- cp2dp(cp = c(0.11, 0.1625,-0.4, 6.50), family ="ST")
S2P <- cp2dp(cp = c(0.05, 0.035,-0.02, 4), family ="ST")
S3P <- cp2dp(cp = c(0.045, 0.2 , -0.5, 10), family = "ST")
S4P <- cp2dp(cp = c(0.08 , 0.07 , 0 , 5) , family = "ST")

S1 <- as.matrix(rst(n = 250 , xi = S1P[1] , omega = S1P[2], alpha =          S1P[3] , nu = S1P[4]), ncol = 1 ) 
S2 <- as.matrix(rst(n = 250, xi = S2P[1] , omega = S2P[2], alpha = S2P[3] , nu = S2P[4]), ncol = 1 )
S3 <- as.matrix(rst(n = 250 , xi = S3P[1], omega = S3P[2], alpha = S3P[3], nu = S3P[4]) , ncol = 1 ) 
S4 <-  as.matrix(rst(n = 250 , xi = S4P[1], omega = S4P[2] , alpha = S4P[3] , nu =S4P[4] ), ncol = 1 ) 

namesRET <- c("S1","S2","S3","S4")
RET <- cbind(S1,S2,S3,S4)
d <- as.Date(1:nrow(RET))
RET<- xts(RET, order.by=d)
colnames(RET) <- namesRET

fsharpe <-  as.numeric(cp2dp(cp=c(MeanTargetRET,SigmaTargetRET,0.07,0.3),family ="ST"))


ObmSharpe1RET <- function(w){ 
Portfolio <- RET%*%t(w)
fTarget <- function(x) dst(x,xi = fsharpe[1], omega = fsharpe[2],    alpha =fsharpe[3] , nu = fsharpe[4])
fPortf <- kdensity(Portfolio)
KL <- function(x) fPortf(x)*log(fPortf(x)/fTarget(x))
    return(integrate(KL , -0.25, 0.25 )$value)
}

rmindRET<- fmincon(x1, ObmSharpe1RET, heq = heq2 , lb = wmin1 , ub =  wmax1)
rmindRET$par
rmindRET$value

Я никогда не ожидаю отрицательного значения, которое иногда могу иметь

...