EAを作りたい
FXを自動売買できるツールをEA(Expert Adviser)という。
良いEAを作れば利益を出すことができるし、EAを売って儲けることもできる。
機械学習とかを使えば高性能なEAを作り出すことも可能なのではと思い調べてみた。
Pythonと機械学習
機械学習といえばライブラリが充実しているPythonが使われることが多い。
手前味噌ではあるが、以前Pythonで決定木を利用したFX予測をする記事を書いた。
あくまでこれは練習用に決定木を使ってみただけなので、LightGBMやらLSTMやらを使って本気でやればもっと精度は上がると思う。
また、国内のFX業者で言えばoandaが外部APIを公開しているため、これを叩けばPythonのスクリプトから売買を行うこともできる。
これも以前記事を書いた。
MT4とMQL4
一方で、このままEAとして売り物になるかと言えば答えばNOだ。
なぜかと言うと、上であげたスクリプトではPythonを動かして外部APIを叩くという少々高度なやり方で売買を行なっているためだ。
EAとして売るためにはプログラミングに詳しくない一般的なユーザでも使えるようなEAを作る必要がある。
現在FXの取引に最も使われいてるのがMT4 (Meta Trader 4)だ。
様々な時間足やテクニカル指標を表示できるほか、EAを組み込むこともできる。
そしてこのMT4のEAとして組み込むにはMQL4と呼ばれるC++をベースにした言語を書く必要がある。
なお、MT4より新しい(そして高性能な)MT5が出ており、こちらを使うの場合はMQL5という言語を使う必要がある。
MQL5はMQL4と微妙に言語使用が違ったりするので注意が必要だが、現在MT4でEAを使うユーザの方が多いためここではMQL4でEAを作ることを目指す。
環境
- OS: Windows 10
- 本当はLinuxかMacを使いたかったが、MT4でEAを使う場合Windowsが一般的なのでしょうがなく使う
- PCにMT4がインストール済、口座にログイン済を想定
- 練習用の場合はデモ口座が安全
- 口座はどこでもいいのだけど、自分はXMという海外口座で試した
MT4のインストール及び口座へのログイン手順は調べてば出てくるので省略。
やってみる
参考にしたサイト
EAの新規作成
MT4の起動後、「ツール」から「新規作成」を選ぶ。
エキスパートアドバイザ(テンプレート)を押す。
EAの名前はExperts\
の後につける。ここでは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()
{
//---
}
//+------------------------------------------------------------------+
関数だけが定義されていて、中身は空っぽだ。
コードの説明は後でやるとして、とりあえずコンパイルしてみよう。
メタエディタの上部のUIからコンパイルを押してみる。
するとエディタ下部に実行結果がでてくるので、エラーが出てないことを確認する。
今編集しているソースコードが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で実装することになるためこれらの知識は必要。
具体的な実装についてはまた今度。