2016-12-03 54 views
1

我有一些简单的R代码来读取股票价格列表。我想绘制ZigZag指标,突出显示所有拐点,并打印出最后三个拐点的值。这应该这样做,但它不能正常工作。任何想法为什么?R中的锯齿形指标

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)) 
+0

你能分享你的数据吗? –

回答

1

这里有一个reproducible example

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,因为你无法知道最后的拐点出现没有未来的数据。这将导致那里是NAinfl

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 

所以,你需要子集化的价格数据,找到价格事先取出inflNA在最后的拐点。

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