Napiš vlastní indikátor – II
RSI je solidní indikátor, ale z dnešního pohledu už trochu zastaralý. V tomto cvičení si od základu naprogramuješ zjednodušenou verzi jiného indikátoru. Jmenuje se David Varadi Oscillator (DVO) a jeho autorem je David Varadi, ředitel kvantitativního výzkumu.
Účel tohoto oscilátoru je podobný jako u RSI – snaží se identifikovat příležitosti k nákupu při dočasném poklesu a k prodeji při dočasném vzestupu. Kromě povinných tržních dat přijímá funkce oscilátoru dva parametry zpětného pohledu.
Funkce nejprve vypočítá poměr mezi závěrečnou cenou a průměrem nejvyšší a nejnižší ceny. Poté na tuto hodnotu aplikuje SMA, aby vyhladila šum – obvykle na velmi krátkém časovém rámci, například dva dny. Nakonec pomocí funkce runPercentRank() vypočítá průběžné percentilové pořadí tohoto průměrného poměru a vynásobí ho 100, čímž hodnotu převede na rozsah 0–100.
Představ si, jak studenti dostávají percentilové skóre po standardizovaných testech – například student s 800 body v matematice může být na 95. percentilu v celostátním srovnání. runPercentRank() funguje stejně, jen v čase. Tento indikátor udává pořadí nejnovějšího pozorování v kontextu určitého minulého období, které si sám nastavíš. Pokud má například hodnota runPercentRank při zpětném pohledu 126 period hodnotu 0,90, znamená to, že se nachází na 90. percentilu v porovnání se sebou samou a předchozími 125 pozorováními.
Tvým úkolem je implementovat tento indikátor a uložit ho jako DVO. Část potřebného kódu je již připravena. Do tvého pracovního prostředí jsou načteny balíčky quantstrat, TTR a quantmod.
Toto cvičení je součástí kurzu
Finanční obchodování v R
Pokyny k cvičení
- Vytvoř a pojmenuj funkci
DVOpro výše popsaný indikátor. Funkce bude mít tři argumenty:HLC,navg(výchozí hodnota 2) apercentlookback(výchozí hodnota 126). - Výpočet poměru závěrečné ceny (
Cl()) zHLCdělené průměrem nejvyšší (Hi()) a nejnižší (Lo()) ceny je již připraven. - Pomocí
SMA()implementuj klouzavý průměr tohoto poměru s parametremnavg. Výsledek ulož jakoavgratio. - Pomocí
runPercentRank()implementuj systém percentilového pořadí proavgratio.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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)
}