Supongamos que tengo series temporales de precios de muchas acciones. ¿Cuál es la mejor manera de ordenar las acciones en función de las que han subido o se han mantenido igual en relación con las demás? ¿Puede hacerse con una media ponderada, dando más peso a las cifras más recientes, para tener en cuenta las tendencias?
Respuestas
¿Demasiados anuncios?Todo este enfoque depende de cómo se defina el "valor". Una vez definido el valor, se puede definir una métrica para la "estabilidad" o el "riesgo". Una hipótesis de trabajo sería que las acciones que han tenido un valor estable en el pasado seguirán siendo valiosas en el futuro. Por supuesto, esto es una hipótesis.
Supongamos (a modo de ejemplo, esto no es un consejo financiero) que defines valor como "media de los rendimientos logarítmicos" y estabilidad como "desviación estándar de los rendimientos logarítmicos". A continuación, podría clasificar sus acciones según estas métricas y elegir las que tienen un valor alto y un riesgo bajo.
Si quieres ser más sofisticado, puedes utilizar otra métrica de riesgo, como la reducción del riesgo. También puedes hacer un análisis continuado o utilizar el remuestreo bootstrap para las distribuciones en torno a tus métricas de "valor" y "estabilidad".
Aquí hay un código en R que ilustra mi ejemplo:
#Load Data
rm(list = ls(all = TRUE)) #CLEAR WORKSPACE
set.seed(1)
library(quantmod)
myStocks <- c('AAPL','MSFT','GOOG','F')
getSymbols(myStocks,from='01-01-2004')
Data <- na.omit(cbind(Cl(AAPL),Cl(MSFT),Cl(GOOG),Cl(F)))
names(Data) <- myStocks
#Define value and risk
returns <- function(x) {diff(log(x))}
value <- function(x) {mean(returns(x))}
risk <- function(x) {sd(returns(x))}
#Estimate value and risk
StockScreen <- data.frame( risk=apply(as.matrix(Data),2,risk),
value=apply(as.matrix(Data),2,value))
round(StockScreen,6)
plot(StockScreen)
text(StockScreen$risk+.001,StockScreen$value,labels=row.names(StockScreen))
#Estimate value and risk, different risk measure
library(PerformanceAnalytics)
risk <- function(x) {maxDrawdown(returns(x))}
StockScreen <- data.frame( risk=apply(as.matrix(Data),2,risk),
value=apply(as.matrix(Data),2,value))
round(StockScreen,6)
#Boostrap value and risk measure
library(meboot)
library(plyr)
bootstrap <- function(x) {
reps <- as.data.frame(meboot(as.ts(x), reps=100)$ensemble)
valueDistribution <- apply(reps,2,value)
riskDistribution <- apply(reps,2,risk)
valueMean <- mean(valueDistribution)
valueSD <- sd(valueDistribution)
riskMean <- mean(riskDistribution)
riskSD <- sd(riskDistribution)
data.frame(valueMean=valueMean,valueSD=valueSD,riskMean=riskMean,riskSD=riskSD)
}
bootstrapScreen <- ldply(as.list(Data),bootstrap,.progress = "text")
row.names(bootstrapScreen) <- bootstrapScreen$.id
bootstrapScreen$.id <- NULL
round(bootstrapScreen,4)
Parece que le interesa calcular la Fuerza Relativa
http://www.investopedia.com/terms/r/relativestrength.asp
Puede compararlo con un índice de referencia, como el Dow 30, o calcular su propio índice a partir de sus 50 acciones y comparar cada una de ellas con el índice.
-Ralph Winters
Lo que usted describe es inversión de impulso . Se suele hacer en dos pasos:
- Calcule una estadística de impulso a partir de los precios/retornos pasados.
- Compare las estadísticas de impulso de todas las acciones de su universo.
El paso 1 suele realizarse utilizando una media móvil de los rendimientos pasados (es erróneo utilizar los precios porque las divisiones y los dividendos sesgarán los resultados). Esto puede hacerse utilizando una media móvil simple, o utilizando medias móviles ponderadas exponencialmente . En cualquier caso, sus resultados dependerán en gran medida de la ventana/media de la media móvil. En el caso del impulso de la renta variable, la mayoría de los estudios utilizan el impulso de los últimos 6-12 meses, excluyendo el mes más reciente, aproximadamente.
El paso 2 puede realizarse con un ad hoc regla de clasificación ( Jegadeesh y Titman (1993) utilizar deciles superiores/inferiores) o con la ayuda de un modelo de riesgo.