Creează-ți propriul indicator - II
Deși RSI este un indicator decent, este oarecum depășit în peisajul actual al indicatorilor. În acest exercițiu, vei implementa de la zero o versiune simplificată a unui alt indicator. Acesta se numește David Varadi Oscillator (DVO) și a fost creat de David Varadi, director de cercetare cantitativă.
Scopul acestui oscilator este similar cu cel al RSI: încearcă să identifice oportunități de cumpărare la scăderi temporare și de vânzare în tendințe ascendente temporare. Pe lângă datele de piață obligatorii, funcția oscilatorului primește două perioade de retrospectivă.
În primul rând, funcția calculează un raport între prețul de închidere și media prețurilor maxim și minim. Apoi aplică o SMA asupra acestei valori pentru a reduce zgomotul, de obicei pe un interval de timp foarte scurt, cum ar fi două zile. În final, folosește funcția runPercentRank() pentru a calcula rangul procentual rulant al acestui raport mediu și înmulțește rezultatul cu 100, obținând o valoare între 0 și 100.
Gândește-te la modul în care studenții primesc scoruri percentilice după un test standardizat (de exemplu, dacă un student obține 800 la secțiunea de matematică, s-ar putea afla în percentila 95 la nivel național). runPercentRank() face același lucru, dar în timp. Acest indicator oferă rangul celei mai recente observații în raport cu o perioadă trecută specificată de utilizator. De exemplu, dacă o valoare are un runPercentRank de 0,90 cu o perioadă de retrospectivă de 126, înseamnă că se află în percentila 90 față de ea însăși și față de cele 125 de observații anterioare.
Sarcina ta este să implementezi acest indicator și să îl salvezi ca DVO. O parte din codul necesar este deja furnizat, iar pachetele quantstrat, TTR și quantmod sunt încărcate în spațiul tău de lucru.
Acest exercițiu face parte din cursul
Tranzacționare financiară în R
Instrucțiuni pentru exercițiu
- Creează și denumește o funcție,
DVO, pentru indicatorul descris mai sus. Cele trei argumente ale funcției vor fiHLC,navg(implicit 2) șipercentlookback(implicit 126). - Raportul dintre prețul de închidere (
Cl()) alHLCși media prețurilor maxim (Hi()) și minim (Lo()) este deja calculat pentru tine. - Folosește
SMA()pentru a implementa o medie mobilă a acestui raport, parametrizată prin argumentulnavg. Salvează rezultatul caavgratio. - Folosește
runPercentRank()pentru a implementa un sistem de clasificare procentuală pentruavgratio.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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)
}