Meta Trader 4 における自動取引システム（Expert Advisor）検証

# はじめに
今回は [Meta Trader 4 における自動取引システム (Expert Advisor) 作成](http://qiita.com/Salinger/items/a70e85e0765552459c60) で作成した Expert Advisor（EA）の検証、パラメータチューニングとバックテストを行います。

# ストラテジーテスター

## 表示

まずストラテジーテスターが Meta Trader 4（MT4）表示されていない場合ですが、ウィンドウ上部のメニューから `View -> Strategy Tester` をクリックし画面に表示させます。

![05_01_tester.tiff](https://qiita-image-store.s3.amazonaws.com/0/58390/70b3d05c-d3be-cc3f-4e4d-6ed0bf3ef9da.tiff)

## 項目

各項目は次のような役割になっています。


| 項目               | 内容                        | 選択内容                                            |
|:------------------|:----------------------------|:---------------------------------------------------|
| Expert Advisor    | バックテストしたい EA を選択する。|                                                  |
| Symbol            | 対象とする商品を選択する。       |                                                   |
| Model             | 使用するデータを選択。    | Every tick: 全ティックを利用する。                          |
|                   |                        | Control points: 1本のロウソク足につき12個の点を生成し利用する。|
|                   |                        | Open prices only: 始値のみを利用する。                     |
| Use date          | 対象の日付と時間を選択する。|                                                        |
| Period            | 時間軸（足）を選択する。   |                                                        |
| Spread            | スプレッドを自由に変更できる。デフォルトは対象の商品のデフォルト値。|                     |
| Visual mode       | チェックを入れると実際に値動きと売買を確認しながらバックテストが行える。 |                 |
| Expert properties | EA に関する各種設定（後述）。  |                                                   |
| Symbol properties | 商品に関する各種項目の確認（スプレッド、取引単位、ストップレベル、取引時間など）。 |        |
| Open chart        | チャートウィンドウに取引状況を重ねたものを表示する。|                                  |    
| Modify Expert     | EA を編集する（Mac 版だと動作せず）。 |                                             |

Open chart をクリックすると対象のチャートウィンドウが現れます。バックテストを行うと、下図のように取引状況がグラフ上に重なった状態で表示されます。

![05_012_open_chart.tiff](https://qiita-image-store.s3.amazonaws.com/0/58390/303dfaa8-4ff8-80ac-6691-aac9317a8db6.tiff)


## EA の設定 (Expert properties)
Expert properties には Testing 、 Inputs 、 Optimization の設定項目があります。細かく見てみましょう。

![05_02_testing.tiff](https://qiita-image-store.s3.amazonaws.com/0/58390/62d9c85d-7f3f-c604-ee6c-7efb7187df58.tiff)

Testing では以下の項目を設定できます。

| 項目                | 内容                        | 選択内容                                            |
|:-------------------|:----------------------------|:---------------------------------------------------|
| Initial deposit    | 初期口座残高。                |                                                    |
| Positions          | 取引に利用するポジションの指定。 | Long のみ、 Short のみ、両方                         |
| Optimized paramter | どのパラメータで最適化を行うか。 | Balnce: 口座残高                                    |
|                    |                             | Profit Factor: プロフィットファクター (総利益 / 純損失) |
|                    |                             | Expected payoff: 期待損益 (総損益額 / 総トレード数)    |
|                    |                             | Maximal Drawdown: 最大ドローダウン額                  |
| Genetic algorithm  | 最適化時、遺伝的アルゴリズムでバックテストの時間を短縮する。 |                            |

![05_03_Inputs.tiff](https://qiita-image-store.s3.amazonaws.com/0/58390/a334c6f4-3314-076f-c07d-78a729a543db.tiff)

Inputs では使用する EA のパラメータに関する設定が行えます。 Save と Load で保存・読み込みが可能です。

| 項目     | 内容                                                        |
|:---------|:-----------------------------------------------------------|
| Variable | 最適化したい項目を選択する。                                   |
| Value    | 使用するパラメータを設定する（最適化しない場合はこの値を利用する）。 |
| Start    | 最適化の開始値。                                             |
| Step     | 最適化時の変化量。                                           |
| Stop     | 最適化の終了値。                                             |

![05_04_optimization.tiff](https://qiita-image-store.s3.amazonaws.com/0/58390/6d8c8254-2ade-5672-8027-55fd75f34858.tiff)

Optimization では最適化時の制約を設定できます。おそらくあまり弄る必要は無いはずです。

# バックテストの実行
## 確認できる項目
各種項目を設定したら、右下の Start をクリックするとバックテストが始まります。終了後は次の内容が確認できます。

| 項目     | 内容                       |
|:--------|:---------------------------|
| Results | 取引履歴が確認できます。      |
| Graph   | 口座残高の推移が確認できます。 |
| Report  | 結果の詳細です (後述)。      |
| Journal | 各種ログが確認できます。      |

![05_05_report.tiff](https://qiita-image-store.s3.amazonaws.com/0/58390/18510a6f-db67-6f6f-356d-537eb8dacf96.tiff)

Report タブでは次の内容が確認できます。

| 項目                       | 内容                                                          |
|:--------------------------|:--------------------------------------------------------------|
| Bars in test              | バックテストに利用したローソク足数                                 |
| Mismatched charts errors  | バックテスト対象の足とより小さい時間足との不一致数                   |
| Inital deposit            | 初期口座残高                                                    |
| Total net profit          | 総損益 = バックテスト終了時の口座残高 － 初期口座残高                |
| Profit factor             | プロフィットファクター = 総利益 / 総損失                           |
| Absolute drawdown         | 初期口座残高からの最大ドローダウン = Initial deposit - 最小口座残高  |
| Total trades              | 総取引数                                                       | 
| Ticks modelled            | バックテストに利用したティック数                                   |
| Modelling quality         | バックテストの精度                                               |
| Spread                    | スプレッド                                                      |
| Gross profit              | 総利益                                                         |
| Gross loss                | 総損失                                                         |
| Expected payoff           | 1トレードあたり利益 = Total net profit / Total trades            |
| Maximal drawdown          | 最大ドローダウン = ピーク時口座残高 - 最小口座残高                  |
| Relative drawdown         | 相対ドローダウン = ピーク時口座残高 - 次のドローダウンの最大比率・金額 |
| Short positions           | 売り取引数 (勝率 %)                                             |
| Long positions            | 買い取引数 (勝率 %)                                             |
| Profit trades             | 利益が出た取引数 (割合)                                          |
| Loss trades               | 損益が出た取引数 (割合)                                          |
| Largest profit trade      | 1取引あたりの最大利益                                            |
| Largest loss trade        | 1取引あたりの最大損失                                            |
| Average profit trade      | 利益が出た取引の平均利益                                          |
| Average loss trade        | 損益がでた取引の平均損益                                          |
| Maximum consecutive wins  | 最大連続勝ち取引数                                               |
| Maximum consecutive losses| 最大連続負け取引数                                               |
| Maximal consecutive profit| 最大連続利益                                                    |
| Maximal consecutive loss  | 最大連続損益                                                    |
| Average consecutive wins  | 平均連続勝ち取引数                                               |
| Average consecutive losses| 平均連続負け取引数                                               |

Report タブの領域で右クリックすると、レポートを HTML 形式で保存することが出来ます。

![05_052_strategy_tester_result.tiff](https://qiita-image-store.s3.amazonaws.com/0/58390/e8a91c44-95be-dddb-9db1-61a2541ce18f.tiff)

# 最適化
MT4 では EA の各種定数最適化ができます。

## 最適化の実行
Expert properties を選択後、Testing タブの Optimization parameter を最適化する目的変数（デフォルトだと損益）に設定します。その後 Inputs タブを選択し、最適化したい変数のチェックボックスをチェックします。そして各変数の Start、Step、Stop を設定し、OK をクリック。ストラテジーテスターの Optimization をチェックし、Start をクリックすると最適化計算が始まります。

計算終了後には Optimization Results タブと Optimization Graph タブが出現します。

## 最適化の結果確認

![05_06_optimization_result.tiff](https://qiita-image-store.s3.amazonaws.com/0/58390/57a7f541-2176-a323-c1eb-bb8fb0d9e2a2.tiff)

結果のタブを確認すると、各パラメータにおける結果が確認できます（上の結果ほど良い結果）。

![05_07_optimization_graph.tiff](https://qiita-image-store.s3.amazonaws.com/0/58390/c8a0586f-62f9-3547-faa2-b8f483440323.tiff)

またグラフを確認すると、結果のタブにある Pass の番号と目的変数の関係性がプロットされます。

これらの結果から、使用するパラメータを決定し、もう一度バックテストを行い詳細レポートを確認できます。

# おわりに
これで作成した EA のバックテストと使用するパラメータの最適化を行うことが可能になりました。ここまでで MT4 内で完結するロジックを自由に組むことが可能になりました。

# 参考文献
* [MetaTrader 4 Strategy Tester](http://www.metatrader4.com/ja/automated-trading/strategy-tester)
* [MetaTrader 4 Expert Optimization](http://www.metatrader4.com/ja/trading-platform/help/autotrading/tester_optimization)