2009/03/07

バックテストの高速化


EA作りは、何度もバックテスト(検証)作業をしながら作り上げていくものです。
しかし、その検証に時間を費やされることは非常に苦痛です。
今回は、少しでも検証スピードを上げる方法(バックテストの高速化)を提案しておきます。
※なぜEAごとに検証スピードが異なるか?
簡単に言ってしまえば、処理容量が多いとスピードが落ちてしまうからです。
しかし、多くのEA(検証スピードのおそいEA)は、無駄な処理(必要のない処理)が含まれています。
処理作業を遅らせる要因は?
①大量のループ作業
例)100回ループがEA内にあり何も対策をしていない場合
データ分処理するとすれば、100回ループ×4回(1M[初値・高値・安値・終値])×検証時間軸(1Hなら×60)×検証期間となります。
②外部(EA外)の指標(インジケーター)の利用
※表示用に無駄な作業が含まれるため、処理スピード低下の要因となります。
※それらを回避するための対策は?
①大量のループ作業がある場合
A)時間軸の初値でオーダーの取引を検討するEAの場合
※【if(Volume[0]>1||!IsTradeAllowed())return(0);】をint start() { の後に追加しておく。(初値で処理をするという意味です。)
B)A以外のEA
※for(int i=0;i<Limit;i++)をfor(int i=0;i<Limit;i=i+10)のように変更してループ回数を減らしてみる。
※ただし、内容が粗悪になるため注意が必要です。(以外に使えます。)
②外部(EA外)の指標(インジケーター)の利用の場合
※簡単に言ってしまえば、必要な処理だけをEAの中に組み込んでしまえばそれが対策となります。
※しかし、フォワードテストやリアルで使用する際に、表示用として指標を表示させると2重処理していることになるのでPCへの負担は増えます。
例として、VQという指標をEA化したものを添付しておきますので確認してみてください。

まとめ
検討結果が、すぐにわかるのがEA作りの面白いところです。