【问题标题】:R apply function to a list of price dataR将函数应用于价格数据列表
【发布时间】:2016-05-22 23:11:45
【问题描述】:

在下面的代码中,我正在获取三个交易品种的数据,然后我想对这些数据应用一个简单的函数(这是一种交易策略)。理想情况下,我会对这些回报进行统计,例如 PerformanceAnalytics 的原生回报。

library("quantmod")
library("PerformanceAnalytics")
options(scipen=999)

PriceData <- new.env()
Symbols <- c("SPY", "QQQ", "IWM")
StartDt <- as.Date("2015-01-01")
suppressWarnings(getSymbols(Symbols, src="yahoo", env=PriceData, from=StartDt))

x <- list()
for (i in 1:length(Symbols)) {
 x[[i]] <- get(Symbols[i], pos=PriceData)
}

SYSTEM <- function(data){
 ret<- Delt(Cl(x[[i]]),Op(x[[i]]),type = 'arithmetic')

 mavga <- SMA(Cl(x[[i]]), n=10)
 mavgb <- SMA(Cl(x[[i]]), n=20)

 sig <- ifelse(mavga>mavgb,1,0)+ifelse(mavgb>mavga,-1,0)
 sig <- lag(sig,1)
 sig[is.na(sig)]=0
 strategyreturn <- sig * ret
 return(strategyreturn)
}


######I'm doing something wrong here######
y <- lappy(x,SYSTEM)
z <- do.call("cbind", y)


PerformanceTable <- function(returns){
 scalar <- 252
 CS <- t(Return.cumulative(returns, geometric = FALSE))
 SR <- t(SharpeRatio.annualized(returns, scale=scalar, geometric = FALSE))
 SOR <- t(SortinoRatio(returns))
 MDD <- t(maxDrawdown(returns))
 WP <- colSums(returns > 0)/colSums(returns != 0)
 WP <- as.data.frame(WP)
 ASD = t(sd.annualized(returns, scale=scalar))
 Stat <- cbind(CS,SR,SOR,MDD,ASD,WP)

 colnames(Stat) <- c("Profit","SharpeRatio", "Sortino","MaxDrawdown",      "AnnStdDev", "WinPct")
 print("Performance Table")
 print(Stat)
 return (Stat)
}

Perf <- PerformanceTable(y)

【问题讨论】:

    标签: r trading performanceanalytics


    【解决方案1】:

    您就快到了,只需在您的函数中将 x[[i]] 替换为 data

    SYSTEM <- function(data){
      ret<- Delt(Cl(data),Op(data),type = 'arithmetic')
    
      mavga <- SMA(Cl(data), n=10)
      mavgb <- SMA(Cl(data), n=20)
    
      sig <- ifelse(mavga>mavgb,1,0)+ifelse(mavgb>mavga,-1,0)
      sig <- lag(sig,1)
      sig[is.na(sig)]=0
      strategyreturn <- sig * ret
      return(strategyreturn)
    }
    

    并将l 添加到lappy()

    y <- lapply(x,SYSTEM)
    z <- do.call("cbind", y)
    

    【讨论】:

    • 非常感谢!现在完全符合预期。
    猜你喜欢
    • 2014-03-17
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多