使用 ifelse 在 R 中创建 运行 计数

Using ifelse to create a running tally in R

我正在尝试在 R 中进行一些定量建模。我没有收到错误消息,但结果并不是我真正需要的。

我是新手,但这是我的完整代码示例。

`library(quantmod)
#Building the data frame and xts to show dividends, splits and technical indicators
getSymbols(c("AMZN"))
Playground <- data.frame(AMZN)
Playground$date <- as.Date(row.names(Playground))
Playground$wday <- as.POSIXlt(Playground$date)$wday #day of the week
Playground$yday <- as.POSIXlt(Playground$date)$mday #day of the month
Playground$mon <- as.POSIXlt(Playground$date)$mon #month of the year
Playground$RSI <- RSI(Playground$AMZN.Adjusted, n = 5, maType="EMA") #can add Moving Average Type with maType = 
Playground$MACD <- MACD(AMZN, nFast = 12, nSlow = 26, nSig = 9)
Playground$Div <- getDividends('AMZN', from = "2007-01-01", to = Sys.Date(), src = "google", auto.assign = FALSE)
Playground$Split <- getSplits('AMZN', from = "2007-01-01", to = Sys.Date(), src = "google", auto.assign = FALSE)
Playground$BuySignal <- ifelse(Playground$RSI < 30 & Playground$MACD < 0, "Buy", "Hold")

直到我开始使用一些逻辑条件得出决策点时,一切都很好。

Playground$boughts <- ifelse(Playground$BuySignal == "Buy", lag(Playground$boughts) + 1000, lag(Playground$boughts))

它会执行,但结果只会是 NA。我想这是因为你正试图将 NA 添加到一个数字中,但我不是 100% 确定。你如何告诉计算机我要你记录你买了多少?运行?

非常感谢您的帮助。

每当你想做一个 ifelse 时
if ... 做某事,否则保持不变:不要使用 ifelse

试试这个

ind <- which(Playground$BuySignal == "Buy")
Playground$boughts[ind] <- lag(Playground$boughts) + 1000

所以我们希望每次生成买入信号时都买入 1000 股?

您的问题源于 MACD 指标。它实际上生成两列,MACD 和信号。您必须决定要保留哪一个。

Playground$MACD <- MACD(AMZN, nFast = 12, nSlow = 26, nSig = 9)$signal

这应该可以解决手头的问题。

此外,请检查 ifelse 的参考资料。 return 的 class 值有时会很棘手,因此 Floo0 建议的方法更可取。

此外,我提倡使用 1 和 0 而不是买卖来显示您持有的天气。它使数学更容易。

我强烈建议阅读一些关于使用 PerformanceAnalytics 进行回测的初学者教程。他们让事情变得容易多了。

顺便说一句,您错过了代码中的这一行:

Playground$boughts<- 0

希望对您有所帮助。

编辑:而且我忘了提及显而易见的事情。丢弃 MACD 为 NA 的前几行 类似于:

游乐场<-游乐场[-c(1:26),]