[R-SIG-Finance] Passing two distributions to one parameter

Atakan Okan atakanokan at outlook.com
Sat May 28 15:14:08 CEST 2016


Hi r-sig-finance,
I was trying to implement a strategy where parabolic SAR (from TTR package) is used. However one of the parameters of SAR "accel" takes two values, one for "accelaration factor" and one for "maximum acceleration factor". I was unable to pass two sequences as one parameter and I was wondering if it is possible to do that to be able to optimize those parameters. 
Reproducible code: (The commented out add.distributions did not work.)

library(PerformanceAnalytics)library(quantstrat)                               no.cores <- 4                                     
.strategy <- new.env().blotter  <- new.env()                              
symbol.name = "AAPL"                                        tick.size = 0.01 currency("USD")stock(symbol.name, currency="USD", multiplier=1,tick_size= tick.size)
initialEquity = 1000                                           port.acct.currency <- "USD"strategy.keyword = "PSAR_D1"                                
longStopLossDistance <- 0;longTrailingStopDistance <- 0;longTakeProfitDistance <- 0shortStopLossDistance <- 0;shortTrailingStopDistance <- 0;shortTakeProfitDistance <- 0
symbol.data <- getSymbols(symbol.name)
strategy.st <- paste(symbol.name,strategy.keyword,sep = "_")rm.strat(strategy.st)                                                      
initDate = as.character(as.Date(index(symbol.data[1])-1))                    initPortf(strategy.st, symbol.name, initDate=initDate, currency = port.acct.currency)initAcct(strategy.st, portfolios=strategy.st, initDate=initDate,          initEq=initialEquity, currency = port.acct.currency)initOrders(portfolio=strategy.st,initDate=initDate)                          strategy(strategy.st,store=TRUE)summary(getStrategy(strategy.st))                                            
txn.model <- 0   
fixedSizeLong  =  100     fixedSizeShort =  -100     
paramset.label.name <- "PSAR_OPT"accel.factor <- seq(from=0.01, by=0.01, length.out = 3)max.accel.factor <- seq(from=0.1, by=0.05, length.out = 4)accels.df <- expand.grid(accel.factor,max.accel.factor)   

add.indicator(strategy.st,                                                                   name = "SAR",                                                                 arguments = list(HL=HLC(eval(parse(text = symbol.name)))                               ,accel=c(accel.factor,max.accel.factor)              ),                       label='sar')                                              

#apply.indicators.df <- applyIndicators(strategy.st, mktdata=eval(parse(text = symbol.name)))    

add.signal(strategy.st,name="sigCrossover",           arguments = list(columns=c("sar","Close"),relationship="gt"),           label="sar.gt.close") 
add.signal(strategy.st,name="sigCrossover",           arguments = list(columns=c("sar","Close"),relationship="lt"),           label="sar.lt.close")
#apply.signals.df <- applySignals(strategy.st, mktdata=apply.indicators.df)                     
add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="sar.gt.close",                          sigval=TRUE,                          prefer="Open",                           orderqty= fixedSizeLong,                           ordertype='market',                          orderside='long',                          orderset='ocolong',                          TxnFees = txn.model),         type='enter',         label='longenter',         enabled=TRUE)
# Long Exit Rule-------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="sar.lt.close",                          sigval=TRUE,                          prefer="Open",                           orderqty='all',                          ordertype='market',                          orderside='long',                          orderset='ocolong',                          TxnFees = txn.model),         type='exit',         label='longexit',         enabled=TRUE)


# Short Entry Rule--------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="sar.lt.close",                          sigval=TRUE,                          prefer="Open",                           orderqty= fixedSizeShort,                           ordertype='market',                          orderside='short',                          orderset='ocoshort',                          TxnFees = txn.model),         type='enter',         label='shortenter',         enabled=TRUE)
# Short Exit Rule---------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="sar.gt.close",                          sigval=TRUE,                          prefer="Open",                           orderqty='all',                          ordertype='market',                          orderside='short',                          orderset='ocoshort',                          TxnFees = txn.model),         type='exit',         label='shortexit',         enabled=TRUE)



#SAR Optimization-------------------------------------------------------------#add.distribution(strategy.st, #                paramset.label = paramset.label.name,  #               component.type = 'indicator',   #              component.label = 'sar',                          #             variable = list( accel = accels.df),             #            label = "sar.accels")


#add.distribution(strategy.st,#                 paramset.label = paramset.label.name,#                 component.type = 'indicator',#                 component.label = 'sar',                      #                 variable = list( accel[1] = accel.factor),        #                 label = "sar.accels.factor")

#add.distribution(strategy.st,#                 paramset.label = paramset.label.name,#                 component.type = 'indicator',#                 component.label = 'sar',                      #                 variable = list( accel[2] = max.accel.factor),        #                 label = "sar.accels.max")

#add.distribution(strategy.st,#                 paramset.label = paramset.label.name,#                 component.type = 'indicator',#                 component.label = 'sar',                      #                 variable = list( accel = accel.factor,max.accel.factor),        #                 label = "sar.accels.2")



summary(getStrategy(strategy.st))                                              
paramsetenv<-new.env()results <- apply.paramset(strategy.st,paramset.label=paramset.label.name,                          portfolio=strategy.st, account=strategy.st,nsamples=0,verbose = TRUE,                          audit=paramsetenv)
results.df <- data.frame(results$tradeStats)

------------------------------------------------------------------------------------------------------------------------------------------------
Atakan Okan 		 	   		  
	[[alternative HTML version deleted]]



More information about the R-SIG-Finance mailing list