1

我可以使用一些帮助让我的代码正常工作。我正在尝试基于高于 MACD、布林带和慢速随机指标的收盘价创建一个简单的头寸信号。我从第 17 行开始出现错误。我不确定这是否是因为“Stock”是一个 xts 对象。我也想在最后绘制输出图。谢谢!

#install.packages("quantmod")
library("quantmod")
#install.packages("FinancialInstrument")
library("FinancialInstrument")
#install.packages("PerformanceAnalytics")
library("PerformanceAnalytics")
#install.packages("TTR")
library("TTR")

#######################################

Stock <- get(getSymbols('CAT'))["2014::"]

# add the indicators
Stock$BBands <- BBands(HLC(Stock))
Stock$MACD <- MACD(HLC(Stock))
Stock$stochOSC <- stoch(Stock[,c("High","Low","Close")])
Stock$position <- ifelse(Cl(Stock) > Stock$BBands > Stock$MACD > Stock   $stockOSC , 1 , -1)

Gains <- lag(Stock$position) * dailyReturn(Stock)
charts.PerformanceSummary(cbind(dailyReturn(Stock),Gains))
4

1 回答 1

5

正如 Pascal 在上述评论中提到的,MACD使用单变量对象。这个对象应该是收盘价(除非你想要别的东西),它是HLC(Stock)named中的第三列CAT.CloseStock$stochOSC不起作用,因为列名指定错误(CAT. 应在高、低和收盘之前添加)。最后,&应该分隔多个条件ifelse(注意问题中的错字Stock$stochOSC(ck 而不是 ch))。

这是代码:

#install.packages("quantmod")
library("quantmod")
#install.packages("FinancialInstrument")
library("FinancialInstrument")
#install.packages("PerformanceAnalytics")
library("PerformanceAnalytics")
#install.packages("TTR")
library("TTR")

#######################################

Stock <- get(getSymbols('CAT'))["2014::"]

# add the indicators
Stock$BBands <- BBands(HLC(Stock))
Stock$MACD <- MACD(HLC(Stock)[,3])
Stock$stochOSC <- stoch(Stock[,c("CAT.High","CAT.Low","CAT.Close")])
Stock$position <- ifelse(Cl(Stock)>Stock$BBands & Stock$BBands >Stock$MACD & Stock$MACD > Stock$stochOSC , 1 , -1)

Gains <- lag(Stock$position) * dailyReturn(Stock)
charts.PerformanceSummary(cbind(dailyReturn(Stock),Gains))

你应该得到以下情节:

在此处输入图像描述

于 2015-05-03T02:40:30.387 回答