2017-07-18 35 views
0

我是一个新用户,尝试在quantstrat上进行回溯测试,当我运行以下代码时,显示底部的消息。任何人都可以帮我解决它吗?quantstrat中的问题:参数“价格”缺失,没有默认值

library(quantmod) 
initdate = "1999-01-01" 
from = "2003-01-01" 
to = "2015-06-30" 
remove(srs) 
symbols("spy") 
src = "yahoo" 
getSymbols("SPY", from = from, to = to, src = src, adjust = TRUE) 
plot(Cl(SPY)) 
getSymbols("GBP", from = from, to = to, src = src, adjust = TRUE) 
lines(SMA(Cl(SPY),n = 200, col = "red")) 
Sys.setenv(TZ = "UTC") 
library(quantstrat) 
currency("USD") 
library(quantmod) 
getSymbols("GDX", from = from, to = to, src = src, adjust = TRUE) 
stock("GDX", currency = "USD") 
stock("SPY", currency = "USD") 
tradesize <- 100000 
initeq <- 100000 
strategy.st <-"firststrat" 
portfolio.st <- "firststrat" 
account.st <- "firststrat" 
rm.strat(strategy.st) 
initPortf(portfolio.st, symbols = "SPY", initdate = initdate, currency = "USD") 
initAcct(account.st, portfolio = portfolio.st, initDate = initdate, currency = "USD",initEq = initeq) 
initOrders(portfolio.st, initDate = initdate) 
strategy(strategy.st, store = TRUE) 
spy_sma <- SMA(x=Cl(SPY), n = 200) 
spy_rsi <- RSI(price=Cl(SPY), n=3) 
plot(Cl(SPY)) 
lines(SMA(Cl(SPY), n=200, col = "red")) 
"trend" 
plot(Cl(SPY)) 
plot(RSI(Cl(SPY), n = 2)) 
"reversion" 
add.indicator(strategy = strategy.st, 
       name = "SMA", 
       arguments = list(x=quote(Cl(mktdata)), n = 200), 
       label = "SMA200") 
add.indicator(strategy = strategy.st, 
       name = "SMA", 
       arguments = list(x=quote(Cl(mktdata)), n = 50), 
       label = "SMA50") 
add.indicator(strategy = strategy.st, 
       name = "RSI", 
       arguments = list(x=quote(Cl(maktdata)), n = 3), 
       label = "RSI_3") 
RSI_avg <- function(price, n1, n2) { 
    rsi_1 <- RSI(price = price, n = 1) 
    rsi_2 <- RSI(price = price, n = 2) 
    RSI_avg <- (rsi_1/rsi_2)/2 
    colnames(RSI_avg) <- "RSI_avg" 
    return (RSI_avg) 
} 
add.indicator(strategy.st, name = "RSI_avg", arguments = list(price = quote(Cl(mktdata)), n1 = 3, n2 = 4), label = "RSI_3_4") 
DVO <-function(HLC, navg = 2, percentlookback = 126){ 
    ratio <- Cl(HLC/(Hi(HLC) + Lo(HLC))/2) 
    avgratio <- SMA(ratio, n = navg) 
    out <- runPercentRank(avgratio, n = percentlookback, exact.multiplier = 1)*100 
    colnames(out) <- "DVO" 
    return(out) 
} 
add.indicator(strategy.st, name = "DVO", arguments = list (HLC=quote(HLC(mktdata)),navg = 2, percentlookback = 126), label = "DVO_2_126") 
test <- applyIndicators(strategy = strategy.st, mktdata = OHLC(SPY)) 

显示以下消息在我的控制台

测试< - applyIndi​​cators(策略= strategy.st,mktdata = OHLC(SPY)) 错误try.xts(价格,误差=如.matrix): 参数 “价格” 缺失,没有默认设置

回答

2

RSI需要一个参数price,不x。另外要小心如何在DVO中构建比例。 RSI_3对于mktdata也有一个错字。目前还不清楚为什么您在此代码中请求“GBP”,也不清楚为什么symbols("spy")也被调用,但它们并不是您问题的一部分。

这些变化应该让你的代码工作:

library(quantmod) 
initdate = "1999-01-01" 
from = "2003-01-01" 
to = "2015-06-30" 
#remove(srs) 
#symbols("spy") 
src = "yahoo" 
getSymbols("SPY", from = from, to = to, src = src, adjust = TRUE) 
plot(Cl(SPY)) 
getSymbols("GBP", from = from, to = to, src = src, adjust = TRUE) 
lines(SMA(Cl(SPY),n = 200, col = "red")) 
Sys.setenv(TZ = "UTC") 
library(quantstrat) 
currency("USD") 
library(quantmod) 
getSymbols("GDX", from = from, to = to, src = src, adjust = TRUE) 
stock("GDX", currency = "USD") 
stock("SPY", currency = "USD") 
tradesize <- 100000 
initeq <- 100000 
strategy.st <-"firststrat" 
portfolio.st <- "firststrat" 
account.st <- "firststrat" 
rm.strat(strategy.st) 
initPortf(portfolio.st, symbols = "SPY", initdate = initdate, currency = "USD") 
initAcct(account.st, portfolio = portfolio.st, initDate = initdate, currency = "USD",initEq = initeq) 
initOrders(portfolio.st, initDate = initdate) 
strategy(strategy.st, store = TRUE) 
spy_sma <- SMA(x=Cl(SPY), n = 200) 
spy_rsi <- RSI(price=Cl(SPY), n=3) 
plot(Cl(SPY)) 
lines(SMA(Cl(SPY), n=200, col = "red")) 
"trend" 
plot(Cl(SPY)) 
plot(RSI(Cl(SPY), n = 2)) 
"reversion" 
add.indicator(strategy = strategy.st, 
       name = "SMA", 
       arguments = list(x=quote(Cl(mktdata)), n = 200), 
       label = "SMA200") 
add.indicator(strategy = strategy.st, 
       name = "SMA", 
       arguments = list(x=quote(Cl(mktdata)), n = 50), 
       label = "SMA50") 
add.indicator(strategy = strategy.st, 
       name = "RSI", 
       arguments = list(price=quote(Cl(mktdata)), n = 3), 
       label = "RSI_3") 
RSI_avg <- function(price, n1, n2) { 
    rsi_1 <- RSI(price = price, n = 1) 
    rsi_2 <- RSI(price = price, n = 2) 
    RSI_avg <- (rsi_1/rsi_2)/2 
    colnames(RSI_avg) <- "RSI_avg" 
    return (RSI_avg) 
} 
add.indicator(strategy.st, name = "RSI_avg", arguments = list(price = quote(Cl(mktdata)), n1 = 3, n2 = 4), label = "RSI_3_4") 
DVO <-function(HLC, navg = 2, percentlookback = 126){ 
    ratio <- Cl(HLC)/(Hi(HLC) + Lo(HLC))/2 
    avgratio <- SMA(ratio, n = navg) 
    out <- runPercentRank(avgratio, n = percentlookback, exact.multiplier = 1)*100 
    colnames(out) <- "DVO" 
    return(out) 
} 
add.indicator(strategy.st, name = "DVO", arguments = list (HLC=quote(HLC(mktdata)),navg = 2, percentlookback = 126), label = "DVO_2_126") 
test <- applyIndicators(strategy = strategy.st, mktdata = OHLC(SPY))