出来高を削減してバックテスト効率を上げる。
4月3日の記事では、FXDD提供の1分足ヒストリカルデータには、出来高が異常に多いデータが含まれている話を書きました。そして、バックテスト時に出来高の分だけ Tick が動くので、無駄な出来高を削減すればテストに掛かる時間を短縮できます。また、FXT ファイルの 2GB の壁で途中でテストが止まる現象もある程度避けられます。
削減の方針は単純に、
上昇時は、始値→安値→高値→終値 の順
下落時は、始値→高値→安値→終値 の順
に 1pip ずつ動くと仮定し、その1.2倍を出来高とする。
としてみました。1.2倍は、10pips毎に1pipの逆行を含むという適当な想定です。
削減用のPerl スクリプトが、VOL_Opt.plで、使い方は、
(0) ActivePerl をインストールする。
(1) hst ファイルのあるフォルダにコピーする。
(2) VOL_Opt.plをダブルクリックして待つ。
だけです。
↑hst のあるフォルダに置いて
↓実行するとこんな感じ。
変換には多少時間が掛かります。数値の意味は、
元の総出来高 | 削減後の出来高 | 削減比率 |
63822772-> | 13900035 | (21.78) |
で、だいたい 1/3〜1/6 に減っています。
削減前後でバックテスト時のTickの動きを比較すると…
↑赤線内が同じ1分間ですが、無駄な1pipの上下動が全て無くなっています。
出来高を変えると、Tickの上下動が変わるので、当然、トレーリングストップの動きも異なり、バックテストの結果は厳密には一致しなくなります。もともと1分足内部での動きは、架空のシミュレーションでしかないので、その部分の違いを突き詰めても意味は無いと思います。むしろ、Every Tick モードでのテスト時間を短縮できる方が便利なのでは…と考えますが、、、利用に当たってはご自身で判断ください。
(ちなみに、perlスクリプト内の 1.2 という数値を 3〜4 に変更すると、EAによってはバックテスト結果が変わらなくなると思います..。