【问题标题】:How to calculate several moving averages in R如何计算R中的几个移动平均线
【发布时间】:2018-07-09 13:57:15
【问题描述】:

我有 10 年的股票每日收盘价:BNS.TO。我想计算几个移动平均线。

如果 MA n = (P t-1 + P t-2 + P t-3 + … + P t-n) / n

其中 P = 收盘价 n = 要平均的周期数

我需要 n 是 3 到 200 之间的所有值。我应该怎么做?

如果需要,可以在此处下载数据:https://ca.finance.yahoo.com/quote/BNS.TO/history?p=BNS.TO

谢谢

【问题讨论】:

  • 欢迎来到 SO,始终建议在您的帖子中使用代码标签发布输入和预期输出示例,请这样做并让我们知道。
  • 这是一个带有 order=c(0,0,x) 的 arima 模型,其中 x 从 3:200 开始运行。例如sapply(3:200,function(x)arima(your_data,order=c(0,0,x))

标签: r finance moving-average


【解决方案1】:

您可以使用 TTR 包中的 SMA 功能。

library(TTR);
data(ttrc);

# Assume mydata is ttrc    
mydata = ttrc;

# SMA for 5 days - you can also loop thru to vary from 3 days to 200 days
n = paste("day",5,sep="")

# To assign to mydata use !!
mydata = mutate(mydata,!!n := SMA(Close,5) )

【讨论】:

    【解决方案2】:

    您可以在 R 中使用 pracma 包。您可以通过简单的 google 搜索访问这些页面。

    参考:https://www.rdocumentation.org/packages/pracma/versions/1.9.9/topics/movavg

    if (!require("pracma", character.only=T, quietly=T)) {
      install.packages("pracma")
      library("pracma", character.only=T)
    }
    
    MySeries<-1:300 #sample data
    df<-data.frame(lapply(3:200, function(x){movavg(MySeries,n=x,"s")}))
    names(df)<-paste0("MA",3:200)
    

    您可以在该包的 R 文档页面上阅读有关该功能的更多信息

    【讨论】:

      【解决方案3】:
      MA <- sample(30:70, 2500, T)
      
      library(zoo)
      rollingmeans <- lapply(3:200, function(x) {rollmean(MA, x)})
      

      这会生成一个宽度为 3 到 200 的滚动平均值的列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        • 1970-01-01
        • 2014-11-18
        相关资源
        最近更新 更多