Programa tu propio indicador - II
Aunque el RSI es correcto, está algo desfasado en cuanto a indicadores. En este ejercicio, vas a programar desde cero una versión simplificada de otro indicador. El indicador se llama David Varadi Oscillator (DVO), creado por David Varadi, director de investigación cuantitativa.
La finalidad de este oscilador es similar a la del RSI: intenta detectar oportunidades para comprar en caídas temporales y vender en repuntes temporales. Además de los datos de mercado obligatorios, una función de oscilador recibe dos periodos de retrospectiva (lookback).
Primero, la función calcula un cociente entre el precio de cierre y la media de los precios máximo y mínimo. Después, aplica una SMA a esa cantidad para suavizar el ruido, normalmente en un marco temporal muy corto, como dos días. Por último, usa la función runPercentRank() para calcular un percentil móvil de ese cociente medio y lo multiplica por 100 para convertirlo en un valor entre 0 y 100.
Piensa en cómo el alumnado obtiene puntuaciones percentiles tras hacer una prueba estandarizada (por ejemplo, si alguien saca 800 en la sección de matemáticas, podría estar en el percentil 95 a nivel nacional). runPercentRank() hace lo mismo, pero a lo largo del tiempo. Este indicador proporciona el rango de la última observación en el contexto de un periodo pasado que el usuario especifica. Por ejemplo, si algo tiene un valor de runPercentRank de 0,90 usando un periodo de retrospectiva de 126, significa que está en el percentil 90 cuando se compara consigo mismo y con las 125 observaciones anteriores.
Tu tarea es implementar este indicador y guardarlo como DVO. Parte del código necesario ya está proporcionado, y los paquetes quantstrat, TTR y quantmod están cargados en tu espacio de trabajo.
Este ejercicio forma parte del curso
Trading financiero en R
Instrucciones del ejercicio
- Crea y nombra una función,
DVO, para el indicador descrito arriba. Los tres argumentos de tu función seránHLC,navg(por defecto 2) ypercentlookback(por defecto 126). - El cociente del cierre (
Cl()) deHLCdividido entre la media de los precios máximo (Hi()) y mínimo (Lo()) ya está calculado para ti. - Usa
SMA()para implementar una media móvil de este cociente, parametrizada por el argumentonavg. Guarda esto comoavgratio. - Usa
runPercentRank()para implementar un sistema de clasificación por percentiles paraavgratio.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Declare the DVO function
DVO <- function(___, navg = ___, percentlookback = ___) {
# Compute the ratio between closing prices to the average of high and low
ratio <- Cl(HLC)/((Hi(HLC) + Lo(HLC))/2)
# Smooth out the ratio outputs using a moving average
avgratio <- SMA(ratio, n = ___)
# Convert ratio into a 0-100 value using runPercentRank()
out <- runPercentRank(___, n = percentlookback, exact.multiplier = 1) * 100
colnames(out) <- "DVO"
return(out)
}