НачатьНачать бесплатно

Создайте собственный индикатор — II

RSI — неплохой инструмент, однако по современным меркам он считается устаревшим. В этом упражнении вы напишете упрощённую версию другого индикатора с нуля. Он называется осциллятор Дэвида Варади (DVO) и был разработан Дэвидом Варади, директором по количественным исследованиям.

По своей цели этот осциллятор схож с RSI: он помогает находить возможности для покупки на временном спаде и продажи на временном росте. Помимо обязательных рыночных данных, функция осциллятора принимает два периода ретроспективного анализа.

Сначала функция вычисляет отношение цены закрытия к среднему значению максимальной и минимальной цен. Затем применяет 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)
}
Редактировать и запускать код