Статистика R: Индикатор среднего истинного диапазона трейлинг-стопа - PullRequest
6 голосов
/ 05 апреля 2011

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

marintrading.com / 106VERV.PDF

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

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

1 Ответ

8 голосов
/ 05 апреля 2011

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

UPDATE (после более детального изучения вопроса).Я не совсем уверен, что это решение, но я надеюсь, что оно поможет вам в правильном направлении.

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)
...