R统计:平均真实范围追踪止损指标

时间:2011-04-05 15:17:47

标签: r statistics indicator quantmod

我正在使用以下文章:

marintrading.com/106VERV.PDF

在R中创建平均真实范围跟踪止损指示器。我已经尝试了各种方法来执行此操作,包括for循环,pmin和创建滞后时间序列,似乎没有任何工作。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:8)

你为什么要创造它?它位于函数ATR的{​​{3}}中。

更新(更仔细地阅读问题后)。我不确定这是解决方案,但我希望它可以帮助你朝着正确的方向发展。

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)