Skip to content

Custom Txnfee function in apply.paramset vs applyStrategy

6 messages · Joshua Ulrich, Atakan Okan

#
Hi,
I have been experimenting with different custom transaction fee models for different assets and I realized that apply.paramset and applyStrategy yields different results when a custom transaction fee function is used. 
The reproducible example is below, and even though apply.paramset yields a NetPnL result of 21779 with the custom transaction fee model, applyStrategy yields 21509, which makes me believe that apply.paramset somehow is not incorporating the fees. The comparison of NetPnL results were made with the parameter combination of FastSMA=5, SlowSMA=50 and Stoploss=0.005.
Any help is appreciated, thanks.
Atakan Okan
Code:
library(lattice);library(foreach);library(doSNOW);library(ggplot2)library(gridExtra);library(reshape);library(beepr);library(quantstrat) library(doSNOW)Sys.setenv(TZ="UTC")                                                                                 .strategy<- new.env();.blotter<- new.env()                                                                                                                             
currency('USD')                                                                                                                                                                      stock("AAPL", currency="USD", multiplier=1,tick_size= 0.01)
getSymbols('AAPL',src = 'yahoo', from="2014-01-01", to="2015-05-31")AAPL <- adjustOHLC(AAPL)
strategy.st <- paste("AAPL","MACD_D1",sep = "_")rm.strat(strategy.st) 
initialEquity = 100000                                                                               initDate = "2013-12-30" initPortf(strategy.st, "AAPL", initDate=initDate, currency = "USD")initAcct(strategy.st, portfolios=strategy.st, initDate=initDate, initEq=initialEquity, currency = "USD")initOrders(portfolio=strategy.st,initDate=initDate) strategy(strategy.st,store=TRUE)
customFees <- function (TxnQty, ...) {  return(abs(TxnQty) * -0.01)}txn.model <- "customFees"    
positionSizeLong  =  1000     positionSizeShort =  -1000     

paramset.label.name <- "SMA_OPT"FastSMARange <- seq(5,21,by=8)SlowSMARange <- seq(10,50,by=20)StopLossDistanceRange <- seq(0.0025,0.005,by=0.0025)                               

add.indicator(strategy.st,                                                             name = "SMA",                                                             arguments = list(x=Cl(eval(parse(text = "AAPL")))                               ,n=5   #fastsma of best combination by NetPnL              ),                                                                          label='fastsma')                                           
add.indicator(strategy.st,                                                               name = "SMA",                                                              arguments = list(x=Cl(eval(parse(text = "AAPL")))                               ,n=50    #slowsma of best combination by NetPnL              ),                                                                         label='slowsma')                                             
add.signal(strategy.st,           name="sigCrossover",           arguments = list(columns=c("fastsma","slowsma"),relationship="gt"),           label="fastsma.gt.slowsma")                                                        
add.signal(strategy.st,           name="sigCrossover",           arguments = list(columns=c("fastsma","slowsma"),relationship="lt"),           label="fastsma.lt.slowsma")
add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.gt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty= positionSizeLong,                           #osFUN="osAllInLong",                            ordertype='market',                          orderside='long',                          orderset='ocolong',                          TxnFees = txn.model),         type='enter',         label='longenter',         enabled=FALSE         #timespan = xxxx,         #store=TRUE         #storefun=FALSE )
# Long Exit Rule-------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.lt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty='all',                          ordertype='market',                          orderside='long',                          orderset='ocolong',                          TxnFees = txn.model),         type='exit',         label='longexit',         enabled=FALSE         #timespan = xxxx,         #store=TRUE)
# Long StopLoss Rule---------------------------------------------------------------------------add.rule(strategy.st,name='ruleSignal',         arguments = list( sigcol="fastsma.lt.slowsma", sigval=TRUE,                           replace=FALSE,                           orderside='long',                           ordertype='stoplimit',                           tmult=TRUE,                           threshold=quote( longStopLossDistance ),                           orderqty='all',                           orderset='ocolong',                           TxnFees = txn.model),         type='chain', parent="longenter",         label='StopLossLong',         enabled=FALSE)
# Short Entry Rule--------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.lt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty=positionSizeShort,                           #osFUN="osAllInShort",                            ordertype='market',                          orderside='short',                          orderset='ocoshort',                          TxnFees = txn.model),         type='enter',         label='shortenter',         enabled=FALSE         #timespan = xxxx,         #store=TRUE         #storefun=FALSE )
# Short Exit Rule---------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.gt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty='all',                          ordertype='market',                          orderside='short',                          orderset='ocoshort',                          TxnFees = txn.model),         type='exit',         label='shortexit',         enabled=FALSE         #timespan = xxxx,         #store=TRUE)
# Short Stop Loss Rule-----------------------------------------------------------------add.rule(strategy.st,name='ruleSignal',         arguments = list( sigcol="fastsma.gt.slowsma", sigval=TRUE,                           replace=FALSE,                           orderside='short',                           ordertype='stoplimit',                           tmult=TRUE,                           threshold=quote( shortStopLossDistance ),                           orderqty='all',                           orderset='ocoshort',                           TxnFees = txn.model),         type='chain', parent="shortenter",         label='StopLossShort',         enabled=FALSE)

#Indicator Optimization-------------------------------------------------------------add.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = 'indicator',                 component.label = "fastsma",                 variable = list( n = FastSMARange ),                                label = "FastSMARANGE")

add.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = 'indicator',                 component.label = "slowsma",                 variable = list( n = SlowSMARange ),                 label = "SlowSMARANGE")
add.distribution.constraint(strategy.st,                            paramset.label = 'SMA_OPT',                            distribution.label.1 = 'FastSMARANGE',                            distribution.label.2 = 'SlowSMARANGE',                            operator = '<',                            label = 'FastSMA<SlowSMA')

#SL/Trail-SL/TP Optimization-----------------------------------------------------------------
#Long Stoploss Optimizationadd.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = "chain",                 component.label = "StopLossLong",                 variable = list( threshold = StopLossDistanceRange ),                 label = "StopLossLONG")
#Short Stoploss Optimizationadd.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = "chain",                 component.label = "StopLossShort",                 variable = list( threshold = StopLossDistanceRange ),                 label = "StopLossSHORT")
#Long&Short Stoploss Distance Constraintadd.distribution.constraint(strategy.st,                            paramset.label = paramset.label.name,                            distribution.label.1 = "StopLossLONG",                            distribution.label.2 = "StopLossSHORT",                            operator = "==",                            label = "StoplossEquality")

enable.rule(strategy.st,type="enter",label="longenter", enable = TRUE) enable.rule(strategy.st,type="exit",label="longexit", enable = TRUE)enable.rule(strategy.st,type="enter",label="shortenter", enable = TRUE) enable.rule(strategy.st,type="exit",label="shortexit", enable = TRUE)enable.rule(strategy.st,type="chain",label="StopLossLong", enable = TRUE)enable.rule(strategy.st,type="chain",label="StopLossShort", enable = TRUE) summary(getStrategy(strategy.st))                                              

#First run apply.paramset()paramsetenv<-new.env()cl <- snow::makeCluster(4, type = "SOCK")registerDoSNOW(cl)results <- apply.paramset(strategy.st,paramset.label=paramset.label.name,                          portfolio=strategy.st, account=strategy.st,nsamples=0,verbose = TRUE,                          audit=paramsetenv)snow::stopCluster(cl)results.df <- data.frame(results$tradeStats)

#Second run applyStrategy()longStopLossDistance <- 0.005                  #SL of best combination by NetPnLshortStopLossDistance <- 0.005                  #SL of best combination by NetPnL
applyStrategy( strategy=strategy.st , portfolios=strategy.st  ,verbose=TRUE)updatePortf(strategy.st)updateAcct(strategy.st)updateEndEq(strategy.st)
results.df.2 <- data.frame(tradeStats(strategy.st))
#Check NetPnL resulting from apply.paramset vs applyStrategyresults.df$Net.Trading.PL[12]  == results.df.2$Net.Trading.PL
#
So the code seems a bit odd, the indentation must have somehow caused some problems when emailing.
This a better and a little bit more compact one:
library(lattice);library(foreach);library(doSNOW);library(ggplot2)library(gridExtra);library(reshape);library(beepr);library(quantstrat) library(doSNOW)Sys.setenv(TZ="UTC")                                                                                 .strategy<- new.env();.blotter<- new.env()                                                                                                                             
currency('USD')                                                                                                                                                                      stock("AAPL", currency="USD", multiplier=1,tick_size= 0.01)
getSymbols('AAPL',src = 'yahoo', from="2014-01-01", to="2015-05-31")AAPL <- adjustOHLC(AAPL)
strategy.st <- paste("AAPL","MACD_D1",sep = "_")rm.strat(strategy.st) 
initialEquity = 100000                                                                               initDate = "2013-12-30" initPortf(strategy.st, "AAPL", initDate=initDate, currency = "USD")initAcct(strategy.st, portfolios=strategy.st, initDate=initDate, initEq=initialEquity, currency = "USD")initOrders(portfolio=strategy.st,initDate=initDate) strategy(strategy.st,store=TRUE)
customFees <- function (TxnQty, ...) {  return(abs(TxnQty) * -0.01)}txn.model <- "customFees"    
positionSizeLong  =  1000     positionSizeShort =  -1000     

paramset.label.name <- "SMA_OPT"FastSMARange <- seq(5,21,by=8)SlowSMARange <- seq(10,50,by=20)StopLossDistanceRange <- seq(0.0025,0.005,by=0.0025)                               

add.indicator(strategy.st,                                                             name = "SMA",                                                             arguments = list(x=Cl(eval(parse(text = "AAPL")))                               ,n=5   #fastsma of best combination by NetPnL              ),                                                                          label='fastsma')                                           
add.indicator(strategy.st,                                                               name = "SMA",                                                              arguments = list(x=Cl(eval(parse(text = "AAPL")))                               ,n=50    #slowsma of best combination by NetPnL              ),                                                                         label='slowsma')                                             
add.signal(strategy.st,           name="sigCrossover",           arguments = list(columns=c("fastsma","slowsma"),relationship="gt"),           label="fastsma.gt.slowsma")                                                        
add.signal(strategy.st,           name="sigCrossover",           arguments = list(columns=c("fastsma","slowsma"),relationship="lt"),           label="fastsma.lt.slowsma")
add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.gt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty= positionSizeLong,                           #osFUN="osAllInLong",                            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="fastsma.lt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty='all',                          ordertype='market',                          orderside='long',                          orderset='ocolong',                          TxnFees = txn.model),         type='exit',         label='longexit',         enabled=TRUE)
# Long StopLoss Rule---------------------------------------------------------------------------add.rule(strategy.st,name='ruleSignal',         arguments = list( sigcol="fastsma.lt.slowsma", sigval=TRUE,                           replace=FALSE,                           orderside='long',                           ordertype='stoplimit',                           tmult=TRUE,                           threshold=quote( longStopLossDistance ),                           orderqty='all',                           orderset='ocolong',                           TxnFees = txn.model),         type='chain', parent="longenter",         label='StopLossLong',         enabled=TRUE)
# Short Entry Rule--------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.lt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty=positionSizeShort,                           #osFUN="osAllInShort",                            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="fastsma.gt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty='all',                          ordertype='market',                          orderside='short',                          orderset='ocoshort',                          TxnFees = txn.model),         type='exit',         label='shortexit',         enabled=TRUE)
# Short Stop Loss Rule-----------------------------------------------------------------add.rule(strategy.st,name='ruleSignal',         arguments = list( sigcol="fastsma.gt.slowsma", sigval=TRUE,                           replace=FALSE,                           orderside='short',                           ordertype='stoplimit',                           tmult=TRUE,                           threshold=quote( shortStopLossDistance ),                           orderqty='all',                           orderset='ocoshort',                           TxnFees = txn.model),         type='chain', parent="shortenter",         label='StopLossShort',         enabled=TRUE)

#Indicator Optimization-------------------------------------------------------------add.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = 'indicator',                 component.label = "fastsma",                 variable = list( n = FastSMARange ),                                label = "FastSMARANGE")

add.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = 'indicator',                 component.label = "slowsma",                 variable = list( n = SlowSMARange ),                 label = "SlowSMARANGE")
add.distribution.constraint(strategy.st,                            paramset.label = 'SMA_OPT',                            distribution.label.1 = 'FastSMARANGE',                            distribution.label.2 = 'SlowSMARANGE',                            operator = '<',                            label = 'FastSMA<SlowSMA')

#SL/Trail-SL/TP Optimization-----------------------------------------------------------------
#Long Stoploss Optimizationadd.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = "chain",                 component.label = "StopLossLong",                 variable = list( threshold = StopLossDistanceRange ),                 label = "StopLossLONG")
#Short Stoploss Optimizationadd.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = "chain",                 component.label = "StopLossShort",                 variable = list( threshold = StopLossDistanceRange ),                 label = "StopLossSHORT")
#Long&Short Stoploss Distance Constraintadd.distribution.constraint(strategy.st,                            paramset.label = paramset.label.name,                            distribution.label.1 = "StopLossLONG",                            distribution.label.2 = "StopLossSHORT",                            operator = "==",                            label = "StoplossEquality")
summary(getStrategy(strategy.st))                                              

#First run apply.paramset()paramsetenv<-new.env()cl <- snow::makeCluster(4, type = "SOCK")registerDoSNOW(cl)results <- apply.paramset(strategy.st,paramset.label=paramset.label.name,                          portfolio=strategy.st, account=strategy.st,nsamples=0,verbose = TRUE,                          audit=paramsetenv)snow::stopCluster(cl)results.df <- data.frame(results$tradeStats)

#Second run applyStrategy()longStopLossDistance <- 0.005   #SL of best combination by NetPnLshortStopLossDistance <- 0.005  #SL of best combination by NetPnL
applyStrategy( strategy=strategy.st , portfolios=strategy.st               #,parameters=list(n = 5)               ,verbose=TRUE)updatePortf(strategy.st)updateAcct(strategy.st)updateEndEq(strategy.st)
results.df.2 <- data.frame(tradeStats(strategy.st))
#Check NetPnL apply.paramset vs applyStrategyresults.df$Net.Trading.PL[12]  == results.df.2$Net.Trading.PL
From: atakanokan at outlook.com
To: r-sig-finance at r-project.org
Subject: Custom Txnfee function in apply.paramset vs applyStrategy
Date: Sun, 24 Apr 2016 21:36:33 +0300




Hi,
I have been experimenting with different custom transaction fee models for different assets and I realized that apply.paramset and applyStrategy yields different results when a custom transaction fee function is used. 
The reproducible example is below, and even though apply.paramset yields a NetPnL result of 21779 with the custom transaction fee model, applyStrategy yields 21509, which makes me believe that apply.paramset somehow is not incorporating the fees. The comparison of NetPnL results were made with the parameter combination of FastSMA=5, SlowSMA=50 and Stoploss=0.005.
Any help is appreciated, thanks.
Atakan Okan
Code:
library(lattice);library(foreach);library(doSNOW);library(ggplot2)library(gridExtra);library(reshape);library(beepr);library(quantstrat) library(doSNOW)Sys.setenv(TZ="UTC")                                                                                 .strategy<- new.env();.blotter<- new.env()                                                                                                                             
currency('USD')                                                                                                                                                                      stock("AAPL", currency="USD", multiplier=1,tick_size= 0.01)
getSymbols('AAPL',src = 'yahoo', from="2014-01-01", to="2015-05-31")AAPL <- adjustOHLC(AAPL)
strategy.st <- paste("AAPL","MACD_D1",sep = "_")rm.strat(strategy.st) 
initialEquity = 100000                                                                               initDate = "2013-12-30" initPortf(strategy.st, "AAPL", initDate=initDate, currency = "USD")initAcct(strategy.st, portfolios=strategy.st, initDate=initDate, initEq=initialEquity, currency = "USD")initOrders(portfolio=strategy.st,initDate=initDate) strategy(strategy.st,store=TRUE)
customFees <- function (TxnQty, ...) {  return(abs(TxnQty) * -0.01)}txn.model <- "customFees"    
positionSizeLong  =  1000     positionSizeShort =  -1000     

paramset.label.name <- "SMA_OPT"FastSMARange <- seq(5,21,by=8)SlowSMARange <- seq(10,50,by=20)StopLossDistanceRange <- seq(0.0025,0.005,by=0.0025)                               

add.indicator(strategy.st,                                                             name = "SMA",                                                             arguments = list(x=Cl(eval(parse(text = "AAPL")))                               ,n=5   #fastsma of best combination by NetPnL              ),                                                                          label='fastsma')                                           
add.indicator(strategy.st,                                                               name = "SMA",                                                              arguments = list(x=Cl(eval(parse(text = "AAPL")))                               ,n=50    #slowsma of best combination by NetPnL              ),                                                                         label='slowsma')                                             
add.signal(strategy.st,           name="sigCrossover",           arguments = list(columns=c("fastsma","slowsma"),relationship="gt"),           label="fastsma.gt.slowsma")                                                        
add.signal(strategy.st,           name="sigCrossover",           arguments = list(columns=c("fastsma","slowsma"),relationship="lt"),           label="fastsma.lt.slowsma")
add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.gt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty= positionSizeLong,                           #osFUN="osAllInLong",                            ordertype='market',                          orderside='long',                          orderset='ocolong',                          TxnFees = txn.model),         type='enter',         label='longenter',         enabled=FALSE         #timespan = xxxx,         #store=TRUE         #storefun=FALSE )
# Long Exit Rule-------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.lt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty='all',                          ordertype='market',                          orderside='long',                          orderset='ocolong',                          TxnFees = txn.model),         type='exit',         label='longexit',         enabled=FALSE         #timespan = xxxx,         #store=TRUE)
# Long StopLoss Rule---------------------------------------------------------------------------add.rule(strategy.st,name='ruleSignal',         arguments = list( sigcol="fastsma.lt.slowsma", sigval=TRUE,                           replace=FALSE,                           orderside='long',                           ordertype='stoplimit',                           tmult=TRUE,                           threshold=quote( longStopLossDistance ),                           orderqty='all',                           orderset='ocolong',                           TxnFees = txn.model),         type='chain', parent="longenter",         label='StopLossLong',         enabled=FALSE)
# Short Entry Rule--------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.lt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty=positionSizeShort,                           #osFUN="osAllInShort",                            ordertype='market',                          orderside='short',                          orderset='ocoshort',                          TxnFees = txn.model),         type='enter',         label='shortenter',         enabled=FALSE         #timespan = xxxx,         #store=TRUE         #storefun=FALSE )
# Short Exit Rule---------------------------------------------------------------------add.rule(strategy.st,         name='ruleSignal',         arguments = list(sigcol="fastsma.gt.slowsma",                          sigval=TRUE,                          prefer="Open",                           orderqty='all',                          ordertype='market',                          orderside='short',                          orderset='ocoshort',                          TxnFees = txn.model),         type='exit',         label='shortexit',         enabled=FALSE         #timespan = xxxx,         #store=TRUE)
# Short Stop Loss Rule-----------------------------------------------------------------add.rule(strategy.st,name='ruleSignal',         arguments = list( sigcol="fastsma.gt.slowsma", sigval=TRUE,                           replace=FALSE,                           orderside='short',                           ordertype='stoplimit',                           tmult=TRUE,                           threshold=quote( shortStopLossDistance ),                           orderqty='all',                           orderset='ocoshort',                           TxnFees = txn.model),         type='chain', parent="shortenter",         label='StopLossShort',         enabled=FALSE)

#Indicator Optimization-------------------------------------------------------------add.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = 'indicator',                 component.label = "fastsma",                 variable = list( n = FastSMARange ),                                label = "FastSMARANGE")

add.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = 'indicator',                 component.label = "slowsma",                 variable = list( n = SlowSMARange ),                 label = "SlowSMARANGE")
add.distribution.constraint(strategy.st,                            paramset.label = 'SMA_OPT',                            distribution.label.1 = 'FastSMARANGE',                            distribution.label.2 = 'SlowSMARANGE',                            operator = '<',                            label = 'FastSMA<SlowSMA')

#SL/Trail-SL/TP Optimization-----------------------------------------------------------------
#Long Stoploss Optimizationadd.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = "chain",                 component.label = "StopLossLong",                 variable = list( threshold = StopLossDistanceRange ),                 label = "StopLossLONG")
#Short Stoploss Optimizationadd.distribution(strategy.st,                 paramset.label = paramset.label.name,                 component.type = "chain",                 component.label = "StopLossShort",                 variable = list( threshold = StopLossDistanceRange ),                 label = "StopLossSHORT")
#Long&Short Stoploss Distance Constraintadd.distribution.constraint(strategy.st,                            paramset.label = paramset.label.name,                            distribution.label.1 = "StopLossLONG",                            distribution.label.2 = "StopLossSHORT",                            operator = "==",                            label = "StoplossEquality")

enable.rule(strategy.st,type="enter",label="longenter", enable = TRUE) enable.rule(strategy.st,type="exit",label="longexit", enable = TRUE)enable.rule(strategy.st,type="enter",label="shortenter", enable = TRUE) enable.rule(strategy.st,type="exit",label="shortexit", enable = TRUE)enable.rule(strategy.st,type="chain",label="StopLossLong", enable = TRUE)enable.rule(strategy.st,type="chain",label="StopLossShort", enable = TRUE) summary(getStrategy(strategy.st))                                              

#First run apply.paramset()paramsetenv<-new.env()cl <- snow::makeCluster(4, type = "SOCK")registerDoSNOW(cl)results <- apply.paramset(strategy.st,paramset.label=paramset.label.name,                          portfolio=strategy.st, account=strategy.st,nsamples=0,verbose = TRUE,                          audit=paramsetenv)snow::stopCluster(cl)results.df <- data.frame(results$tradeStats)

#Second run applyStrategy()longStopLossDistance <- 0.005                  #SL of best combination by NetPnLshortStopLossDistance <- 0.005                  #SL of best combination by NetPnL
applyStrategy( strategy=strategy.st , portfolios=strategy.st  ,verbose=TRUE)updatePortf(strategy.st)updateAcct(strategy.st)updateEndEq(strategy.st)
results.df.2 <- data.frame(tradeStats(strategy.st))
#Check NetPnL resulting from apply.paramset vs applyStrategyresults.df$Net.Trading.PL[12]  == results.df.2$Net.Trading.PL
#
The problem is that you're sending HTML, which the posting guide tells
you not to do:
https://www.r-project.org/posting-guide.html
See also the first paragraph in the "General Instructions" section at
the bottom of:
https://www.r-project.org/mail.html
On Mon, Apr 25, 2016 at 10:43 AM, Atakan Okan <atakanokan at outlook.com> wrote:
<snip mangled code>
<snip mangled code>
^^^ There's your problem.

  
    
#
Oh sorry about that. Thanks for pointing it out Mr.Ulrich. If it did not work, I will use an gmail account  to send the code for the next try. 

Here is the code:

library(lattice);library(foreach);library(doSNOW);library(ggplot2)
library(gridExtra);library(reshape);library(beepr);library(quantstrat) 
library(doSNOW)
Sys.setenv(TZ="UTC")                                                                                 
.strategy<- new.env();.blotter<- new.env()                                                                                                                             

currency('USD')                                                                                                                                                                      
stock("AAPL", currency="USD", multiplier=1,tick_size= 0.01)

getSymbols('AAPL',src = 'yahoo', from="2014-01-01", to="2015-05-31")
AAPL <- adjustOHLC(AAPL)

strategy.st <- paste("AAPL","MACD_D1",sep = "_")
rm.strat(strategy.st) 

initialEquity = 100000                                                                               
initDate = "2013-12-30" 
initPortf(strategy.st, "AAPL", initDate=initDate, currency = "USD")
initAcct(strategy.st, portfolios=strategy.st, initDate=initDate, initEq=initialEquity, currency = "USD")
initOrders(portfolio=strategy.st,initDate=initDate) 
strategy(strategy.st,store=TRUE)

customFees <- function (TxnQty, ...) 
{
  return(abs(TxnQty) * -0.01)
}
txn.model <- "customFees"    

positionSizeLong  =  1000     
positionSizeShort =  -1000     


paramset.label.name <- "SMA_OPT"
FastSMARange <- seq(5,21,by=8)
SlowSMARange <- seq(10,50,by=20)
StopLossDistanceRange <- seq(0.0025,0.005,by=0.0025)                               


add.indicator(strategy.st,                                               
              name = "SMA",                                               
              arguments = list(x=Cl(eval(parse(text = "AAPL")))
                               ,n=5   #fastsma of best combination by NetPnL
              ),                                                            
              label='fastsma')                                           

add.indicator(strategy.st,                                                 
              name = "SMA",                                                
              arguments = list(x=Cl(eval(parse(text = "AAPL")))
                               ,n=50    #slowsma of best combination by NetPnL
              ),                                                           
              label='slowsma')                                             

add.signal(strategy.st,
           name="sigCrossover",
           arguments = list(columns=c("fastsma","slowsma"),relationship="gt"),
           label="fastsma.gt.slowsma")                                                        

add.signal(strategy.st,
           name="sigCrossover",
           arguments = list(columns=c("fastsma","slowsma"),relationship="lt"),
           label="fastsma.lt.slowsma")

add.rule(strategy.st,
         name='ruleSignal',
         arguments = list(sigcol="fastsma.gt.slowsma",
                          sigval=TRUE,
                          prefer="Open", 
                          orderqty= positionSizeLong, 
                          #osFUN="osAllInLong",  
                          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="fastsma.lt.slowsma",
                          sigval=TRUE,
                          prefer="Open", 
                          orderqty='all',
                          ordertype='market',
                          orderside='long',
                          orderset='ocolong',
                          TxnFees = txn.model),
         type='exit',
         label='longexit',
         enabled=TRUE
)

# Long StopLoss Rule---------------------------------------------------------------------------
add.rule(strategy.st,name='ruleSignal',
         arguments = list( sigcol="fastsma.lt.slowsma", sigval=TRUE,
                           replace=FALSE,
                           orderside='long',
                           ordertype='stoplimit',
                           tmult=TRUE,
                           threshold=quote( longStopLossDistance ),
                           orderqty='all',
                           orderset='ocolong',
                           TxnFees = txn.model),
         type='chain', parent="longenter",
         label='StopLossLong',
         enabled=TRUE)

# Short Entry Rule--------------------------------------------------------------------
add.rule(strategy.st,
         name='ruleSignal',
         arguments = list(sigcol="fastsma.lt.slowsma",
                          sigval=TRUE,
                          prefer="Open", 
                          orderqty=positionSizeShort, 
                          #osFUN="osAllInShort",  
                          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="fastsma.gt.slowsma",
                          sigval=TRUE,
                          prefer="Open", 
                          orderqty='all',
                          ordertype='market',
                          orderside='short',
                          orderset='ocoshort',
                          TxnFees = txn.model),
         type='exit',
         label='shortexit',
         enabled=TRUE
)

# Short Stop Loss Rule-----------------------------------------------------------------
add.rule(strategy.st,name='ruleSignal',
         arguments = list( sigcol="fastsma.gt.slowsma", sigval=TRUE,
                           replace=FALSE,
                           orderside='short',
                           ordertype='stoplimit',
                           tmult=TRUE,
                           threshold=quote( shortStopLossDistance ),
                           orderqty='all',
                           orderset='ocoshort',
                           TxnFees = txn.model),
         type='chain', parent="shortenter",
         label='StopLossShort',
         enabled=TRUE)


#Indicator Optimization-------------------------------------------------------------
add.distribution(strategy.st,
                 paramset.label = paramset.label.name,
                 component.type = 'indicator',
                 component.label = "fastsma",
                 variable = list( n = FastSMARange ),               
                 label = "FastSMARANGE")


add.distribution(strategy.st,
                 paramset.label = paramset.label.name,
                 component.type = 'indicator',
                 component.label = "slowsma",
                 variable = list( n = SlowSMARange ),
                 label = "SlowSMARANGE")

add.distribution.constraint(strategy.st,
                            paramset.label = 'SMA_OPT',
                            distribution.label.1 = 'FastSMARANGE',
                            distribution.label.2 = 'SlowSMARANGE',
                            operator = '<',
                            label = 'FastSMA<- snow::makeCluster(4, type = "SOCK")
registerDoSNOW(cl)
results <- apply.paramset(strategy.st,paramset.label=paramset.label.name,
                          portfolio=strategy.st, account=strategy.st,nsamples=0,verbose = TRUE,
                          audit=paramsetenv)
snow::stopCluster(cl)
results.df <- data.frame(results$tradeStats)


#Second run applyStrategy()
longStopLossDistance <- 0.005   #SL of best combination by NetPnL
shortStopLossDistance <- 0.005  #SL of best combination by NetPnL

applyStrategy( strategy=strategy.st , portfolios=strategy.st
               #,parameters=list(n = 5)
               ,verbose=TRUE)
updatePortf(strategy.st)
updateAcct(strategy.st)
updateEndEq(strategy.st)

results.df.2 <- data.frame(tradeStats(strategy.st))

#Check NetPnL apply.paramset vs applyStrategy
results.df$Net.Trading.PL[12]  == results.df.2$Net.Trading.PL

  
  
#
Forgot to add, just run the complete script till the comment "#Second run applyStrategy()". For the second run, just rerun the whole script without the code block below:

registerDoSNOW(cl)
results <- apply.paramset(strategy.st,paramset.label=paramset.label.name,
                          portfolio=strategy.st, account=strategy.st,nsamples=0,verbose = TRUE,
                          audit=paramsetenv)
snow::stopCluster(cl)
results.df <- data.frame(results$tradeStats)

Atakan Okan
#
And I would be grateful, if somebody could just confirm that the reproducible code was sent succesfully, as the code seems to be sent fine in its thread in r-sig-finance archives. Thanks again.

________________________________