R量化交易
R Quant Trading
我需要一些帮助才能让我的代码正常工作。我正在尝试根据高于 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))
正如 Pascal 在他上面的评论中提到的,MACD
使用单变量对象。该对象应该是收盘价(除非您想要其他东西),它是名为 CAT.Close
的 HLC(Stock)
中的第三列。 Stock$stochOSC
不起作用,因为列名指定错误(CAT. 应添加在 High、Low 和 Close 之前)。最后,&
应该分隔 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))
你应该得到以下情节:
我需要一些帮助才能让我的代码正常工作。我正在尝试根据高于 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))
正如 Pascal 在他上面的评论中提到的,MACD
使用单变量对象。该对象应该是收盘价(除非您想要其他东西),它是名为 CAT.Close
的 HLC(Stock)
中的第三列。 Stock$stochOSC
不起作用,因为列名指定错误(CAT. 应添加在 High、Low 和 Close 之前)。最后,&
应该分隔 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))
你应该得到以下情节: