【问题标题】:R Quant TradingR量化交易
【发布时间】:2015-05-01 03:18:45
【问题描述】:

我可以使用一些帮助来让我的代码正常工作。我正在尝试基于高于 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))

【问题讨论】:

  • 从帮助页面 (?MACD) 看来,MACD() 只接受单变量时间序列作为输入,而不是多变量..
  • 如何,我会强制数据使其工作吗?你可以很容易地绘制 MACD,所以应该有一些输出,我想
  • Stock$MACD &lt;- MACD(HLC(Stock)),我得到“colnames&lt;-(*tmp*, value = c("CAT.High.EMA.12", "CAT.Low.EMA.12", : 'dimnames' [2] 的长度不等于数组范围"

标签: r finance quantmod trading algorithmic-trading


【解决方案1】:

正如 Pascal 在上述评论中提到的,MACD 使用单变量对象。这个对象应该是收盘价(除非你想要别的东西),它是HLC(Stock) 中名为CAT.Close 的第三列。 Stock$stochOSC 不起作用,因为列名指定错误(CAT. 应在 High、Low 和 Close 之前添加)。最后,&amp; 应该将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))

你应该得到以下情节:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2019-05-15
    • 2023-02-21
    相关资源
    最近更新 更多