R Статистика: индикатор среднего истинного диапазона трейлинг-стопа

Я использую следующую статью:

marintrading.com/106VERV.PDF

для создания индикатора Trailing Stop Average True Range в R. Я пробовал различные способы сделать это, в том числе циклы for, pmin и создание запаздывающего временного ряда, и, похоже, ничего не работает.

Не могли бы вы помочь мне, пожалуйста?


person Jessica    schedule 05.04.2011    source источник


Ответы (1)


Почему вы пытаетесь его создать? Он доступен в пакете TTR в функции ATR.

ОБНОВЛЕНИЕ (после более внимательного прочтения вопроса). Я не совсем уверен, что это решение, но я надеюсь, что это поможет вам в правильном направлении.

library(quantmod)
getSymbols("AMD", from="2005-11-01", to="2006-08-01")
AMD$stopLongATR <- -3.5*ATR(HLC(AMD),5)[,"atr"]
AMD$stopShortATR <- 3.5*ATR(HLC(AMD),5)[,"atr"]

chartSeries(AMD, TA=NULL)
addTA(runMax(Cl(AMD)+AMD$stopLongATR,10), on=1)
addTA(runMin(Cl(AMD)+AMD$stopShortATR,10), on=1)

ОБНОВЛЕНИЕ №2:

Я пропустил логику трейлинг-стопа в статье. Этот код повторяет его более точно. Обратите внимание, что вызовы coredata необходимы, поскольку trail зависит от пути, и нам нужно сравнить вчерашние значения с сегодняшними. Операции xts/zoo объединяются по индексу перед операцией, поэтому нам нужно удалить индекс перед сравнением.

AMD$trail <- 0
AMD$AMD.lagCl <- lag(Cl(AMD))

for(i in 6:NROW(AMD)) {
  trail1 <- coredata(AMD$trail[i-1])

  if(Cl(AMD)[i] > trail1 && AMD$AMD.lagCl[i] > trail1) {
    AMD$trail[i] <- max(trail1,coredata(Cl(AMD)[i]+AMD$stopLongATR[i]))
  } else
  if(Cl(AMD)[i] < trail1 && AMD$AMD.lagCl[i] < trail1) {
    AMD$trail[i] <- min(trail1,coredata(Cl(AMD)[i]+AMD$stopShortATR[i]))
  } else
  if(Cl(AMD)[i] > trail1) {
    AMD$trail[i] <- coredata(Cl(AMD)[i]+AMD$stopLongATR[i])
  } else {
    AMD$trail[i] <- coredata(Cl(AMD)[i]+AMD$stopShortATR[i])
  }
}

chartSeries(AMD)
addTA(AMD$trail, on=1)
person Joshua Ulrich    schedule 05.04.2011
comment
Привет, я использую функцию ATR в пакете TTR, но код, который я пытаюсь написать, представляет собой трейлинг-стоп с использованием ATR, где у меня возникают проблемы. - person Jessica; 05.04.2011
comment
@Jessica: мои извинения, я недостаточно внимательно прочитал ваш вопрос. Пожалуйста, смотрите мое редактирование. - person Joshua Ulrich; 05.04.2011
comment
Круто спасибо помог! Каков наилучший способ заставить индикатор переключаться снизу вверх после того, как ценовой тренд сломается ниже stopShortATR? Я думал использовать цикл for, но может быть немного медленным? - person Jessica; 05.04.2011
comment
@Джессика: я неправильно прочитала статью. Пожалуйста, смотрите мой исправленный ответ. Цикл, вероятно, самый простой, потому что трейл зависит от предыдущих значений самого себя. - person Joshua Ulrich; 05.04.2011