【MQL5】 MT5のEA作成の勉強 その13 ストラテジーテスターの使い方

【MQL5】 MT5のEA作成の勉強 その13 ストラテジーテスターの使い方

まえがき

 前回の投稿で予告したように、今回はストラテジーテスターの使い方を学びたいと思います。ストラテジーテスターとはMT5画面上部のツールバーから「表示」→「ストラテジーテスター(r)」を選択すると出てくる、下のような画面のことです。この画面を用いて、作成したEAのテスト条件を設定し、右下のスタートボタンを押すと、しばらくの後、これまで何度か投稿に載せてきたグラフ画面が生成されます。

設定タブ

エキスパート

 リストから、テストに使用するEAを選択します。このリストには「{データフォルダ}\MQL5\Experts」の中にあるEAが表示されます。データフォルダはMT5画面で「Ctrl+Shift+d」を押すか、上部ツールバーから、「ファイル」→「データフォルダを開く(D)」を選択すると開けます。
 ちなみに、.ex5ファイルを追加した場合は即時反映されるのですが、フォルダを追加した場合はMT5を再起動しないと反映されないようです。
 右側のボタンは5と書いてあるボタンでEAのソースが開き、(勿論、ソースを持っているものに限りますが)歯車のボタンは現在のテスターの設定を保存したり、保存したものを読み込んだりすることができます。

銘柄

 テストに使用する銘柄をリストから選択します。右側のリストは時間足です。
 しかし問題は右側のボタンです。このボタンを押すと、銘柄の設定を変更できるのですが、私が初めてテストしたとき、何故かこの設定が、基本通貨も証拠金通貨もUSDなのに、損益通貨だけJPYという設定になっており、なぜこうなっているのか気になり検証を行いました。検証結果です。

なんでこんな設定ができるんですかね?これじゃあ、同じEAでいくつも違う結果が出てしまいます。ちなみに、初期設定は、「 基本通貨:USD 損益通貨:JPY 証拠金通貨:USD 」でした。調べてみると、例えば「EUR/JPY」は 「 基本通貨: EUR  損益通貨:JPY 証拠金通貨: EUR 」 で、「EUR/USD」は「 基本通貨: EUR  損益通貨:USD 証拠金通貨: USD 」でした。さらに検証するため、多少条件を変更し、USD/JPYを対象に、初期設定の 「 基本通貨:USD 損益通貨:JPY 証拠金通貨:USD 」 で初期証拠金10000USDの条件で、最大合計ポジションサイズを1.0Lotとしてテストを行ったところ、以下のようになりました。

 証拠金負荷率の上限が約50%程度ですから、10000USD = 約100万円、1Lot(10万通貨)当たりの証拠金が約50万円とすると妥当な感じです。初期設定のままで問題ないようですね。

日付

 そのものずばり、テストの開始日と終了日を設定します。
MT4時代は長期間のテストが可能なティックデータを入手するのも大変だし、それを格納する容量もすごいことになるしで、大変でしたが、MT5すべてオンラインで提供してくれるので何の事前準備もなしに即テスト開始できました。これだけでもMT4からMT5に乗り換える価値があるというものです。

フォワードテスト

 フォワードテストの期間を指定します。
テスターでパラメータの最適化を行う場合、過去データで最適だったパラメータが、未来においては適さない、という事態があり得ます(過適合と呼ばれる現象です)。これを回避するため、過去データをさらに二つに分割し、片方をパラメータの決定に使い、その値を入力してもう片方をテストすることをフォワードテストと呼びます。この時、テストに用いる期間がフォワードテスト期間です。これにより、パラメータの決定に使った期間に過適合していれば、テストに使った期間の結果は散々なものになるので、過適合が起きていることに気付けるというわけです。

遅滞

 バックテストにおいて、MT5を起動しているPCから取引サーバーまでの通信遅延を考慮するために設定します。
テスターでバックテストを行う時は、EAにプログラミングした条件を満たした時、直ちに取引が実行されます。しかし、実際に本番環境で取引を行う際には、 EAにプログラミングした条件を満たした時、 取引サーバーに取引のリクエストを送り、サーバー側で取引の処理が行われます。この、リクエストが取引サーバーに届くまでの時間を考慮していないと、バックテストの結果と実際の運用結果が食い違う原因になります。特に、短い時間に大きな値動きをするブレイクを狙ったEAや、極めて短時間の間に取引を行うスキャルピング型のEAでは大きな影響が出る場合があります。
 テスターのスタートボタンのすぐ下をマウスオーバーすると現在のPCから取引サーバーへのPing到達時間が表示されるので、その値を設定しておきます。

モデル

 バックテストに使用するヒストリカルデータの細かさを設定します。
「全ティック」は実際の取引環境をほぼ再現します。他にもありますが、基本的には全ティックでテストを行うべきです。
 もう一つ「始値のみ」というやり方もありますが、こちらはバーが始まった時点での価格のみをテストに使用するため、あまり正確な結果が得られません。例えば、1Hの時間足の中で、一旦損切ライン以下まで価格が下がり、その後上がった、というような場合、全ティックでは損切されますが、始値のみでは損切されません。ただし、一部の始値のみでしか動かないEA(指値・逆指値を使う場合を除く)や、1分足を参照して長期のスイングトレードを行うEA等であれば、結果を大きく変えずにテストにかかる時間やデータ容量を削減することができます。

入金

 バックテストの初期証拠金と通貨を設定します。
右側の「レバレッジ」を変更することで、同じ初期証拠金量でも持てるポジション数が変わってきます。言うまでもありませんが、10000USDと10000JPYは100倍以上の差があるので、ここを間違えてしまわないように注意が必要です。

オプティマイズ

 パラメーターの最適化の実行方法を設定します。
「設定」タブの横の「パラメータ」タブで、バックテストに使うパラメータを入力できるのですが、オプティマイズが無効化されていない場合、ここでチェックを付けたパラメータを「スタート」から「ステップ」ごとに「ストップ」まで変化させながら繰り返しEAを実行し、その結果を比較します。

パラメータタブ

 このオプティマイズですが、数日単位の時間がかかってしまうことも珍しくありません。そこで、普通にすべての条件を網羅してゆく「完全アルゴリズム」に対して、ある程度良さそうな条件にあたりを付けつつ、ダメそうな条件を省いてテストを高速化するのが「遺伝的アルゴリズム」です。勿論、「遺伝的アルゴリズム」では、最良の設定条件を見落とす可能性もあるので、「遺伝的アルゴリズム」で辺りを付けた後、その結果を基にパラメータ数やステップ数などを削減し、「完全アルゴリズム」で再確認すべきでしょう。「気配値表示で示されたすべての銘柄」は、デフォルトでテスターの上部にある気配値表示ウィンドウに表示されている銘柄それぞれに対してテストを行い、その結果を比較するものです。こちらも、気配値表示ウィンドウに表示されている通貨ペアの数だけEAを実行するため、長い時間がかかる場合があります。

気配値表示ウィンドウ

まとめ

 ストラテジーテスターの使い方を学習しました。設定次第で同じEA、同じパラメータでもかなり結果が変わってしまうのは怖いですね。ゴゴジャンでは資金設定画面などが公開されていない場合もありますが、将来的に私が出品する機会があれば、その辺も明確にしておきたいところです。