【问题标题】:Variable lagging in R errorR错误中的变量滞后
【发布时间】:2015-10-29 20:58:30
【问题描述】:

我正在尝试延迟从雅虎市场下载的一些价格,但我不希望延迟被修复。我希望它取决于另一个 DF 或值,滞后期会发生变化。

这会提取和格式化数据:

library("quantmod")
library("PerformanceAnalytics")
library(dplyr)

nameOfStrategy <- "GSPC MACD"

#Specify dates for downloading data, training models and running simulation
trainingStartDate = as.Date("2000-01-01")
trainingEndDate = as.Date("2010-01-01")
outofSampleStartDate = as.Date("2010-01-02")


#Download the data
symbolData <- new.env() #Make a new environment for quantmod to store data in
getSymbols("^GSPC", env = symbolData, src = "yahoo", from = trainingStartDate)
trainingData <- window(symbolData$GSPC, start = trainingStartDate, end = trainingEndDate)
testData <- window(symbolData$GSPC, start = outofSampleStartDate)
indexReturns <- Delt(Cl(window(symbolData$GSPC, start =   outofSampleStartDate)))
colnames(indexReturns) <- "GSPC Buy&Hold"

这是我用来查找市场信号然后组织数据的代码:

signalB <- ifelse(MACD12$macd > MACD12$signal & lag.xts(MACD12$macd) < lag.xts(MACD12$signal),1,NA)
#If fastMA > slowMA on change go long
signalS <- ifelse(MACD12$macd < MACD12$signal & lag.xts(MACD12$macd) > lag.xts(MACD12$signal),-1,NA)

#Combines Buy and sell signals
Tsignal <- merge(signalB,signalS)

#Gets number of days---dont know when period starts but doesnt matter since we just want difference in days
Tsignal$dates =indexTZ(Tsignal)
Tsignal$dates =index(Tsignal)

#Combines Buy and Sell signal into overall signal
Tsignal$Signal <- ifelse(is.na(Tsignal$Buy),ifelse(is.na(Tsignal$Sell),NA,-1),1)
Tsignal$Tdate <- 0

#Gets 'Date' only if signal either buy or sell
Tsignal$Tdate <- ifelse(!is.na(Tsignal$Signal),Tsignal$dates,NA)

#Finds difference between the Sell sig and the last signal **** In this case it will work but future buying twice before
# selling will result in not getting returns of one of the purchases
Tsignal$lag <- ifelse(Tsignal$Signal == -1,diff(na.locf(Tsignal$Tdate)),NA)

Tsignal$lag <- ifelse(is.na(Tsignal$lag),0,Tsignal$lag)

问题来了:

lag(Cl(trainingData),Tsignal$lag))
#Warning message:
#In if (n == 0) return(x) :
#the condition has length > 1 and only the first element will be used

它返回所有价格,但在 0 期间滞后(即只返回价格)。虽然 Tsignal$lag 中有很多零,但也有大于 1 的值分布在各处。

我需要它在 Tsignal$lag = 0 的日期返回相同的价格,并返回滞后于 Tsignal$lag 指定的周期数的价格。

目前我正在使用 dplyr lag 功能,但我尝试了其他具有 lag 功能的软件包,我得到了同样的错误。写这篇我想我可能需要做一个“for”函数,但我不确定,我对 R 很陌生。

提前感谢您的帮助!

【问题讨论】:

  • 你能做一个可重现的例子吗?

标签: r dplyr lag quantmod


【解决方案1】:

dplyr 和 stats lag 函数都需要整数来表示滞后期的数量 (?dplyr::lag),但您的 Tsignal$lag 是一个向量。要保留在 xts 域中,一个建议是使用滞后值作为收盘价的直接索引偏移量,如

Cl(trainingData)[(1:nrow(trainingData))-coredata(Tsignal$lag),]

【讨论】:

    猜你喜欢
    • 2010-11-21
    • 2022-11-23
    • 1970-01-01
    • 2016-08-18
    • 2012-12-02
    • 2019-09-05
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多