A Quantstrat to Build on Part 3

June 8, 2011

(This article was first published on Timely Portfolio, and kindly contributed to R-bloggers)

This just does the same thing as A Quantstrat to Build on Part 2, but I use sigCrossover and sigComparison instead of sigThreshold as my signal.  Maybe it will help some struggling to understand implementation of the different signal types.  For this system, sigThreshold works best, since sigComparison and sigCrossover require us to hack another function (ReturnNumbers) to add a column of 0 (or any number as an argument) for comparison.  To see the difference, run mktdata[1:200] after running each signal type.  Hope this helps.

R code:

#thanks so much to the developers of quantstrat
#99% of this code comes from the demos in the quantstrat package  
#in this I make changes to the signal and rule
#to illustrate how sigCrossover and sigComparison
#now let's define our silly countupdown function
CUD <- function(price,n) {
#CUD takes the n-period sum of 1 (up days) and -1 (down days)
temp<-runSum(ifelse(ROC(price,1,type="discrete") > 0,1,-1),n)
colnames(temp) <- "CUD"
ReturnNumbers <- function(price,n) {
#just return an xts with 0 for every period
#specify this for the rolling periods to use for our signal
num_periods=50   # Initialize a strategy object
stratCUD <- strategy("CUD")   # Add an indicator
stratCUD <- add.indicator(strategy = stratCUD, name = "CUD",
arguments = list(price = quote(Cl(mktdata)),n=num_periods),
stratCUD <- add.indicator(strategy = stratCUD, name = "ReturnNumbers",
arguments = list(price = quote(Cl(mktdata)),n=0),
# these are the same rules from the original sigThreshold
# I provide these as an illustration of sigCrossover and sigComparison
# sigComparison gives 1 (TRUE) or 0 (FALSE)
# sigCrossover gives 1(TRUE) or NA
# enter when CUD > 0
stratCUD <- add.signal(strategy = stratCUD, name="sigComparison",
arguments = list(columns=c("CUD","ReturnNumbers"),relationship="gte"),
# exit when CUD < 0
stratCUD <- add.signal(strategy = stratCUD, name="sigComparison",
arguments = list(columns=c("CUD","ReturnNumbers"),relationship="lt"),
label="CUD.lt.0")   stratCUD <- add.rule(strategy = stratCUD, name='ruleSignal',
arguments = list(sigcol="CUD.gte.0", sigval=TRUE, orderqty=1000,
ordertype='market', orderside='long', pricemethod='market', replace=FALSE),
type='enter', path.dep=TRUE)
stratCUD <- add.rule(strategy = stratCUD, name='ruleSignal',
arguments = list(sigcol="CUD.lt.0", sigval=TRUE, orderqty='all',
ordertype='market', orderside='long', pricemethod='market', replace=FALSE),
type='exit', path.dep=TRUE)       currency("USD")
symbols = c("GSPC","GDAXI")
for (symbol in symbols) {
stock(symbol, currency="USD",multiplier=1)
#use paste with ^ to get index data
}       initDate='1950-12-31'
port.st<-'CUD' #use a string here for easier changing of parameters and re-trying  
initPortf(port.st, symbols=symbols, initDate=initDate)
initAcct(port.st, portfolios=port.st, initDate=initDate)
initOrders(portfolio=port.st, initDate=initDate)   print("setup completed")  
# Process the indicators and generate trades
out<-try(applyStrategy(strategy=stratCUD , portfolios=port.st ) )
print("Strategy Loop:")
print(end_t-start_t)     start_t<-Sys.time()
print("trade blotter portfolio update:")
# hack for new quantmod graphics, remove later
themelist$col$dn.col<-'pink'   for(symbol in symbols){
#add the CUD indicator to the bottom of the chart
mktdata[1:200] #will show how mktdata is used in quantstrat

To leave a comment for the author, please follow the link and comment on their blog: Timely Portfolio.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...

If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Tags: , ,

Comments are closed.

Search R-bloggers


Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)