2 votos

¿Qué está calculando optimize.portfolio.rebalancing en el paquete R PortfolioAnalytics?

Recientemente comencé a usar el paquete R PortfolioAnalytics para realizar una optimización de cartera. Y estoy tratando de entender exactamente qué está calculando la función optimize.portfolio.rebalancing. En particular, me pregunto por qué los pesos calculados (a partir del segundo período en adelante) son diferentes a los que obtengo al llamar directamente a optimize.portfolio.

Yo tenía la impresión de que optimize.portfolio.rebalancing era básicamente un "envoltorio alrededor de optimize.portfolio" (según el manual), así que pensé que la función simplemente llama a optimize.portfolio repetidamente para períodos de longitud rolling_window. Pero entonces, ¿los resultados no deberían ser idénticos a lo que una llamada manual a optimize.portfolio con los mismos períodos exactos produce? ¿O es que optimize.portfolio.rebalancing realiza algunos cálculos adicionales? ¿Qué me falta?

Aquí hay un ejemplo mínimo que ilustra mi pregunta:

data("edhec")
returns <- edhec[, 1:4]
funds <- colnames(returns)

portfolio <- portfolio.spec(assets = funds)
portfolio <- add.constraint(portfolio = portfolio, type = "full_investment")
portfolio <- add.constraint(portfolio = portfolio, type = "long_only")
portfolio <- add.objective(portfolio = portfolio, type = "risk", name = "ES")

portfolio.rebalanced <- optimize.portfolio.rebalancing(R = returns,
                                                       portfolio = portfolio,
                                                       optimize_method = "ROI",
                                                       rebalance_on = "quarters",
                                                       training_period = 12,
                                                       rolling_window = 12)

# verificar si optimize.portfolio da los mismos resultados: primer período
portfolio.optimized <- optimize.portfolio(R = returns["::1997-12-31",],
                                          portfolio = portfolio,
                                          optimize_method = "ROI")
portfolio.optimized
portfolio.rebalanced$opt_rebalancing$`1997-12-31`
# ¡SÍ!

# pero: último período
portfolio.optimized <- optimize.portfolio(R = returns["2006-08-31::2009-08-31",],
                                          portfolio = portfolio,
                                          optimize_method = "ROI")
portfolio.optimized
portfolio.rebalanced$opt_rebalancing$`2009-08-31`
# ¡NO! ¿Qué está mal?

0 votos

Estoy pensando que si es una ventana rodante y no una ventana expansiva, podría dejar caer las observaciones posteriores y tener en cuenta solo las 12 últimas... ¡Simularé algo y lo comprobaré!

0 votos

¿Qué otras bibliotecas usas? Estoy recibiendo errores si ejecuto el mismo código Error: "package:ROI" %in% search() || requireNamespace("ROI", quietly = TRUE) no es VERDADERO

0 votos

Olvidé mencionar las bibliotecas requeridas: quantmod, PerformanceAnalytics, PortfolioAnalytics y ROI están cargadas. Además, ROI.plugin.glpk y ROI.plugin.quadprog. No estoy seguro, cuáles de estas son realmente necesarias.

1voto

wyatt Puntos 126

Rebalance en los puntos finales (R), le pasaste cuartos, por lo que cada trimestre según los puntos finales (rendimientos, 'cuartos') se reequilibrará utilizando las últimas 12 observaciones.

En tu caso, llamaste a optimizar la cartera en un conjunto de datos de 37 observaciones

nrow(edhec["2006-08-31::2009-08-31"]) 
[1] 37

Esto debería explicar la discrepancia entre las dos llamadas, ya que una tiene un conjunto de datos de 12 vs 37.

Mientras que en tu primera prueba llamaste a optimizar la cartera en un conjunto de datos de 12 observaciones, lo cual coincide con la llamada a optimize.portfolio.rebalancing

nrow(edhec["::1997-12-31",])
[1] 12

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X