Kom igångKom igång gratis

Koda din egen indikator – del II

RSI är en hyfsat bra indikator, men den börjar bli lite daterad. I den här övningen kodar du en förenklad version av en annan indikator från grunden. Indikatorn heter David Varadi Oscillator (DVO) och är skapad av David Varadi, en kvantitativ forskningsdirektör.

Syftet med den här oscillatorn liknar RSI:s – den försöker identifiera tillfällen att köpa vid tillfälliga dippar och sälja vid tillfälliga uppgångar. Förutom obligatorisk marknadsdata tar en oscillatorfunktion emot två lookback-perioder.

Funktionen beräknar först ett förhållande mellan stängningskursen och medelvärdet av hög- och lågkurserna. Sedan applicerar den ett SMA på det här värdet för att jämna ut brus, oftast över ett mycket kort tidsfönster, till exempel två dagar. Slutligen använder den funktionen runPercentRank() för att beräkna en löpande percentilrangordning av detta genomsnittliga förhållande och multiplicerar resultatet med 100 för att få ett värde mellan 0 och 100.

Tänk på hur studenter får percentilpoäng efter ett standardiserat prov – om en student fick 800 på matematikdelen kan hon till exempel befinna sig i den 95:e percentilen nationellt. runPercentRank() gör samma sak, fast över tid. Indikatorn ger rangordningen för den senaste observationen i förhållande till en tidigare period som användaren anger. Om något till exempel har ett runPercentRank-värde på 0,90 med en lookback-period på 126, innebär det att värdet befinner sig i den 90:e percentilen jämfört med sig självt och de senaste 125 observationerna.

Din uppgift är att implementera den här indikatorn och spara den som DVO. En del av den nödvändiga koden är redan angiven, och paketen quantstrat, TTR och quantmod är inlästa i din arbetsmiljö.

Den här övningen är en del av kursen

Finansiell handel i R

Visa kurs

Övningsinstruktioner

  • Skapa och namnge en funktion, DVO, för indikatorn som beskrivs ovan. Funktionens tre argument ska vara HLC, navg (standardvärde 2) och percentlookback (standardvärde 126).
  • Förhållandet mellan stängningskursen (Cl()) för HLC dividerat med medelvärdet av hög- (Hi()) och lågkurserna (Lo()) är redan beräknat åt dig.
  • Använd SMA() för att implementera ett glidande medelvärde av detta förhållande, parametriserat av argumentet navg. Spara resultatet som avgratio.
  • Använd runPercentRank() för att implementera ett percentilrangordningssystem för avgratio.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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)
}
Redigera och kör kod