1

株価のリストを読み取る簡単な R コードがあります。ジグザグ インジケーターをプロットし、すべての変曲点を強調表示し、最後の 3 つの変曲点の値を出力したいと思います。これはそれを行うことになっていますが、正しく機能しません。理由はありますか?

library(TTR)

mydata <-read.csv("EURUSD.csv", sep=",",header=TRUE)

attach(mydata)

plot(BAR, PRICE)

zz <- ZigZag(PRICE, change = 5, percent = TRUE)

lines(zz, col = "blue")

#get the inflection points
infl <- c( FALSE, diff(diff(zz)>0)!=0   )
points(mydata$BAR[infl ], mydata$PRICE[infl ], col="red")

#print the last 3 inflection points
print( tail(mydata$PRICE[infl],1) )
print( tail(mydata$PRICE[infl],2) )
print( tail(mydata$PRICE[infl],3) )
4

1 に答える 1

2

再現可能な例を次に示します。

library(TTR)
data(ttrc)

x <- tail(ttrc, 150)
zz <- ZigZag(x$Close, change = 5, percent = TRUE)

plot(x$Date, x$Close)
lines(x$Date, zz, col = "blue")

#get the inflection points
infl <- c( FALSE, diff(diff(zz)>0)!=0   )
points(x$Date[infl ], x$Close[infl ], col="red")

#print the last 3 inflection points
print( tail(x$Close[infl],1) )
print( tail(x$Close[infl],2) )
print( tail(x$Close[infl],3) )

問題は、将来のデータがなければ最後の変曲点がどこに発生するかを知ることができないため、からの出力の最後にZigZagがあることです。NAこれにより、NA次のようになりinflます。

R> tail(infl,15)
 [1] FALSE FALSE FALSE FALSE FALSE FALSE    NA    NA    NA    NA    NA    NA
[13]    NA    NA    NA

ベクトルを次のようにサブセット化すると、次のようになりNAますNA

R> (1:10)[c(1, NA, 10)]
[1]  1 NA 10

したがって、最後の変曲点での価格を見つけるために、価格データをサブセット化する前にNAfromを削除する必要があります。infl

R> infl <- na.omit(c(FALSE, diff(sign(diff(zz))) != 0))
R> #print the last 3 inflection points
R> tail(x$Close[infl],1)
[1] 44.27
R> tail(x$Close[infl],2)
[1] 48.61 44.27
R> tail(x$Close[infl],3)
[1] 45.32 48.61 44.27
于 2016-12-03T13:44:58.900 に答える