Zakoduj własny wskaźnik – część II
RSI to przyzwoity wskaźnik, ale jak na dzisiejsze standardy jest już nieco przestarzały. W tym ćwiczeniu zakoduj od podstaw uproszczoną wersję innego wskaźnika – oscylatora Davida Varadiego (DVO), opracowanego przez Davida Varadiego, dyrektora ds. badań ilościowych.
Cel tego oscylatora jest podobny do RSI: stara się on identyfikować okazje do kupna podczas chwilowych spadków i sprzedaży podczas chwilowych wzrostów. Oprócz standardowych danych rynkowych funkcja oscylatora przyjmuje dwa okresy wsteczne (lookback).
Funkcja najpierw oblicza stosunek ceny zamknięcia do średniej cen maksymalnej i minimalnej. Następnie wygładza tę wartość za pomocą SMA – zwykle na bardzo krótkim przedziale czasowym, np. dwóch dni. Na końcu używa funkcji runPercentRank(), aby obliczyć bieżącą rangę percentylową tej wygładzonej wartości, i mnoży wynik przez 100, przekształcając go na skalę od 0 do 100.
Pomyśl o tym tak, jak o wynikach percentylowych na egzaminach standaryzowanych – jeśli ktoś uzyska 800 punktów z matematyki, może znaleźć się w 95. percentylu krajowym. Funkcja runPercentRank() działa analogicznie, tyle że w czasie. Wskaźnik wyznacza rangę dla najnowszej obserwacji na tle określonego przez użytkownika okresu historycznego. Na przykład wartość runPercentRank równa 0,90 przy okresie wstecznym 126 oznacza, że bieżąca obserwacja plasuje się w 90. percentylu w porównaniu z nią samą i 125 poprzednimi obserwacjami.
Twoim zadaniem jest zaimplementowanie tego wskaźnika i zapisanie go jako DVO. Część kodu została już przygotowana. Pakiety quantstrat, TTR i quantmod są wczytane do środowiska.
To ćwiczenie jest częścią kursu
Handel finansowy w R
Instrukcje do ćwiczenia
- Utwórz i nazwij funkcję
DVOzgodnie z opisem powyżej. Funkcja przyjmuje trzy argumenty:HLC,navg(domyślnie 2) orazpercentlookback(domyślnie 126). - Stosunek ceny zamknięcia (
Cl()) ze zbioruHLCdo średniej cen maksymalnej (Hi()) i minimalnej (Lo()) jest już obliczony. - Użyj funkcji
SMA(), aby obliczyć średnią kroczącą tego stosunku, parametryzowaną argumentemnavg. Zapisz wynik jakoavgratio. - Użyj funkcji
runPercentRank(), aby zastosować ranking percentylowy do zmiennejavgratio.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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)
}