※バックテスト結果は実際の利益を保証するものではありません
MT4によるバックテストの落とし穴
システムトレードで最も使われているプラットフォームはMT4(MetaTrader 4)です。
MT4は2005年にロシアのMetaQuotes社が開発しました。
MT4でバックテストを行うためには、ヒストリカルデータ(過去チャート)をダウンロードする必要があります。
いくつか方法があります。
MT4には、標準機能(ヒストリーセンター)でMetaQuotes社が提供するヒストリカルデータを直接ダウンロードできます。
ただし、このデータは精度が悪く通常は使用しません。
その他、よく使われるのは、FXDD社が無料で提供するヒストリカルデータです。
FXのヒストリカルデータでgoogle検索するとFXDDのものがよくヒットします。
私は最初、このヒストリカルデータを使い、バックテストを行っていました。
実は、このヒストリカルデータには大きな落とし穴がありました。
次のバックテスト結果を見てください。
私が作成したEAについてバックテストした結果です。
利益がものすごいことになっています。
2010年から2024年2月までの期間によるバックテスト結果です。
初期証拠金は、100万円で最終的な純益は1億円という過剰な利益が出る誤ったバックテストの一例です。
(後で解説しますが、このバックテストの結果は誤りです)
皆さんは、これを見てどう思いますか。
これ、落とし穴があるんです。

このEAは、秒単位で動作するスキャルピング手法ものです。
ここで落とし穴が3つあります。
- スプレッド
- スリッページ
- ヒストリカルデータの精度
バックテストをする際、3つは基礎知識として理解する必要があります。
このあたり、私が見た限りでは、専門書には詳しく書いていないようです。
第一の落とし穴「スプレッド」について
スプレッドは、下記の図のように例えば、売る予定の価格から実際に売った価格にズレが生じる、このズレの幅のことです。

このズレの価格は、トレーダーにとっては損となりますが、FX会社にとっては利益になります。
FX会社は、この差分で稼いでいるわけです。
このスプレッドは、相場が大きく変動した場合、幅が広がるという特徴があります。
私が利用しているFX会社のドル円の場合、0.2~1.3銭(0.002~0.013円)となっています。
https://www.gaitamefinest.com/spread_mt4
ここでMT4の話ですが、MT4でバックテストを行う際、このスプレッドは固定であり、変動にすることが出来ません。
そのため、バックテストを行う際、スプレッドは固定値にする必要があります。
このスプレッドは、1時間足などで行うデイトレードであれば微々たる誤差かもしれませんが、秒単位のスキャルピング手法のように短期間で売買する場合は、とても無視できないものになります。
固定値のスプレッドで実施したバックテスト結果は正確と言えるのかという疑問が生まれます。
第二の落とし穴「スリッページ」について
たくさんのトレーダーが同じタイミングで注文を出すと、注文処理が追いつかず、タイムラグ(※)が発生し、約定価格(※)がズレることがあります。
※取引が確定した時点の価格
ズレるという点では、スプレッドと似ていますが、ズレる原因が異なります。
例えば、レストランで料理を注文するとき、
スプレッドとは「メニューに書いてある定価と仕入れ値の差」のことです。
仕入れ値を見て定価で買うようなものです。
スリッページは「注文した時点から料理が出てくる時点までのタイムラグの間に値段が変わってしまうこと」です。
私が利用しているFX会社の場合、発注から約定に至るまでのタイムラグ(平均時間)は約200msから650msとなります。
約200msから650msの間に変動した分だけ約定価格が変動(スリッページの幅)するということです。

つまり、以下のようになります。
注文価格 + スプレッド値 + スリッページ値 = 約定価格
第三の落とし穴「ヒストリカルデータの精度」について
ヒストリカルデータの「精度」は、最小変動単位(ティック)の細かい価格変動をどれだけ正確に再現しているかということです。
MT4の場合、下図に示した赤枠の部分のモデリング品質が該当します。
このバックテストの場合、モデリング品質は、25%とよくありません。
利用していたFXDDのヒストリカルデータは、ティックデータが少ないため、モデリング品質がよくありません。

しかも、MT4の標準機能では、スプレッドは固定で、スリッページをリアルに再現することはできません。
冒頭で示したバックテストの結果である100万円→1億円はまったく信用できないということです。
ではどうすれば、リアルなバックテストが可能になるのか。
方法としては、有料のヒストリカルデータを使う方法があります。
私は、Tick Data Suite(TDS)を使用しています。
他にもあるかもしれませんが、このヒストリカルデータが一番、有名です。
このTDSを使うことで変動スプレッド、リアルなスリッページを適用したMT4におけるバックテストが行えるようになります。
TDSを導入し、再度、同じ期間でバックテストを実施した結果は、次の通りです。
1億円どころがマイナス92万円です。
まったくダメなEAでした。
スプレッド、スリッページ、ヒストリカルデータの精度はあまく見てはいけません。
※バックテスト結果は実際の利益を保証するものではありません

