I am so sorry, switched to Outlook.com, I always forget to put it into Plain Text mode.
Here is the code in plain-text format,(The commented out add.distributions did not work.)
▾ Quoted text (2 lines)
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.
#PSAR problem - passing two arguments to one parameter when creating distribution
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 <- 0
shortStopLossDistance <- 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")
#calismadi
#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")
#calismadi
#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")
#calismadi
#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")
#apply.paramset.df <- apply.paramset.signal.analysis(strategy.st = strategy.st, portfolio.st = strategy.st, paramset.label = paramset.label.name)
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)
#applyStrategy( strategy=strategy.st , portfolios=strategy.st
# ,verbose=TRUE)
#updatePortf(strategy.st)
#updateAcct(strategy.st)
#updateEndEq(strategy.st)
▾ Quoted text (14 lines)
From: josh.m.ulrich at gmail.com
Date: Sun, 29 May 2016 10:39:20 -0500
Subject: Re: [R-SIG-Finance] Passing two distributions to one parameter
To: atakanokan at outlook.com
CC: r-sig-finance at r-project.org
If you want people on this list to help you, you need to stop sending
HTML. Your message is unreadable and the code is not runable.
Configure your mail client to send only plain-text.
On Sat, May 28, 2016 at 8:14 AM, Atakan Okan wrote:
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.)