Adding "Stoploss disabled" to the parameter distribution for apply.paramset

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Adding "Stoploss disabled" to the parameter distribution for apply.paramset

Atakan Okan
Tried doing a simple MACD Long-only strategy but couldn't manage to get it working. The take profit rule doesn't seem to work as well, since changing its threshold does not affect the net pnl. Below is a minimal (as much as I could) reproducible code:


#AAPL google finance data
#MACD cross


library(quantmod)
library(xts)
library(quantstrat)


getSymbols("AAPL", src = "google")
plot(Cl(AAPL))


.strategy <- new.env()
.blotter  <- new.env()                            


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


strategy.st <- "reproducible_strategy"
rm.strat(strategy.st)                                                      


initDate = as.character(as.Date(index(AAPL[1])-1))                    
initPortf(strategy.st, 
          "AAPL", 
          initDate=initDate, 
          currency = "USD")
initAcct(strategy.st, 
         portfolios=strategy.st, 
         initDate=initDate, 
         initEq=1000, 
         currency = "USD")
initOrders(portfolio=strategy.st,
           initDate=initDate)                         
strategy(strategy.st,store=TRUE)


txn.model <- 0


add.indicator(strategy.st,  
              name = "MACD", 
              arguments = list(x=Cl(AAPL)), 
              label='macd') 


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


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


# Long Entry Rule-----------------------------------------------------------------------------
add.rule(strategy.st,
         name='ruleSignal',
         arguments = list(sigcol="macd.gt.signal",
                          sigval=TRUE,
                          prefer="Open", 
                          orderqty= 10, 

                          ordertype='market',
                          orderside='long',
                          orderset='ocolong',
                          TxnFees = 0),
         type='enter',
         label='longenter',
         enabled=FALSE

)


# Long Exit Rule-------------------------------------------------------------------
add.rule(strategy.st,
         name='ruleSignal',
         arguments = list(sigcol="macd.lt.signal",
                          sigval=TRUE,
                          prefer="Open", 
                          orderqty='all',
                          ordertype='market',
                          orderside='long',
                          orderset='ocolong',
                          TxnFees = 0),
         type='exit',
         label='longexit',
         enabled=FALSE

)






# Long Take Profit Rule
TakeProfitDistanceRANGE <- seq(1,5,by=4)
longTakeProfitDistance <- TakeProfitDistanceRANGE[1]


add.rule(strategy.st, name = "ruleSignal",
         arguments = list(sigcol="macd.lt.signal",
                          sigval=TRUE,
                          ordertype="limit",
                          orderside="long",
                          replace=FALSE,
                          tmult=FALSE,
                          threshold=quote(longTakeProfitDistance), 
                          orderqty="all",
                          orderset="ocolong",
                          TxnFees = 0),
         type = "chain", 
         parent="longenter",
         label = "TakeProfitLong",
         enabled = FALSE
)






#Optimization----------------------------------------------------
paramset.label.name <- "MACD_OPT"
macdSignalRANGE <-   seq(50,100,by=10)




#MACD Signal Distribution
add.distribution(strategy.st,
                 paramset.label = paramset.label.name,
                 component.type = 'indicator',
                 component.label = "macd",
                 variable = list( nSig = macdSignalRANGE ),
                 label = "macdSignalRANGE")


#Long Take Profit Optimization
add.distribution(strategy.st,
                 paramset.label = paramset.label.name,
                 component.type = "chain",
                 component.label = "TakeProfitLong",
                 variable = list( threshold = TakeProfitDistanceRANGE ),
                 label = "TakeProfitLONG")


#Long TP On/Off
add.distribution( strategy=strategy.st,
                  paramset.label = paramset.label.name,
                  component.type = 'chain',
                  component.label = 'TakeProfitLong',
                  variable = list(enabled = c(TRUE,FALSE)),
                  label = 'TPOnOff'
)




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="chain",label="TakeProfitLong", enable = TRUE)
summary(getStrategy(strategy.st))                                              




if (Sys.info()["sysname"] == "Windows"){
  library(doSNOW)
  cl <- makeCluster(4)

  registerDoSNOW(cl)                                     
}
if(Sys.info()["sysname"] == "Linux") {
  library(doMC)
  registerDoMC(cores=4)
  getDoParWorkers()
}


results <- apply.paramset(strategy.st,
                          paramset.label=paramset.label.name,
                          portfolio=strategy.st, 
                          account=strategy.st,
                          nsamples=0,
                          verbose = TRUE,
                          calc = "slave")


if(Sys.info()["sysname"] == "Windows"){  snow::stopCluster(cl) }


results.df <- data.frame(results$tradeStats)

_______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Adding "Stoploss disabled" to the parameter distribution for apply.paramset

Atakan Okan



________________________________
From: Atakan Okan <[hidden email]>
Sent: Saturday, May 27, 2017 9:11 PM
To: [hidden email]
Subject: Adding "Stoploss disabled" to the parameter distribution for apply.paramset

Tried doing a simple MACD Long-only strategy but couldn't manage to get it working. The take profit rule doesn't seem to work as well, since changing its threshold does not affect the net pnl. Below is a minimal (as much as I could) reproducible code:


#AAPL google finance data
#MACD cross


library(quantmod)
library(xts)
library(quantstrat)


getSymbols("AAPL", src = "google")
plot(Cl(AAPL))


.strategy <- new.env()
.blotter  <- new.env()


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


strategy.st <- "reproducible_strategy"
rm.strat(strategy.st)


initDate = as.character(as.Date(index(AAPL[1])-1))
initPortf(strategy.st,
          "AAPL",
          initDate=initDate,
          currency = "USD")
initAcct(strategy.st,
         portfolios=strategy.st,
         initDate=initDate,
         initEq=1000,
         currency = "USD")
initOrders(portfolio=strategy.st,
           initDate=initDate)
strategy(strategy.st,store=TRUE)


txn.model <- 0


add.indicator(strategy.st,
              name = "MACD",
              arguments = list(x=Cl(AAPL)),
              label='macd')


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


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


# Long Entry Rule-----------------------------------------------------------------------------
add.rule(strategy.st,
         name='ruleSignal',
         arguments = list(sigcol="macd.gt.signal",
                          sigval=TRUE,
                          prefer="Open",
                          orderqty= 10,

                          ordertype='market',
                          orderside='long',
                          orderset='ocolong',
                          TxnFees = 0),
         type='enter',
         label='longenter',
         enabled=FALSE

)


# Long Exit Rule-------------------------------------------------------------------
add.rule(strategy.st,
         name='ruleSignal',
         arguments = list(sigcol="macd.lt.signal",
                          sigval=TRUE,
                          prefer="Open",
                          orderqty='all',
                          ordertype='market',
                          orderside='long',
                          orderset='ocolong',
                          TxnFees = 0),
         type='exit',
         label='longexit',
         enabled=FALSE

)






# Long Take Profit Rule
TakeProfitDistanceRANGE <- seq(1,5,by=4)
longTakeProfitDistance <- TakeProfitDistanceRANGE[1]


add.rule(strategy.st, name = "ruleSignal",
         arguments = list(sigcol="macd.lt.signal",
                          sigval=TRUE,
                          ordertype="limit",
                          orderside="long",
                          replace=FALSE,
                          tmult=FALSE,
                          threshold=quote(longTakeProfitDistance),
                          orderqty="all",
                          orderset="ocolong",
                          TxnFees = 0),
         type = "chain",
         parent="longenter",
         label = "TakeProfitLong",
         enabled = FALSE
)






#Optimization----------------------------------------------------
paramset.label.name <- "MACD_OPT"
macdSignalRANGE <-   seq(50,100,by=10)




#MACD Signal Distribution
add.distribution(strategy.st,
                 paramset.label = paramset.label.name,
                 component.type = 'indicator',
                 component.label = "macd",
                 variable = list( nSig = macdSignalRANGE ),
                 label = "macdSignalRANGE")


#Long Take Profit Optimization
add.distribution(strategy.st,
                 paramset.label = paramset.label.name,
                 component.type = "chain",
                 component.label = "TakeProfitLong",
                 variable = list( threshold = TakeProfitDistanceRANGE ),
                 label = "TakeProfitLONG")


#Long TP On/Off
add.distribution( strategy=strategy.st,
                  paramset.label = paramset.label.name,
                  component.type = 'chain',
                  component.label = 'TakeProfitLong',
                  variable = list(enabled = c(TRUE,FALSE)),
                  label = 'TPOnOff'
)




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="chain",label="TakeProfitLong", enable = TRUE)
summary(getStrategy(strategy.st))




if (Sys.info()["sysname"] == "Windows"){
  library(doSNOW)
  cl <- makeCluster(4)

  registerDoSNOW(cl)
}
if(Sys.info()["sysname"] == "Linux") {
  library(doMC)
  registerDoMC(cores=4)
  getDoParWorkers()
}


results <- apply.paramset(strategy.st,
                          paramset.label=paramset.label.name,
                          portfolio=strategy.st,
                          account=strategy.st,
                          nsamples=0,
                          verbose = TRUE,
                          calc = "slave")


if(Sys.info()["sysname"] == "Windows"){  snow::stopCluster(cl) }


results.df <- data.frame(results$tradeStats)



        [[alternative HTML version deleted]]

_______________________________________________
[hidden email] 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.