2015-05-01 26 views
1

我可以使用一些幫助讓我的代碼正常工作。我試圖根據收盤價高於MACD,布林通道和慢速隨機指標創建一個簡單的位置信號。我在第17行以後出錯。我不確定這是否是因爲「股票」是一個xts對象。我還想在最後繪製輸出圖。謝謝!R Quant Trading

#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)) 
+2

從幫助頁面(?'MACD'),似乎'MACD()'只接受單變量時間系列作爲輸入,而不是多變量。 –

+0

如何強制數據使其工作?你可以很容易地繪製MACD,所以應該有一些輸出,我會認爲 – SJSU2013

+0

從'Stock $ MACD < - MACD(HLC(股票))',我得到「錯誤在colnames <-'(* * * * * ',value = c(「CAT.High.EMA.12」,「CAT.Low.EMA.12」,:'dimnames'[2]的長度不等於數組範圍「 –

回答

5

帕斯卡在他的上述評論中提及,MACD採用單變量對象。這個對象應該是收盤價格(除非你需要別的東西),這是HLC(Stock)中名爲CAT.Close的第三列。 Stock$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)) 

你應該得到下面的情節:

enter image description here