MetaTrader(以下MT4)のExpert Advisor(以下EA)販売で有名なサイトにGogoJungleがありますが、GogoJungleはデモ口座で稼働させている結果をフォワードテストとして公開しています。
このサイトのコミュニティでリアルトレードがフォワードテストと異なっているという趣旨の投稿を度々見かけます。そこで今回この差異がなぜ発生するのかを思いつく限り列挙してみたいと思います。
私はEAのユーザーであると同時にEA開発もしているので、EAを使う立場と作る立場の両方を念頭に記事にしてあります。
実行環境差異が主因となる問題
- GogoJungleのフォワードテストはデモ口座です。デモ口座は本番口座のレート(価格)をそのまま配信している訳ではないので、そもそもレートそのものが異なります。
OANDA Japanの本番口座(プロコース)とデモ口座のドル円1分足チャートを並べて撮影したものを以下に添付しました。左側が本番で右側がデモ口座です。
同じOANDAの口座でも本番とデモ口座では配信レート自体ずれているのが見て取れます。時間帯によってはデモ口座の更新がもっとずれている時もあります。
レート配信の差はEAの挙動差異を生む可能性があります。 - 配信レート以外にもデモ口座のスプレッドは完全固定だったりスリップページが発生しないなど、デモ口座の方が有利な環境と言えます。
- 本番口座とデモ口座間だけではなく、FXブローカーによってもこれらの差異があるのでブローカーの違いはEAの稼働差異が生まれる要因になり得ます。
ブローカーによって1週間の日足本数も異なり、日足を使うEAは差異が出る可能性があります。他にもブローカー毎に時差が違うので時間を使うEAではきちんと時差を考慮しないと問題になります。 - EAを動かしている場所(VPSなど)とFXブローカーのサーバーが国をまたがったりして距離があると通信時間の差も生まれます。
- EAを動かしている環境のリソース(CPUやメモリなど)が不足してEAの動きが鈍い場合もあり得ます。また複数のEAを動かしているとマジックナンバーが重複していて予期しない注文が入っていたり、注文がバッティングする可能性も考えられます。
稼働環境のリソースチェックやEAのログにエラーがないかを確認した方が良いです。
プログラムの作りが主因となる問題
- MT4のプログラムでレートを取得する際は、現在足のインデックスを0として一本前なら1とインデクッスを指定してレートを取得します。インデクッスが1以上だと確定した足のレートになるので差異を小さく出来ますが、0だと変動し続けているレート(ティック)の現在値を取ることになるので環境差異が生まれやすくなります。
特に1pipの差でもトレード結果を左右するスキャルピング系のEAでは、差が大きくなりやすいです。 - ティックボリューム(取引高に相当、単位時間あたりのティック数)を使うプログラムを組んでいると、デモ口座と本番口座のティックボリューム差異の影響を受けやすくなります。上に添付した動画内のティックボリューム(チャート下部の棒グラフ)を見ていただくとデモ口座の方がティックボリュームが小さいことが分かるかと思います。
- 価格を指定する指値や逆指値よりその時の価格で注文を出す成行注文を行うEAは差が生まれやすくなります。
さらに成行注文はEA稼働環境とFXブローカーのサーバーとの通信速度の影響を受けやすい注文方法と言えます。
ユーザー操作が主因となる問題
- EAの中には過去情報(何らかの高値など)をメモリーに保存してエントリー判断などに使うものがあります。このようなEAでは再起動してしまうとメモリーがリセットされてしまい、フォワードテストで稼働しているEAとメモリーの中身が変わってしまい差が生じてしまう可能性があります。
- MT4のチャートオプションで変更できるヒストリーバーの本数を少なくし過ぎて、EAの稼働に必要なデータが取れなくなってしまっていてエラーや中途半端な判断で注文を出していることも考えられます。