2016-07-31 4 views
2

私は、非常に単純なシステムを実行し、最適化しようとします、quantstratを使用しています。私の戦略は:Close > SMAを入力し、出口がClose < SMAのときに入力します。私は毎日のデータを2010年1月1日から2014年1月1日まで実行しています。最適化は.nSMA = (10:20)です。私のシステムはi5 m480 2.67Ghz、8gb、Win7-64、Revolution R Open 3.2.0、RStudioです。この量子ストラップコードは異常に遅いですか?

コードの実行に約50秒かかります。それはquantstratのために正常ですか?それとも私は間違いを犯したのですか?

require(quantstrat) 
require(foreach) 
registerDoSEQ() 

rm(list = ls(.blotter), envir = .blotter) 
currency('USD') 
initDate = "2010-01-01" 
from = "2010-01-01" 
to = "2014-01-01" 
initEq = 1e5 
nSMA = 50 

getSymbols("GOOG", from = from, to = to) 
stock("GOOG", currency = "USD", tick_size = 1, multiplier = 1) 
getInstrument("GOOG", type = "instrument") 

strategy.st <- "first" 
portfolio.st <- "first" 
account.st <- "first" 
rm.strat(portfolio.st) 
rm.strat(strategy.st) 

initPortf(portfolio.st, symbols = 'GOOG', initDate = initDate, currency = 'USD') 
initAcct(account.st, portfolios = portfolio.st, initDate = initDate, currency = 'USD', initEq = initEq) 
initOrders(portfolio.st, initDate = initDate) 

strategy(strategy.st, store=TRUE) 

### indicators 

add.indicator(strategy.st, name = "SMA", 
       arguments = list(x = quote(Cl(mktdata)), n = nSMA), 
       label = "nSMA") 

### signals 

add.signal(strategy.st, name='sigCrossover', 
      arguments = list(columns=c("Close","nSMA"), 
          relationship="gt"), 
      label='LE' 
) 

add.signal(strategy.st, name='sigCrossover', 
      arguments = list(columns=c("Close","nSMA"), 
          relationship="lt"), 
      label='LX' 
) 

### rules 

add.rule(strategy.st, name="ruleSignal", 
     arguments=list(sigcol="LE" , sigval=TRUE, 
         orderside="long", 
         ordertype="market", 
         prefer="Open", 
         orderqty=1, 
         replace=FALSE 
     ), 
     type="enter", 
     label="EnterLong" 
) 

add.rule(strategy.st, name="ruleSignal", 
     arguments=list(sigcol="LX" , sigval=TRUE, 
         orderside="long", 
         ordertype="market", 
         prefer="Open", 
         orderqty="all", 
         replace=FALSE 
     ), 
     type="exit", 
     label="ExitLong" 
) 

applyStrategy(strategy.st, portfolio.st) 
save.strategy(strategy.st) 


# Optimization 
.nSMA = (10:20) 
load.strategy(strategy.st) 
add.distribution(strategy.st, 
       paramset.label = 'nSMA', 
       component.type = 'indicator', 
       component.label = 'nSMA', 
       variable = list(n = .nSMA), label = 'NSMA') 

results <- apply.paramset(strategy.st, 
          paramset.label='nSMA', 
          portfolio.st=portfolio.st, 
          account.st=account.st, 
          nsamples = length(.nSMA), 
          audit = NULL, 
          verbose=TRUE) 
View((results$tradeStats)) 

plot(results$tradeStats$NSMA, results$tradeStats$Net.Trading.PL, type = "l") 

答えて

1

あなたapply.paramsetコールは私のラップトップ(i7-4600U 2.1GHzの、12ギガバイトRAM)に約15秒かかります。ここに私のsessionInfo出力です:

R> sessionInfo() 
R version 3.3.1 (2016-06-21) 
Platform: x86_64-pc-linux-gnu (64-bit) 
Running under: Ubuntu 16.04.1 LTS 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=en_US.UTF-8  LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] quantstrat_0.9.1739   foreach_1.4.2     
[3] blotter_0.9.1695    PerformanceAnalytics_1.4.3541 
[5] FinancialInstrument_1.2.0  quantmod_0.4-5    
[7] TTR_0.23-1     xts_0.9-7      
[9] zoo_1.7-13     

loaded via a namespace (and not attached): 
[1] compiler_3.3.1 codetools_0.2-14 grid_3.3.1  iterators_1.0.7 
[5] lattice_0.20-33 

それはあなたのマシンに時間がかかりすぎるようなので、それは思えません。このコードが実行されていると同時に多くのCPUやRAMを消費している他のアプリケーションがコンピュータ上で実行されていますか?また、GitHubから最新バージョンのquantstrat、blotter、およびxtsを実行していることを確認してください。

+0

返信いただきありがとうございます。 しかし、私はシステムの性能を比較することには興味がありませんでした。 システムが高速であれば、素早くスクリプトを理解することができます) テストシステムには、quantstratを使用していますか?あなたはシステムの開発とテストに経験がありますか?またはスクリプトを実行するだけですか? 実際、私のスクリプトは最も簡単です。また、1秒よりもずっと速く、すばやくどのシステムでも実行する必要があります。 多分、私は任意の量子ストラットオプションを有効にする必要がありますか?たとえば、コンソールの出力にスクリプトの結果を無効にしますか? – Anatolye

+0

@Anatolye:私はシステムパフォーマンスを比較していませんでした。私はあなたのマシンでは時間がかかりすぎると言いました。あなたのマシン上の何かがコードの実行に時間を要します。スクリプトはマシン上で> 3倍速く実行されますが、マシンは自分のマシンより3倍高速ではありません。はい、私はquantstratで戦略をテストします。私はパッケージの著者の一人です。 11値を超えるパラメータ検索が1秒未満になると期待するのは無理です。 –

+0

ジョシュア、私たちのシステムは世代が異なるので、そういう直接的な比較は正しいとは思わない。 しかし、ありがとう!私は自分のシステムをチェックします。 200の値を計算するために私の取引とテストプラットフォームで同じsスクリプトを実行すると、結果が直ちに表示されるため、時間を修正できませんでした。私は期待していない、私は毎日それを見る。 – Anatolye

関連する問題