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]]
_______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-finance
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should
go.