Macd <- function(data,fast=12,slow=26,difnm=9){
n <- fast
m <- slow
x <- difnm
total <- m+x
Dl <- (Hi(data)+Lo(data)+2*Cl(data))/4
nEMA <- runMean(Dl,n=n)
mEMA <- runMean(Dl,n=m)
DIF <- nEMA-mEMA
MACD <- runMean(DIF,n=x)
nEMA <- nEMA[total]
mEMA <- mEMA[total]
MACD <- MACD[total]
DIF <- DIF[total]
Date <- as.character(index(data[total,]))
all <- data.frame(Date,MACD,DIF,stringsAsFactors = FALSE)
for(w in c((total+1):nrow(data))){
todayCl <- as.numeric(Dl[w])
nEMA=(nEMA*(n-1)+todayCl*2)/(n+1)
mEMA=(mEMA*(m-1)+todayCl*2)/(m+1)
DIF=nEMA-mEMA
MACD=(MACD*(x-1)+DIF*2)/(x+1)
Date <- as.character(index(data[w,]))
all <- rbind(all,c(Date,MACD,DIF))
}
all$Date <- as.Date(all$Date)
all$MACD <- round(as.numeric(all$MACD),2)
all$DIF <- round(as.numeric(all$DIF),2)
all$OSC <- all$DIF-all$MACD
all <- as.xts(read.zoo(all))
}
#--------------------------------------
K <- "K>80" %in% input$checkstrategy
M <- "M<50" %in% input$checkstrategy
if(K&M){
cond1 <- kd$k>80&macd$m<50
plstrategy(data2,cond1)
}
else if(K){
cond1 <- kd$k>80
plstrategy(data2,cond1)
}
else if(M){
cond1 <- macd$m<50
plstrategy(data2,cond1)
}
CiBNYWNkIDwtIGZ1bmN0aW9uKGRhdGEsZmFzdD0xMixzbG93PTI2LGRpZm5tPTkpewogICAgICBuIDwtIGZhc3QKICAgICAgbSA8LSBzbG93CiAgICAgIHggPC0gZGlmbm0KICAgICAgdG90YWwgPC0gbSt4CiAgICAgIERsIDwtIChIaShkYXRhKStMbyhkYXRhKSsyKkNsKGRhdGEpKS80CiAgICAgIG5FTUEgPC0gcnVuTWVhbihEbCxuPW4pCiAgICAgIG1FTUEgPC0gcnVuTWVhbihEbCxuPW0pCiAgICAgIERJRiA8LSBuRU1BLW1FTUEKICAgICAgTUFDRCA8LSBydW5NZWFuKERJRixuPXgpCiAgICAgIG5FTUEgPC0gbkVNQVt0b3RhbF0KICAgICAgbUVNQSA8LSBtRU1BW3RvdGFsXQogICAgICBNQUNEIDwtIE1BQ0RbdG90YWxdCiAgICAgIERJRiA8LSBESUZbdG90YWxdCiAgICAgIERhdGUgPC0gYXMuY2hhcmFjdGVyKGluZGV4KGRhdGFbdG90YWwsXSkpCiAgICAgIGFsbCA8LSBkYXRhLmZyYW1lKERhdGUsTUFDRCxESUYsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQogICAgICAKICAgICAgZm9yKHcgaW4gYygodG90YWwrMSk6bnJvdyhkYXRhKSkpewogICAgICAgIHRvZGF5Q2wgPC0gYXMubnVtZXJpYyhEbFt3XSkgCiAgICAgICAgbkVNQT0obkVNQSoobi0xKSt0b2RheUNsKjIpLyhuKzEpCiAgICAgICAgbUVNQT0obUVNQSoobS0xKSt0b2RheUNsKjIpLyhtKzEpCiAgICAgICAgRElGPW5FTUEtbUVNQQogICAgICAgIE1BQ0Q9KE1BQ0QqKHgtMSkrRElGKjIpLyh4KzEpCiAgICAgICAgRGF0ZSA8LSBhcy5jaGFyYWN0ZXIoaW5kZXgoZGF0YVt3LF0pKQogICAgICAgIGFsbCA8LSByYmluZChhbGwsYyhEYXRlLE1BQ0QsRElGKSkKICAgICAgfQogICAgICBhbGwkRGF0ZSA8LSBhcy5EYXRlKGFsbCREYXRlKQogICAgICBhbGwkTUFDRCA8LSByb3VuZChhcy5udW1lcmljKGFsbCRNQUNEKSwyKQogICAgICBhbGwkRElGIDwtIHJvdW5kKGFzLm51bWVyaWMoYWxsJERJRiksMikKICAgICAgYWxsJE9TQyA8LSBhbGwkRElGLWFsbCRNQUNECiAgICAgIGFsbCA8LSBhcy54dHMocmVhZC56b28oYWxsKSkKICAgICAgCiAgICB9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIEsgPC0gIks+ODAiICVpbiUgaW5wdXQkY2hlY2tzdHJhdGVneQogICAgTSA8LSAiTTw1MCIgJWluJSBpbnB1dCRjaGVja3N0cmF0ZWd5CgoKaWYoSyZNKXsKICAgICAgICAgY29uZDEgPC0ga2Qkaz44MCZtYWNkJG08NTAKICAgICAgcGxzdHJhdGVneShkYXRhMixjb25kMSkKICAgICAgCiAgICB9CiAgICBlbHNlIGlmKEspewogICAgIGNvbmQxIDwtIGtkJGs+ODAKICAgICAgcGxzdHJhdGVneShkYXRhMixjb25kMSkKICAgIH0KICAgIGVsc2UgaWYoTSl7CiAgICAgY29uZDEgPC0gbWFjZCRtPDUwCiAgICAgIHBsc3RyYXRlZ3koZGF0YTIsY29uZDEpCiAgICB9CiAg