Створіть власний індикатор — II
RSI — непоганий індикатор, але нині його вважають дещо застарілим. У цій вправі ви напишете спрощену версію іншого індикатора з нуля. Індикатор називається David Varadi Oscillator (DVO), його автор — Девід Вараді, директор з кількісних досліджень.
Мета цього осцилятора подібна до RSI: він намагається знаходити можливості купувати на короткочасних просіданнях і продавати на тимчасових зростаннях. Окрім обов'язкових ринкових даних, функція осцилятора приймає два періоди огляду (lookback).
Спочатку функція обчислює відношення між ціною закриття та середнім значенням цін максимуму і мінімуму. Далі до цього показника застосовується SMA, щоб згладити шум, зазвичай на дуже короткому інтервалі, наприклад, два дні. Нарешті, використовується функція runPercentRank(), щоб обчислити ковзний процентиль цього середнього відношення, після чого результат множиться на 100, аби отримати шкалу 0–100.
Згадайте, як учні отримують процентильні бали після стандартизованого тесту (тобто, якщо студентка набрала 800 з математики, це може відповідати 95-му процентилю на національному рівні). runPercentRank() робить те саме, але в часовому розрізі. Цей індикатор надає ранг для останнього спостереження в контексті заданого користувачем минулого періоду. Наприклад, якщо значення runPercentRank дорівнює 0.90 за періоду огляду 126, це означає, що воно в 90-му процентилі порівняно із собою та попередніми 125 спостереженнями.
Ваше завдання — реалізувати цей індикатор і зберегти його як DVO. Частину необхідного коду вже надано, а пакети quantstrat, TTR та quantmod завантажено у ваш робочий простір.
Ця вправа є частиною курсу
Фінансовий трейдинг в R
Інструкції до вправи
- Створіть і назвіть функцію
DVOдля індикатора, описаного вище. Три аргументи вашої функції:HLC,navg(типово 2) іpercentlookback(типово 126). - Відношення ціни закриття (
Cl()) зHLCдо середнього між цінами максимуму (Hi()) і мінімуму (Lo()) уже обчислено для вас. - Використайте
SMA(), щоб реалізувати ковзне середнє цього відношення, параметризоване аргументомnavg. Збережіть його якavgratio. - Використайте
runPercentRank(), щоб реалізувати систему процентильного ранжування дляavgratio.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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)
}