SCM

SCM Repository

[blotter] View of /pkg/quantstrat/demo/macd.R
ViewVC logotype

View of /pkg/quantstrat/demo/macd.R

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1724 - (download) (annotate)
Mon Dec 14 12:54:08 2015 UTC (3 years, 2 months ago) by bodanker
File size: 4703 byte(s)
Do not set initDate argument in demos

Do not set initDate for initPortf, initAcct, or initOrders in any of the
demos. Specifying the initDate argument incorrectly can cause errors
that are difficult for users to diagnose, so we shouldn't provide demos
that suggest users need to set initDate manually.

Rename initDate to startDate in all demos in order to avoid confusion
with initDate argument to initPortf, initAcct, and initOrders.
# Simple MACD strategy
#
# MACD may be used in many ways, this will demonstrate a trend indicator.
# 
# traditionally, when the MACD signal crosses zero, this indicated a establishment of a positive trend
#
# we'll buy on positive treshold crossover of the 'signal' column, and sell on negative threshold crossover
# 
# Author: brian
###############################################################################


require(quantstrat)
suppressWarnings(rm("order_book.macd",pos=.strategy))
suppressWarnings(rm("account.macd","portfolio.macd",pos=.blotter))
suppressWarnings(rm("account.st","portfolio.st","stock.str","stratMACD","startDate","initEq",'start_t','end_t'))

#correct for TZ issues if they crop up
oldtz<-Sys.getenv('TZ')
if(oldtz=='') {
        Sys.setenv(TZ="GMT")
}


stock.str='AAPL' # what are we trying it on

#MA parameters for MACD
fastMA = 12 
slowMA = 26 
signalMA = 9
maType="EMA"

currency('USD')
stock(stock.str,currency='USD',multiplier=1)

#or use fake data
#stock.str='sample_matrix' # what are we trying it on
#data(sample_matrix)                 # data included in package xts
#sample_matrix<-as.xts(sample_matrix)

startDate='2006-12-31'
initEq=1000000
portfolio.st='macd'
account.st='macd'

initPortf(portfolio.st,symbols=stock.str)
initAcct(account.st,portfolios=portfolio.st)
initOrders(portfolio=portfolio.st)

strat.st<-portfolio.st
# define the strategy
strategy(strat.st, store=TRUE)

#one indicator
add.indicator(strat.st, name = "MACD", 
      			  arguments = list(x=quote(Cl(mktdata)),
      			                   nFast=fastMA, 
      			                   nSlow=slowMA),
      			  label='_' 
)

#two signals
add.signal(strat.st,name="sigThreshold",
    		   arguments = list(column="signal._",
    				   			        relationship="gt",
    							          threshold=0,
    							          cross=TRUE),
    		   label="signal.gt.zero"
)
   
add.signal(strat.st,name="sigThreshold",
    		   arguments = list(column="signal._",
    				                relationship="lt",
    							          threshold=0,
    							          cross=TRUE),
    	     label="signal.lt.zero"
)

####
# add rules

# entry
add.rule(strat.st,name='ruleSignal', 
    		 arguments = list(sigcol="signal.gt.zero",
    				              sigval=TRUE, 
    						          orderqty=100, 
    						          ordertype='market', 
    						          orderside='long', 
    						          threshold=NULL),
    	               type='enter',
    		             label='enter',
    		             storefun=FALSE
)

#alternatives for risk stops:
# simple stoplimit order, with threshold multiplier
#add.rule(strat.st,name='ruleSignal', arguments = list(sigcol="signal.gt.zero",sigval=TRUE, orderqty='all', ordertype='stoplimit', orderside='long', threshold=-.05,tmult=TRUE, orderset='exit2'),type='chain', parent='enter', label='risk',storefun=FALSE)
# alternately, use a trailing order, also with a threshold multiplier
#add.rule(strat.st,name='ruleSignal', arguments = list(sigcol="signal.gt.zero",sigval=TRUE, orderqty='all', ordertype='stoptrailing', orderside='long', threshold=-1,tmult=FALSE, orderset='exit2'),	type='chain', parent='enter', label='trailingexit')

# exit
add.rule(strat.st,name='ruleSignal', 
    		 arguments = list(sigcol="signal.lt.zero",
    				              sigval=TRUE, 
    						          orderqty='all', 
    						          ordertype='market', 
    						          orderside='long', 
    						          threshold=NULL,
    						          orderset='exit2'),
         type='exit',
    		 label='exit'
)

#end rules
####

getSymbols(stock.str,from=startDate, to='2014-06-01')
start_t<-Sys.time()
out<-applyStrategy(strat.st , portfolios=portfolio.st,parameters=list(nFast=fastMA, nSlow=slowMA, nSig=signalMA,maType=maType),verbose=TRUE)
end_t<-Sys.time()
print(end_t-start_t)

start_t<-Sys.time()
updatePortf(Portfolio=portfolio.st,Dates=paste('::',as.Date(Sys.time()),sep=''))
end_t<-Sys.time()
print("trade blotter portfolio update:")
print(end_t-start_t)

chart.Posn(Portfolio=portfolio.st,Symbol=stock.str)
plot(add_MACD(fast=fastMA, slow=slowMA, signal=signalMA,maType="EMA"))

#look at the order book
obook<-getOrderBook('macd')

# set tz as it was before the demo
Sys.setenv(TZ=oldtz)

###############################################################################
# R (http://r-project.org/) Quantitative Strategy Model Framework
#
# Copyright (c) 2009-2012
# Peter Carl, Dirk Eddelbuettel, Brian G. Peterson, Jeffrey Ryan, and Joshua Ulrich 
#
# This library is distributed under the terms of the GNU Public License (GPL)
# for full details see the file COPYING
#
# $Id$
#
##############################################################################

R-Forge@R-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business University of Wisconsin - Madison Powered By FusionForge