【FX自動売買】MQL4を使った簡単なEAの作り方【MT4】

## EAを作りたい
FXを自動売買できるツールをEA（Expert Adviser）という。
良いEAを作れば利益を出すことができるし、EAを売って儲けることもできる。
機械学習とかを使えば高性能なEAを作り出すことも可能なのではと思い調べてみた。

## Pythonと機械学習
機械学習といえばライブラリが充実しているPythonが使われることが多い。
手前味噌ではあるが、以前Pythonで決定木を利用したFX予測をする記事を書いた。
あくまでこれは練習用に決定木を使ってみただけなので、LightGBMやらLSTMやらを使って本気でやればもっと精度は上がると思う。

- https://qiita.com/tetsuro731/items/55eceec7e973154e2d7e

また、国内のFX業者で言えばoandaが外部APIを公開しているため、これを叩けばPythonのスクリプトから売買を行うこともできる。
これも以前記事を書いた。

- https://qiita.com/tetsuro731/items/54d2089ddd6df295f8ff

## MT４とMQL４
一方で、このままEAとして売り物になるかと言えば答えばNOだ。
なぜかと言うと、上であげたスクリプトではPythonを動かして外部APIを叩くという少々高度なやり方で売買を行なっているためだ。
EAとして売るためにはプログラミングに詳しくない一般的なユーザでも使えるようなEAを作る必要がある。

現在FXの取引に最も使われいてるのがMT4 (Meta Trader 4)だ。

- https://www.metatrader4.com/ja

様々な時間足やテクニカル指標を表示できるほか、EAを組み込むこともできる。
そしてこのMT4のEAとして組み込むにはMQL4と呼ばれるC++をベースにした言語を書く必要がある。

なお、MT４より新しい（そして高性能な）MT5が出ており、こちらを使うの場合はMQL5という言語を使う必要がある。
MQL５はMQL4と微妙に言語使用が違ったりするので注意が必要だが、現在MT4でEAを使うユーザの方が多いためここではMQL4でEAを作ることを目指す。

## 環境

- OS: Windows 10
    - 本当はLinuxかMacを使いたかったが、MT4でEAを使う場合Windowsが一般的なのでしょうがなく使う
- PCにMT4がインストール済、口座にログイン済を想定
    - 練習用の場合はデモ口座が安全
    - 口座はどこでもいいのだけど、自分はXMという海外口座で試した

MT４のインストール及び口座へのログイン手順は調べてば出てくるので省略。

## やってみる
参考にしたサイト

- https://enjoy-fx.net/how-to-make-expert-advisor/

### EAの新規作成

MT4の起動後、「ツール」から「新規作成」を選ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547532/0cbaeb35-bf08-5200-4d53-7359ac856809.png)
エキスパートアドバイザ（テンプレート）を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547532/3765e472-1648-2e8f-e180-cc4d8a413cbc.png)

EAの名前は`Experts\`の後につける。ここでは`test`とした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547532/f36d27d5-a8f2-5972-3190-4a2c8770a91d.png)

イベントハンドラの選択画面が出てくるが、とりあえずこのまま進む。

### コンパイルと実行
以下のコードが表示されるはず。

``` C++:test
//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
```

関数だけが定義されていて、中身は空っぽだ。

コードの説明は後でやるとして、とりあえずコンパイルしてみよう。
メタエディタの上部のＵＩからコンパイルを押してみる。
するとエディタ下部に実行結果がでてくるので、エラーが出てないことを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547532/1b4c62b2-3c2a-453c-c56a-c0cd981e1737.png)

今編集しているソースコードがtest.mq4で、コンパイルしてできたのがtest.exとなる。
MT4のナビゲーターのエキスパートアドバイザを見ると、新しく「test」ができていることがわかる。（もしできてなければ右クリック-> 更新）
このtestをチャートにドラッグ＆ドロップすればEAを適用することができる。
今はコードの中身が空っぽなので何も起きない。

### MQL4をいじる
さて、あとはMQL4にやりたい処理を書いていくことでオリジナルのEAを作ることができる。
以下のサイトなんかが参考になった。（このへん追記するかも）

- https://www.dr-ea.com/meta-blog/metatrader4/auto-trade/system-trade.html
- https://investment-vmoney.com/archives/4835#toc1

## まとめ

機械学習を行いたい場合はPythonのライブラリが必要になるのでMQL4だけではなく外部のAPIか何かをたたく必要がある。
だが、いずれの場合にせよ、EAの入り口と出口はMQLで実装することになるためこれらの知識は必要。
具体的な実装についてはまた今度。