#Optimization in quantstrat #-------------------------- library(quantstrat) #change this line to the directory where .RData file is #setwd("c:/path/to/my/directory/") ############################################################################################## ################## initialize instruments and load historic data ############## rm(list=ls(.blotter),a envir=.blotter) Sys.setenv(TZ="UTC") initDate = '2002-10-21' .from=initDate .to='2002-10-31' currency(c('GBP', 'USD')) exchange_rate('GBPUSD', tick_size=0.0001) getSymbols.FI(Symbols='GBPUSD', dir=system.file('extdata',package='quantstrat'), from=.from, to=.to) #30-minutely OHLC data GBPUSD = to.minutes10(GBPUSD, 30) GBPUSD = align.time(GBPUSD, 30*60) dim(GBPUSD) head(GBPUSD,10) last(GBPUSD,10) ############################################################################################### ################## system parameters & initialize quantstrat objects ############## #stochastics lengths nFastK = 20 nFastD = 3 nSlowD = 5 maType="SMA" initEq=1000000 .orderqty=100000 .txn=-6 # round trip fee #optimization parameters #.nSlowD = (1:10) #.nLower = (.10:.30) #.nUpper = (.70:.90) .nSlowD <- seq(from=1, to=10, by=1) .nLower <- seq(from=.10, to=.30, by=.05) .nUpper <- seq(from=.70, to=.90, by=.05) .nsamples = 100 portfolio.st="GBPUSDstoch" account.st="GBPUSDstoch" strategy.st="GBPUSDstoch" rm.strat(portfolio.st) rm.strat(strategy.st) initPortf(portfolio.st, symbols='GBPUSD', initDate=initDate, currency='USD') initAcct(account.st, portfolios=portfolio.st, initDate=initDate, currency='USD', initEq=initEq) initOrders(portfolio.st, initDate=initDate) ############################################################################################### ################## load strategy and define distributions ############## load.strategy(strategy.st) summary(getStrategy(strategy.st)) add.distribution(strategy=strategy.st, paramset.label='stoch', component.type='indicator', component.label='slowD.stoc.ind', variable=list(nSlowD=.nSlowD), label='slowD.STOC.IND') ######### add.distribution(strategy.st, paramset.label='stoch', component.type='signal', component.label="slowD.stoch.ind.gt.20", variable =list(threshold=.nLower), label="slowD.STOCH.IND.gt.LOWER") add.distribution(strategy.st, paramset.label='stoch', component.type='signal', component.label="slowD.stoch.ind.lt.80", variable = list(threshold=.nUpper), label="slowD.stoch.ind.lt.UPPER") add.distribution(strategy.st, paramset.label='stoch', component.type='signal', component.label="slowD.stoch.ind.gte.80", variable =list(threshold=.nUpper), label="slowD.STOCH.IND.gte.UPPER") add.distribution(strategy.st, paramset.label='stoch', component.type='signal', component.label="slowD.stoch.ind.lte.20", variable = list(threshold=.nUpper), label="slowD.stoch.ind.lte.LOWER") ############################################################################################### library(parallel) detectCores() if( Sys.info()['sysname'] == "Windows" ) { library(doParallel) # registerDoParallel(cores=detectCores()) } else { library(doMC) registerDoMC(cores=detectCores()) } #Optimize parameters #------------------- results <- apply.paramset(strategy.st, paramset.label='stoch', portfolio.st=portfolio.st, account.st=account.st, nsamples=.nsamples) head(names(results),.nsamples)