EA開発をしている方の中でも、MT4からMT5への移行を考えている人は多いと思います。海外では完全にMT5が主流であり、それに加えて最近は MT5 しか扱っていない FXブローカーも増えてきています。
実際 MQL4 に比べて MQL5 ははるかに高スペックで、できることの範囲も圧倒的に広いです。
しかしながら、基本的にはこれらの言語には互換性がないので、戸惑っている人も多いのではないでしょうか?
この記事では、MQL4からMQL5への移行に必要な内容がすべて理解できる
元は私も「MQL4 ユーザー」でしたので、MQL5 を取得しようとしたときには結構苦労しました。
ですのでこのページでは、
当時の私と同じような悩みを持った人が、スムーズにMQL5に移行できるように、
・どの順番で学習していけばいいのか
を丁寧にまとめました。
実際、この記事は「当時これを知ってたらMQL5 でだいぶ近道できたのになー」と思うような内容になっています。
理解するべき内容とその順番とは?
まず結果から言います。
MQL4 と MQL5 は実は共通点も多いので、MQL4 を理解している人からすると、学習するべき内容がめちゃくちゃ多いわけではありません。
② 学習するべき内容1:「構造体」の使い方を理解する
③ 学習するべき内容2:「価格データを取得する方法」を学習する
④ 学習するべき内容3:「インジケーターの値」の取得方法を理解する
⑤ 学習するべき内容4:「オーダー・ディール・ポジションの違い」を理解する
⑥ 学習するべき内容5:「OrderSend() 関数によるトレード送信の方法」を学習する
⑦ 学習するべき内容6:「オーダー・ディール・ポジションに関する情報を取得する方法」を学習する
それぞれ解説します。
大前提:「MQL4 と MQL5 の違い」の「おおまかな全体像」を理解する
MQL4はCをベースにしていて、MQL5 はC++ をベースにしているので、基本的な文法などはあまり変わりません。実際に、MQL4 とほとんど変わらない部分も結構あります。
しかしながらMT4 と MT5 には知らないと絶対に困る「決定的な違い」がいくつかあるので、
まずはこれをサクッと理解することが大切です。
正直これは全然難しくないです。ただ、根本的に仕様が異なる点があるので、これを前提として理解していないと後々困ることになると思います。
MT4 と MT5 の「決定的な違い」については以下のページにわかりやすくまとめてるので、サクッと読んで理解してみてください。すぐ読み終わると思います。
⇒ 【プログラマー目線】MT4 と MT5 の決定的な違いとは? | MQL5入門
学習するべき内容1:「構造体」の使い方を理解する
MQL4 と MQL5 の大まかな違いが分かったら、
それらのうち複雑なものに関しては詳細を理解する必要があります。
まずは「構造体」です。
MQL5 ではあらゆる場面で構造体を使う必要があるので、MQL5 における使い方を理解しなければなりません。
またMQL5 側で「予め定義済みの構造体」というものがいくつかあるので、それらの使用方法に関しては勉強が必須です。
MQL5の構造体に関してまとめた記事があるので、こちらに貼っておきます ⇒ 【MQL5】 わかりにくい “構造体” の使い方を一気に解説!
学習するべき内容2:「価格データを取得する方法」を学習する
MQL4 と MQL5 では「価格情報」の取得方法が全然違います。
MQL5 では MQL4 のようにあらかじめ Open[], High[], Low[], Close[] は定義されていません。
自分で用意する必要があるのです。
価格に関する情報は「ローソク足のデータ(始値・高値・安値・終値の四本値)」と「ティックデータ」があります。
それぞれ分けて説明します。
ローソク足の情報の場合
MQL5 では Open[], High[], Low[], Close[] などの “ローソク足のデータが入っている配列” は予め用意されていないので、
自分で用意する必要があります。
その時使うのが CopyRates() 関数です。
CopyRates() 関数には 3通りの使い方があり、初見ではわかりにくいのでしっかりと理解するようにしましょう。
以下の記事にて、CopyRates() 関数の3通りの使い方を、全て(例なども含めて)わかりやすく解説しました。
⇒ [MQL5] CopyRates() でローソク足の情報を取得する方法!
ティックデータの場合
SymbolInfoTick() 関数を使います。
正直使い方は難しくありません。
「MQL5 における構造体」について解説した下記の記事内で簡単に説明しています。
⇒ 【MQL5入門】 わかりにくい “構造体” の使い方を一気に解説!
学習するべき内容3:「インジケーターの値」の取得方法を理解する
MQL4 では iMA() などの関数から直接、値を得ることができました。
MQL5 では直接 値を得ることはできず、「インディケータの値を得る」には、‘ handle値 ‘ を経由する必要があります。
これが大きな違いで、最初は戸惑うと思います。
その「’ handle値 ‘ を経由する」際に必要となるのが、CopyBuffer() 関数になります。
※ こちらの記事において、CopyBuffer() 関数の使い方を丁寧に説明しています ⇒ 【MQL5】CopyBuffer()でインジケーターの値を取得する方法!
学習するべき内容4:「オーダー・ディール・ポジションの違い」を理解する
MQL4 の「オーダー」は、
MQL5 では「オーダー」「ディール」「ポジション」の3つに厳密に分類されています。
これらの定義を理解することは、 MQL5 においてトレード操作を行う上で必須ですので、まずはこれらの違いを理解しましょう。
(※ こちらの記事を読めばすぐに理解していただけると思います ⇒ MQL5オーダー・ディール・ポジションの厳密な分類とは? )
学習するべき内容5:「OrderSend() 関数によるトレード送信の方法」を学習する
MQL5 では、トレード操作はすべて1つの関数で行います。
OrderSend() 関数です。
- 使い方が非常に複雑
- 17個もの引数があり、それらの設定は厳密に行う必要がある
ため理解のハードルが高いといえます。
これに関しては非常に詳しく解説した記事があります ⇒ MQL5の OrderSend() 関数の使い方を完璧に解説!
「起きがちな重大なミス」やその対策方法などにも触れているのでボリューミーな内容になっています。必要な部分ピックアップして他は読み飛ばす、というような使い方が良いかもしれません。
学習するべき内容6:「オーダー・ディール・ポジションに関する情報を取得する方法」を学習する
トレードに関する関数は OrderSend() 以外にも大量にあります。
実はこんなにあります。↓
( OrdersTotal HistoryDealsTotal HistoryOrdersTotal HistoryOrderGetTicket PositionGetTicket OrderGetTicket HistoryDealGetTicket
OrderSelect PositionSelect PositionSelectByTicket HistorySelect HistorySelectByPosition HistoryDealSelect HistoryOrderSelect PositionGetSymbol PositionGetDouble PositionGetInteger PositionGetString OrderGetDouble OrderGetInteger OrderGetString HistoryOrderGetDouble HistoryOrderGetInteger HistoryOrderGetString HistoryDealGetDouble HistoryDealGetInteger HistoryDealGetString )
これらの関数は、オーダー・ディール・ポジションに関する情報を取得するために使います。
MQL5 で EA を作る際には、オーダー・ディール・ポジションに関する情報 を取得する方法を知ることは不可欠なので理解する必要があります。
しかし、この多数の関数を 個別に理解しようとしても正直無理 があります。
重要なのは、これらの関数とどのように組み合わせて、どの順番で使うか という部分です。
※ こちらの記事にて、その全体像をわかりやすく解説しました ⇒ [MQL5] 28個のトレード系関数の使い方を一気に解説!
これを読めば、どういう状況で、どの関数を使うのかがすぐにわかります。
まとめ
MQL4 から MQL5 への移行は一見ハードルが高いですが、学習するべき内容を明確にし、それらを順番に行っていけばそんなに難しくありません。
この記事では「学習するべき内容」と「それらの順番」を明確にしたので、ぜひMQL5の公式サイト、あるいはこのサイトの他の記事を参考にして学習してみてください。
MQL5 に慣れるとその快適さにやみつきになってしまうと思います。