8

次の記事を使用しています。

marintrading.com/106VERV.PDF

R で Average True Range Trailing Stop インジケーターを作成します。 for ループ、pmin、ラグ時系列の作成など、さまざまな方法を試しましたが、何もうまくいかないようです。

助けていただけませんか?

4

1 に答える 1

11

なぜそれを作ろうとしているのですか?関数内の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があるため、呼び出しが必要であることに注意してください。trailxts/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)
于 2011-04-05T15:21:36.437 に答える