Schrijf je eigen indicator - II
De RSI is prima, maar als indicator wel wat gedateerd. In deze oefening ga je een vereenvoudigde versie van een andere indicator helemaal zelf coderen. De indicator heet de David Varadi Oscillator (DVO), bedacht door David Varadi, een directeur kwantitatief onderzoek.
Het doel van deze oscillator lijkt op dat van de RSI: kansen vinden om tijdelijk in te stappen bij een dip en te verkopen in een tijdelijke opleving. Naast verplichte marktdata neemt een oscillatorfunctie twee lookbackperioden als input.
Eerst berekent de functie een ratio tussen de slotkoers en het gemiddelde van de hoogste en laagste prijs. Daarna pas je een SMA toe op die grootheid om ruis te dempen, meestal over een heel korte periode, zoals twee dagen. Tot slot gebruik je de functie runPercentRank() om een lopende percentielrang van deze gemiddelde ratio te nemen, en vermenigvuldig je die met 100 om het naar een 0-100-schaal om te zetten.
Denk aan hoe leerlingen een percentielscores krijgen na een gestandaardiseerde toets (bijvoorbeeld: als iemand 800 scoort op wiskunde, kan die landelijk in het 95e percentiel zitten). runPercentRank() doet hetzelfde, maar dan over de tijd. Deze indicator geeft de rang voor de laatste observatie, in de context van een door de gebruiker opgegeven periode in het verleden. Bijvoorbeeld: als iets een runPercentRank-waarde van .90 heeft met een lookbackperiode van 126, dan staat het in het 90e percentiel vergeleken met zichzelf en de afgelopen 125 observaties.
Jouw taak is om deze indicator te implementeren en op te slaan als DVO. Een deel van de benodigde code is al gegeven, en de pakketten quantstrat, TTR en quantmod zijn geladen in je werkomgeving.
Deze oefening maakt deel uit van de cursus
Financieel traden in R
Oefeninstructies
- Maak en benoem een functie
DVOvoor de hierboven beschreven indicator. De drie argumenten van je functie zijnHLC,navg(standaard 2) enpercentlookback(standaard 126). - De ratio van de slotkoers (
Cl()) vanHLCgedeeld door het gemiddelde van de hoogste (Hi()) en laagste (Lo()) prijs is al voor je berekend. - Gebruik
SMA()om een voortschrijdend gemiddelde van deze ratio te maken, geparametriseerd door het argumentnavg. Sla dit op alsavgratio. - Gebruik
runPercentRank()om een percentiel-rangsysteem vooravgratiote implementeren.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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)
}