出来高を削減してバックテスト効率を上げる。

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によってはバックテスト結果が変わらなくなると思います..。