2017-06-29 2 views
3

J'ai utilisé le code suivant de la conférence de Guy Yollin. Le résultat que j'ai obtenu n'était pas correct. Le résultat est affiché sous le code.R - Quantstrat - le test de retour ne fonctionne pas

library(blotter) 
library(quantstrat) 

currency("USD") 
stock("SPY", currency = "USD", multiplier = 1) 

initDate = "1997-12-31" 
startDate = "1998-01-01" 
endDate = "2014-06-30" 
initEQ = 1e6 

Sys.setenv(TZ = "UTC") 

getSymbols('SPY', from = startDate, to = endDate, index.class = "POSIXct", adjust = T) 

SPY = to.monthly(SPY, indexAt = "endof", drop.time = FALSE) 
SPY$SMA10m <- SMA(Cl(SPY),10) 

qs.strategy <- "qsFaber" 

initPortf(qs.strategy, "SPY", initDate = initDate) 
initAcct(qs.strategy, portfolios = qs.strategy, initDate = initDate, initEq = initEQ) 
initOrders(portfolio = qs.strategy, initDate = initDate) 

strategy(qs.strategy, store = TRUE) 

strat <- getStrategy(qs.strategy) 

add.indicator(
    strategy = qs.strategy, 
    name = "SMA", 
    arguments = list(
    x = quote(Cl(mktdata)), 
    n = 10), 
    label = "SMA10" 
) 

add.signal(
    qs.strategy, 
    name = "sigCrossover", 
    arguments = list (
    columns = c("Close", "SMA10"), 
    relationship = "gt"), 
    label = "Cl.gt.SMA" 
) 

add.signal (
    qs.strategy, 
    name = "sigCrossover", 
    arguments = list(
    columns = c("Close", "SMA10"), 
    relationship = "lt"), 
    label = "Cl.lt.SMA" 
) 

add.rule(
    qs.strategy, 
    name = "ruleSignal", 
    arguments = list(
    sicol = "Cl.gt.SMA", 
    sigval = TRUE, 
    orderqty = 900, 
    ordertype = "market", 
    orderside = "long"), 
    type = "enter" 
) 

add.rule(
    qs.strategy, 
    name = "ruleSignal", 
    arguments = list(
    sicol = "Cl.lt.SMA", 
    sigval = TRUE, 
    orderqty = "all", 
    ordertype = "market", 
    orderside = "long"), 
    type = "exit" 
) 

applyStrategy(strategy = qs.strategy, portfolios = qs.strategy) 

getTxns(Portfolio = qs.strategy, "SPY") 

getTxns (portefeuille = qs.strategy, "SPY")

Txn.Qty Txn.Price Txn.Fees Txn.Value Txn.Avg.Cost Net.Txn. 1997-12-31 Realized.PL

0   0  0   0   0     0 

Je vous serais reconnaissant des évaluations ou des réponses! Merci d'avance!

+0

semble être le même problème :)) voir ici: 'x = quote (Cl (mktdata))'. il devrait être 'x = quote (Cl (SPY))' – AK88

+0

Je suis un idiot! J'ai écrit sicol au lieu de sigcol. C'est pourquoi l'erreur! – blackknight316

Répondre

1

Vérifiez comme 70. Il convient de lire sigcol not sicol.

+0

Haha, ça arrive. Vous avez deux occurrences de cela, btw. – AK88