如何计算移动平均线并绘制数据?

How to calculate Moving Average and plot the data?

其实我想用一个R程序以Microsoft Corporation (NASDAQ: MSFT)为例计算收盘价的n天简单移动平均线(SMA)。使用 SMA,我可以使用如果 SMA(20) > SMA(50),我将购买 MSFT 股票的策略,否则,我将其卖出。看来我需要比较情节吗? 我发现我只能得到最新日期的 SMA:

library(quantmod)
# Get MSFT's data from its IPO date (March 13, 1986) till now.
msftData <- getSymbols("MCD",src = "yahoo", from = "1986-03-13", auto.assign = FALSE)

colnames(msftData)<-cbind("Open","High","Low","Close","Volume","Adjusted")
msftData<-as.data.frame(msftData)
attach(msftData)
fx<-function(n=1){
  cpt<-0
  for (i in 1:n){
    cpt<-cpt+(Close[length(Close)-i+1])
  }
  sma<-cpt/n
  return(sma)
}

其实我会尝试一个功能,但感觉它不起作用。

smafn<-function(n=1){
cx <- c(0, cumsum(ifelse(is.na(Close), 0, Close)))
cn <- c(0, cumsum(ifelse(is.na(Close), 0, 1)))
rx <- cx[(n+1):length(cx)] - cx[1:(length(cx) - n)]
rn <- cn[(n+1):length(cx)] - cn[1:(length(cx) - n)]
rsum <- rx / rn
return(rsum)
}

问题中的代码检索的是 MacDonald's 而不是 Microsoft。更改它并使用 chartSeries 和 addSMA(添加红色移动平均线)我们得到下面的图表。然后我们计算调整后收盘价的移动平均线。如果要使用关闭,请使用 Cl 而不是 Ad。 (quantmod 也有带下划线的 chart_Series,但请注意帮助文件说那是实验性的。)

library(quantmod)

getSymbols("MSFT", from = "1986-03-13")
chartSeries(MSFT)
addSMA(200)

ma <- SMA(Ad(MSFT), 200) # ma of adjusted close