Skip to content

Instantly share code, notes, and snippets.

@josephdunn
Created February 26, 2012 23:12
Show Gist options
  • Save josephdunn/1919562 to your computer and use it in GitHub Desktop.
Save josephdunn/1919562 to your computer and use it in GitHub Desktop.
require(quantstrat)
rm(list=ls())
try(rm(list=ls(pos=.blotter), pos=.blotter), silent=TRUE)
try(rm(list=ls(pos=.strategy), pos=.strategy), silent=TRUE)
try(rm(list=ls(pos=.instrument), pos=.instrument), silent=TRUE)
# settings
s <- 'SPY'
initEq <- 100000
initDate <- '2010-01-01'
fastMA <- 50
slowMA <- 100
# rocema indicator
ROCEMA <- function(x, nEMA=20, nROC=10) {
return (ROC(EMA(x, nEMA), nROC))
}
# set currency
currency('USD')
# set instrument
stock(s, currency='USD', multiplier=1)
# get data
assign(s, adjustOHLC(getSymbols(s, from=initDate, auto.assign=F), use.Adjusted=TRUE))
# init portfolio and orders
initPortf(s, symbols=s, initDate=initDate)
initOrders(portfolio=s, initDate=initDate)
# set position limits
addPosLimit(portfolio=s, timestamp=initDate, symbol=s, maxpos=100)
# set up account
initAcct(s, portfolios=s, initDate=initDate, initEq=initEq)
# set up strategy
strat <- strategy(s)
# add indicators
# rocema
strat <- add.indicator(strategy=strat, name='ROCEMA', arguments=list(x=quote(Cl(mktdata))), label='rocema')
# fast ma
strat <- add.indicator(strategy=strat, name='SMA', arguments=list(x=quote(Cl(mktdata)), n=fastMA), label='fastma')
# slow ma
strat <- add.indicator(strategy=strat, name='SMA', arguments=list(x=quote(Cl(mktdata)), n=slowMA), label='slowma')
# add signals to strategy
# long
strat <- add.signal(strategy=strat, name='sigFormula', arguments=list(formula='(rocema > 0) & (fastma > slowma)'), label='long')
# short
strat <- add.signal(strategy=strat, name='sigFormula', arguments=list(formula='(rocema < 0) & (fastma < slowma)'), label='short')
# add rules
# long
strat <- add.rule(strategy=strat, name='ruleSignal', arguments=list(sigcol='long', sigval=TRUE, symbol=s, orderqty=100, ordertype='market', orderside='long', pricemethod='market', replace=FALSE, osFUN=osMaxPos), type='enter', path.dep=TRUE) # entry
strat <- add.rule(strategy=strat, name='ruleSignal', arguments=list(sigcol='long', sigval=FALSE, symbol=s, orderqty='all', ordertype='market', orderside='long', pricemethod='market', replace=FALSE), type='exit', path.dep=TRUE) # exit
# short
strat <- add.rule(strategy=strat, name='ruleSignal', arguments=list(sigcol='short', sigval=TRUE, symbol=s, orderqty=-100, ordertype='market', orderside='short', pricemethod='market', replace=FALSE, osFUN=osMaxPos), type='enter', path.dep=TRUE) # entry
strat <- add.rule(strategy=strat, name='ruleSignal', arguments=list(sigcol='short', sigval=FALSE, symbol=s, orderqty='all', ordertype='market', orderside='short', pricemethod='market', replace=FALSE), type='exit', path.dep=TRUE) # exit
# generate trades
out <- try(applyStrategy(strategy=strat, portfolios=s))
# example info
txns <- getTxns(Portfolio=s, Symbol=s)
cat('Net profit:', sum(txns$Net.Txn.Realized.PL), '\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment