fork download
  1. require(quantmod)
  2. require(xts)
  3. data2 <- read.csv("data2.csv",header=T)
  4. data2 <- as.xts(read.zoo(data2))
  5.  
  6. Macd <- function(data,fast=12,slow=26,difnm=9){
  7.  
  8. total <- slow+difnm#EMA26需要累積26天,MACD9需要累積9天,這裡為34天
  9. Dl <- (Hi(data)+Lo(data)+2*Cl(data))/4 #每日需求指數
  10. nEMA <- runMean(Dl,n=fast) #12日快線的平均
  11. mEMA <- runMean(Dl,n=slow)#26日慢線的平均
  12. DIF <- nEMA-mEMA #快慢線平均相減
  13. MACD <- runMean(DIF,n=difnm)#快慢線平均相減的九日平均
  14. nEMA <- nEMA[total]#能有計算結果的第一天 首日EMA12
  15. mEMA <- mEMA[total]#首日EMA26
  16. MACD <- MACD[total]#首日MACD
  17. DIF <- DIF[total]#首日OSC
  18. Date <- as.character(index(data[total,]))
  19. all <- data.frame(Date,MACD,DIF,stringsAsFactors = FALSE) #合併第一天的macd osc 日期
  20.  
  21. for(w in c((total+1):nrow(data))){ #從第35天開始到最後
  22. todayCl <- as.numeric(Dl[w]) #每一天的Dl
  23. nEMA=(nEMA*(fast-1)+todayCl*2)/(fast+1) #nEMA=(前一日nEMA*(n-1)+今日收盤價×2)/(n+1)
  24. mEMA=(mEMA*(slow-1)+todayCl*2)/(slow+1)#mEMA=(前一日mEMA*(m-1)+今日收盤價×2)/(m+1)
  25. DIF=nEMA-mEMA
  26. MACD=(MACD*(difnm-1)+DIF*2)/(difnm+1)
  27. Date <- as.character(index(data[w,]))
  28. all <- rbind(all,c(Date,MACD,DIF))#合併新資料到dataframe
  29. }
  30. all$Date <- as.Date(all$Date) #轉型態整理資料 以下可省略
  31. all$MACD <- round(as.numeric(all$MACD),2)
  32. all$DIF <- round(as.numeric(all$DIF),2)
  33. all$OSC <- all$DIF-all$MACD
  34. all <- as.xts(read.zoo(all))
  35.  
  36. }
  37.  
  38. macd <- Macd(data2,12,26,9)
  39.  
Success #stdin #stdout #stderr 0.39s 43796KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Loading required package: quantmod
Loading required package: xts
Loading required package: zoo

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric

Loading required package: TTR
Version 0.4-0 included new data defaults. See ?getSymbols.
Error in file(file, "rt") : cannot open the connection
Calls: read.csv -> read.table -> file
In addition: Warning message:
In file(file, "rt") :
  cannot open file 'data2.csv': No such file or directory
Execution halted