Estoy intentando calcular el volumen de negocio de una estrategia de cartera.
Primero genero algunos datos aleatorios y les asigno fechas:
data <- replicate(6,rnorm(1000))
data <- as.data.frame(data)
dates<-seq(as.Date("1932/09/01"), as.Date("2015/12/01"), by = "1 month",tzone="GMT")-1
rownames(data)<-dates
Lo convierto en formato xts:
library(xts)
data<-as.xts(data,dateFormat="Date")
A continuación, utilizo la función Return.portfolio() para calcular las ponderaciones rebalanceadas asumiendo una estrategia de igual ponderación:
library(PerformanceAnalytics)
results <- Return.portfolio(data,rebalance_on="months",geometric=F,verbose=T)
Para calcular el volumen de negocios, supongo que necesito los pesos del principio del período y el peso del final del período.
Los extraigo de los resultados:
bop <- results$BOP.Weight #beginning of period weights
eop <- results$EOP.Weight #end of period weights
A continuación, para calcular el volumen de negocios, restaré bop
de eop
y tomar el valor absoluto:
f<-abs(bop-eop)
Por último, para calcular el volumen de negocio utilizo la siguiente fórmula:
sum(f)*(1/(nrow(data)-1))
Sin embargo, cuando pruebo esto con datos reales (en los que sé cuál debería ser el volumen de negocio) obtengo cifras enormes e irreales con este método.
¿Qué estoy haciendo mal?
Mi definición de rotación proviene de: Demiguel et al Constraining Portfolio Norms http://faculty.london.edu/avmiguel/DeMiguelGarlappiNogalesUppalMS.pdf página 806
La definición es:
0 votos
Creo que su pregunta no es clara. Muchas notaciones deben ser definidas antes de ser utilizadas; no hay que asumir que todo el mundo las conoce. Para el código, es necesario al menos proporcionar algunos comentarios.
0 votos
por favor, vea mis ediciones. Ahora el problema es reproducible.
0 votos
¿Cuál es su definición de "volumen de negocio"? Su cálculo de dos líneas no se parece a ninguna definición que yo conozca.
0 votos
Mi definición de volumen de negocio anual es (valor en dólares de los valores vendidos + valor en dólares de los valores comprados) dividido por (valor de la cartera al principio del año + valor de la cartera al final del año). Tenga en cuenta que se trata de valores en dólares, no de ponderaciones.
0 votos
Creo que el problema está en la línea
results <- Return.portfolio(data,rebalance_on="months",geometric=F,verbose=T)
Está devolviendo un tipo xts/zoo, en lugar de una lista de las múltiples salidas que está tratando de obtener de él.0 votos
@John: Sí, pero si exacto BOP.Weight y EOP.Weight entonces son simples matrices.
0 votos
@user1723765 Me salen nulos cuando intento extraerlos de los resultados. Por eso pensé que era el problema.
0 votos
que raro, el código me funciona. ¿Estás seguro de que has escrito BOP.Weight y no BOP.Weights? la segunda opción también me da NULL
0 votos
@noob2 mi definición de rotación viene de Demiguel et al Constraining Portfolio Norms faculty.london.edu/avmiguel/DeMiguelGarlappiNogalesUppalMS.pdf página 806. En este documento, el volumen de negocios se define exactamente como la fórmula anterior.
1 votos
@user1723765, tu problema no es reproducible a menos que proporciones qué datos has utilizado, los conjuntos de datos exactos (has dicho que funciona con tus datos aleatorios pero no con "datos reales"), ....Espero que no esperes que otros escriban una solución de código completa a cambio de 100....De todas formas, por lo que describes el problema podría ser que algunos pesos no sumen 1 o algo parecido. Pero tal y como está planteada tu pregunta es muy difícil que alguien se interese en dedicar tiempo a hacer conjeturas...