Codez votre propre indicateur - II
Le RSI est correct, mais il est un peu dépassé parmi les indicateurs. Dans cet exercice, vous allez coder une version simplifiée d’un autre indicateur depuis zéro. Cet indicateur s’appelle le David Varadi Oscillator (DVO), créé par David Varadi, directeur de recherche quantitative.
L’objectif de cet oscillateur est similaire à celui du RSI : il cherche des opportunités d’acheter sur un repli temporaire et de vendre lors d’une hausse temporaire. En plus des données de marché indispensables, une fonction d’oscillateur prend deux périodes de rétrospective (lookback).
D’abord, la fonction calcule un ratio entre le cours de clôture et la moyenne des plus hauts et des plus bas. Ensuite, elle applique une SMA à cette quantité pour lisser le bruit, généralement sur une fenêtre très courte, par exemple deux jours. Enfin, elle utilise la fonction runPercentRank() pour calculer un classement en pourcentage glissant de ce ratio moyen, puis le multiplie par 100 pour le convertir en une valeur entre 0 et 100.
Pensez à la façon dont les élèves reçoivent un score en « percentile » après un test standardisé (par exemple, si une élève obtient 800 en mathématiques, elle peut être au 95e percentile au niveau national). runPercentRank() fait la même chose, mais dans le temps. Cet indicateur fournit le rang de la dernière observation, replacée dans le contexte d’une période passée définie par l’utilisateur. Par exemple, si une série a une valeur de runPercentRank de 0,90 avec une période de 126, cela signifie qu’elle est au 90e percentile par rapport à elle-même et aux 125 observations précédentes.
Votre tâche est d’implémenter cet indicateur et de l’enregistrer sous le nom DVO. Une partie du code nécessaire est fournie, et les packages quantstrat, TTR et quantmod sont chargés dans votre espace de travail.
Cet exercice fait partie du cours
Trading financier en R
Instructions
- Créez et nommez une fonction
DVOpour l’indicateur décrit ci-dessus. Les trois arguments de votre fonction serontHLC,navg(par défaut : 2) etpercentlookback(par défaut : 126). - Le ratio de la clôture (
Cl()) deHLCdivisée par la moyenne des prix le plus haut (Hi()) et le plus bas (Lo()) est déjà calculé pour vous. - Utilisez
SMA()pour implémenter une moyenne mobile de ce ratio, paramétrée par l’argumentnavg. Enregistrez ceci sous le nomavgratio. - Utilisez
runPercentRank()pour implémenter un système de classement en pourcentage pouravgratio.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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)
}