MQL5 EA開発入門|MQL4との違いとCTradeクラスの使い方を開発元が解説

※免責事項
本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。FX取引にはリスクが伴い、投資元本を失う可能性があります。投資判断はご自身の責任において行ってください。

MQL5 EA開発入門 (MQL4 との違い徹底解説)を、当社 EA CreatorsLAB が開発元として総合解説します。MT4 で長年使われてきた MQL4 に対し、MT5 と一緒に登場した MQL5 は「オブジェクト指向対応 / CTrade クラス / マルチスレッドテスター / ヘッジネッティング選択 / インジケータのハンドル方式」など EA 開発を効率化する多数の改良を備えています。本記事では MQL4 と MQL5 の主要な差分、MQL5 の基本構造、ポジション管理モデルの変更点、移行手順、当社EAでの選定理由まで網羅。本記事は教育コンテンツで、ツール選定の最終判断は自己責任です。

▦ この記事の結論
  • MQL5 はOOP 完全対応 + CTrade クラス + マルチスレッドテスター が3大改良。
  • ポジション管理はヘッジ / ネッティング 選択可 (MQL4 はヘッジ固定)。
  • インジケータはハンドル方式 でメモリ効率と速度が向上。
  • 時間足は9種類 → 21種類 に拡張、2分足や8時間足も使える。
  • サードパーティEA市場と業者対応はMQL4 が依然優位
  • 移行は完全書き直しが基本、機械的な互換変換は不可能。
  • 当社販売3 EA はすべて MT4専用 (MQL4)。MQL5 への移植は個別対応の検討段階。
  • 過去実績は将来を保証しません。
目次

MQL5は何が違うのか (大問い)

MQL5 が MQL4 と決定的に違うのは「設計思想の世代差」。MQL4 が「FX に特化した簡易プログラミング言語」だったのに対し、MQL5 は「C++ ライクな本格的開発言語」として再設計されました。クラス・継承・インターフェース・関数オーバーロードといった現代的なOOP 機能をフル装備しています。

MQL4 はグローバル変数や関数の羅列になりがちで、数千行規模になると保守性が崩壊する課題がありました。MQL5 ではクラスを基本単位として設計でき、複数EA で共通する処理 (注文管理 / リスク計算 / ロギング) を再利用可能な部品として整理できます。新規 EA を1から書く場合は MQL5 のほうが長期保守性で優位、というのが定説です。

ただし MQL4 にも依然優位があり、EA開発環境構築ガイド でも触れたとおり、サードパーティEA市場の厚さ、業者対応の幅、コミュニティで蓄積された情報量は MQL4 が現状でも一歩リード。これから学ぶ初心者は MQL4 から入って、必要に応じて MQL5 に拡張するのが効率的です。

「設計思想の世代差」とは何を意味するか

MQL4とMQL5の違いを「設計思想の世代差」と表現しましたが、これは具体的にはコードの「整理のしやすさ」の差です。MQL4は手軽に書ける反面、規模が大きくなると同じような処理があちこちに散らばり、修正のたびに全体を見直す羽目になります。一方MQL5は、注文管理やリスク計算を部品(クラス)としてまとめ、必要な場所で呼び出す書き方ができます。

これは、料理に例えると「毎回ゼロから作る」か「作り置きの部品を組み合わせる」かの違いに近いものです。小規模なら手作りで十分でも、規模が大きくなるほど部品化の恩恵が効いてきます。1本だけの小さなEAなら世代差をほとんど感じませんが、複数EAで共通処理を使い回す段階になると、MQL5の整理しやすさが保守の負担を大きく減らします。自分が将来どの規模を目指すかが、言語選びの一つの目安になります。

「新しい=自分に必要」とは限らない

MQL5が技術的に新しいと聞くと、「これから学ぶなら当然MQL5だろう」と考えがちです。しかし「新しさ」と「自分にとっての必要性」は別の話です。MQL5のオブジェクト指向や高速テスターは、大規模なEAや複数通貨ポートフォリオを組むときに真価を発揮しますが、シンプルな単一通貨のEAを作るだけなら、その恩恵を感じる場面は多くありません。

むしろ初心者にとっては、情報量とサンプルの豊富なMQL4のほうが、つまずいたときに解決策を見つけやすいという実利があります。自分が作りたいEAの規模と、運用したいブローカー環境から逆算して言語を選ぶのが現実的です。「最新だから」という理由だけで飛びつくのではなく、目的に対してどちらが適しているかで判断してください。技術の世代が新しいことと、あなたの学習効率が上がることは、いつも一致するとは限らないのです。

MQL4 vs MQL5 主要な違い

MQL4 と MQL5 の主要な差分は6項目。新規開発か互換性かで選び方が変わります。

項目MQL4MQL5
OOP対応部分的 (クラスは使えるが制約多い)完全対応 (継承・多態性・インターフェース)
注文管理OrderSend() の直接呼び出しCTrade クラスで抽象化
ヘッジ標準対応 (常にヘッジ)ヘッジ / ネッティング選択可
テスターシングルスレッドマルチスレッド (最大100倍速)
インジケータiMA() で直接値取得ハンドル方式 (メモリ効率◎)
時間足9種類21種類 (2分足・8時間足も)

MQL5 EAの基本構造 (CTrade クラス)

MQL5 EA は「OnInit / OnDeinit / OnTick」の3イベントハンドラ + CTrade クラス の構成。MQL4 と同じ枠組みですが、内部 API 呼び出しが大きく異なります。

// MQL5 EA基本構造
#include <Trade/Trade.mqh>
CTrade trade;

int OnInit() {
  trade.SetExpertMagicNumber(123456);
  trade.SetDeviationInPoints(10); // 許容スリッページ
  return(INIT_SUCCEEDED);
}

void OnTick() {
  double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
  double sl = ask – 100 * _Point;
  double tp = ask + 200 * _Point;
  if(trade.Buy(0.1, _Symbol, ask, sl, tp, “MQL5 Test”)) {
    Print(“注文成功: “, trade.ResultOrder());
  } else {
    Print(“エラー: “, trade.ResultRetcodeDescription());
  }
}
  • 特徴①: CTrade クラスで注文が直感的なメソッド呼び出しに (Buy / Sell / PositionClose)
  • 特徴②: エラーは ResultRetcode() と ResultRetcodeDescription() でシンプル取得
  • 特徴③: MagicNumber や Deviation は OnInit で1度設定 (毎回引数渡しが不要)
  • 注意: SymbolInfoDouble など、価格取得関数は MQL4 と全く違う名前

MQL4 で使い慣れた `Ask` `Bid` `Point` などのグローバル変数は、MQL5 ではSymbolInfoDouble / _Point などの関数や変数に置き換える必要があります。これが移植時の最大の手間。MAクロスEA (MQL4)RSI逆張りEA (MQL4) のロジックを MQL5 に移植する場合、API 呼び出しはほぼ全て書き換えになります。

CTradeクラスが初心者の負担を減らす

MQL4では注文を出すたびにOrderSend()へ多くの引数を渡し、エラー処理も自前で書く必要がありました。MQL5のCTradeクラスは、この煩雑さを大きく肩代わりしてくれます。`trade.Buy(0.1, …)`のように直感的なメソッドで注文でき、マジックナンバーや許容スリッページは最初に一度設定すれば使い回せます。

これは、車の運転に例えるとマニュアル車とオートマ車の違いに近いものです。細かい操作を仕組みが代行してくれる分、ロジックそのものの組み立てに集中できます。一方で、内部で何が起きているかが見えにくくなる面もあるため、エラーが出たときはResultRetcodeDescription()で原因を確認する習慣が大切です。便利な抽象化を活かしつつ、その下で何が動いているかも意識できると、トラブル時の対応力が一段上がります。

ポジション管理モデルの違い (ヘッジ / ネッティング)

MQL5 はポジション管理を「ヘッジ (Hedging) / ネッティング (Netting)」から選べるのが特徴。日本居住者向けFXは大半がヘッジ口座ですが、海外CFD やコモディティではネッティングが標準。

モデル複数ポジ両建て用途
ヘッジ日本FX標準・ナンピン系
ネッティング1銘柄1ポジ不可海外CFD・コモディティ

当社のMulti-AUD Core のようなナンピン系EA は同銘柄に複数ポジションを持つ前提なので、ヘッジモデル必須。日本居住者向けFXブローカーで動かす限り、自動的にヘッジ口座になります。MQL5 でもネッティング/ヘッジを選択するときは口座種別との整合性を確認してください。

インジケータのハンドル方式

MQL5 のインジケータは「ハンドルで一度生成→値は CopyBuffer で取得」の2段階方式。MQL4 の `iMA()` を毎ティック呼び出す方式から大きく変わりました。メモリ効率と速度が大幅に改善されています。

int handle_ma;

int OnInit() {
  // MA ハンドルを1度だけ取得 (毎ティック呼ばない)
  handle_ma = iMA(_Symbol, _Period, 20, 0, MODE_SMA, PRICE_CLOSE);
  return(INIT_SUCCEEDED);
}

void OnTick() {
  double ma_buf[];
  CopyBuffer(handle_ma, 0, 0, 3, ma_buf);
  Print(“MA[1]: “, ma_buf[1]);
}
関数MQL4MQL5
MAiMA() で即値取得iMA() でハンドル→CopyBuffer
RSIiRSI() で即値取得iRSI() でハンドル→CopyBuffer
ATRiATR() で即値取得iATR() でハンドル→CopyBuffer
ADXiADX() で即値取得iADX() でハンドル→CopyBuffer

注意点は「ハンドルを OnInit で取得し、CopyBuffer は OnTick 内」の役割分担。これを逆にすると毎ティック新ハンドルを取得してしまい、MQL4 より遅くなります。MQL4 経験者がハマる罠No.1 と言われる箇所です。

ハンドル方式に最初は戸惑うが理にかなっている

MQL4ではiMA()を呼べばその場で移動平均の値が返ってきましたが、MQL5ではまず「ハンドル(指標への参照)」を取得し、そこから値をコピーする2段階方式になります。MQL4経験者ほど「面倒になった」と感じる部分ですが、これにはメモリ効率という合理的な理由があります。

ハンドルは指標の計算を一度だけ準備し、以降は必要なぶんだけ値を取り出す仕組みです。毎ティックで指標を再計算する無駄を省けるため、複数の指標や通貨を扱う大規模なEAほど恩恵が大きくなります。最初はOnInitでハンドルを取得し、OnTickでCopyBuffer()を使って値を読む、という型を覚えてしまえば難しくありません。戸惑いは最初だけで、慣れれば自然に書けるようになります。

MQL5 マルチスレッドテスターの威力

MQL5 のストラテジーテスターはマルチスレッド対応で MQL4 比最大100倍速。最適化計算で特に威力を発揮します。

機能MT4MT5
CPU 利用1コアのみ全コア + クラウド分散
最適化アルゴリズム総当たり / 遺伝的総当たり / 遺伝的 / 高速
マルチ通貨検証不可
クラウドテスト不可MQL5 クラウドで分散実行

大規模パラメータ最適化を頻繁に行う開発者には MQL5 のメリットが大きい。ただしEA最適化の正しいやり方 で解説したとおり、最適化速度が上がっても過剰最適化リスクは変わりません。むしろ大量試行が容易になる分、ロバストネス検証 (WF / 近傍5点平均) がより重要になります。

高速テスターは「正しく使えば」武器になる

MQL5のマルチスレッドテスターは、CPUのコアを並列に使って最適化を大幅に高速化します。MQL4で何時間もかかっていたパラメータ最適化が、数分で終わることもあります。これは開発のスピードを上げる強力な武器です。ただし、速く回せることと、良いEAができることは別問題だと肝に銘じてください。

高速だからといって、闇雲に膨大なパラメータの組み合わせを試すと、過去データに過剰に適合した「見せかけの優秀なEA」が量産されてしまいます。速さは、ウォークフォワード分析のような正しい検証を何度も回すために使ってこそ価値があります。ツールの速さに振り回されず、検証の質を保つ意識が、結局は実戦で勝てるEAにつながります。

MQL4 から MQL5 への移行手順

MQL4 → MQL5 の移行は「完全書き直しが基本」。機械的な互換変換は不可能で、ロジックを残しつつ API を全面的に置き換える作業になります。

Step作業所要
1CTrade クラスで注文管理を再設計数時間
2価格取得を SymbolInfoDouble に置換数時間
3インジケータをハンドル方式に書き直し半日
4バックテスト+ロバストネス検証数日
5フォワード3ヶ月以上で MQL4 版と比較3ヶ月

移行コストは数日〜数週間。同じロジックでも MQL4 と MQL5 で完全に同一の動作にはならないため、移行後はフォワードテスト3ヶ月以上で挙動差を確認するのが原則です。自力での移行が難しい場合は 制作サービス で当社が代行可能。詳細は EA制作の外注フロー

移行は「全書き換え」と割り切る

MQL4のEAをMQL5へ移すとき、多くの人が「一部だけ直せば動くだろう」と期待しますが、現実にはAPI呼び出しのほぼ全てが書き換え対象です。価格取得、注文発注、指標参照、いずれも関数名と書き方が変わるため、部分修正でつなぎ合わせようとするとかえって混乱します。

むしろ最初から「ロジック(考え方)だけを引き継ぎ、コードはMQL5で新規に書き直す」と割り切るほうが、結果的に早く正確に仕上がります。移植ではなく再実装と捉えるのが現実的な姿勢です。自分でやるのが大変だと感じる場合は、当社の制作サービスでMQL4→MQL5の書き直しを承ることもできます。ロジックの意図さえ明確なら、形にするのは専門家に任せるという選択も合理的です。

MQL5 学習で初心者が陥る失敗5パターン

MQL5 学習でハマる典型的な失敗は5パターン。事前に把握すれば回避できます。

  • MQL4 の `Ask` `Bid` `Point` を MQL5 でそのまま使おうとしてエラー
  • インジケータハンドルを OnTick 内で取得し続けて速度悪化
  • ネッティング口座でナンピン系を動かそうとして両建て不可で破綻
  • マルチスレッド最適化で過剰試行 → 過剰最適化EA を量産
  • サードパーティEA を MQL5 で探して見つからず時間ロス

特に⑤は要注意。市販EA の選択肢は MQL4 が圧倒的に多いため、EA を購入したい人には MQL4 環境が現実的。MQL5 は新規開発で「将来性とコード保守性を重視したい開発者向け」のプラットフォームです。詳細は 戦略タイプ別EAガイド の戦略選定基準も併読してください。

5つの失敗に共通する「MQL4の感覚の引きずり」

5つの失敗を見渡すと、その多くが「MQL4の書き方や感覚をそのままMQL5に持ち込もうとする」ことに起因しています。グローバル変数の感覚、毎回計算する感覚、常にヘッジできる前提。これらはMQL4では正しくても、MQL5では通用しないか、非効率になります。

逆に言えば、「MQL5は別の言語だ」と最初に頭を切り替えるだけで、これらの失敗の大半は避けられます。経験者ほど過去の習慣が邪魔をしやすいので、移行時はあえて初心に戻り、MQL5の流儀(ハンドル方式・CTrade・口座タイプの確認)を素直に学ぶ姿勢が近道です。慣れた道具を手放すのは抵抗があるものですが、新しい道具には新しい使い方があると割り切ることが、習得を早めます。

MQL5 EA開発についてよくある質問

MQL5 は MQL4 を完全に置き換えるのか?
短期的にはNo。MetaQuotes は MT4 のサポートを段階的に縮小していますが、サードパーティEA市場の厚さと業者対応で MT4 / MQL4 は今後5-10年は現役で運用可能です。長期的には MQL5 に移行が進む見込み。
MQL4 から学んで MQL5 に移れますか?
移れます。基本構文 (if / for / 配列) は共通、ロジック思考も同じ。API 呼び出しの違いを覚えれば 2-4 週間で MQL5 に移行可能。OOP の本格活用は半年以上の経験が必要。
CTrade クラスは必須?
必須ではないが強く推奨。生の OrderSend に相当する MQL5 の `MqlTradeRequest` 構造体は冗長で、CTrade のメソッド呼び出しで書くほうがバグも少なく可読性も高い。
ヘッジ口座とネッティング口座どちらを選ぶ?
日本居住者向けFXはヘッジ口座のみ。海外CFD/コモディティ取引でネッティング選択の余地あり。当社の Multi-AUD Core のようなナンピン系はヘッジ必須。
MQL5 のクラウドテストは安全?
公開EAコードは盗まれるリスク。クラウドテスト時に MQL5 サーバーに EA がアップロードされるため、商用EA や独自ロジックは自前マシンでテストするのが安全。
インジケータハンドルの落とし穴は?
OnTick 内でハンドル取得を続けるのが No.1 のミス。OnInit で1度だけ取得し、OnTick では CopyBuffer のみ呼び出すのが正解。速度が10倍以上違います。
過剰最適化のリスクは MQL5 で高まる?
むしろ高まります。マルチスレッド最適化で大量試行が容易になる分、偶然の最適解が出やすい。ウォークフォワード分析の併用が必須です (EA最適化ガイド)。
サードパーティEA は MQL5 で何本ある?
MQL5市場 (MetaQuotes 公式) で数千本。ただし MQL4 市場は数万本〜の規模で、選択肢の幅では依然 MQL4 優位。
当社EAはなぜ MQL5 対応していない?
運用ユーザー層が MT4 が圧倒的に多いため。MQL5 移植は個別需要を確認しながら検討中。要望は 制作サービス から個別にお寄せください。
MQL5 学習に最適なリソースは?
MQL5公式ドキュメント (日本語あり) + MQL5市場のサンプルコード。本記事の CTrade コードを起点に、当社の MAクロスEARSI逆張りEAブレイクアウトEA のロジックを MQL5 に移植するのが効率的な学習。
MQL5 への移植を依頼できますか?
可能。当社の制作サービス (ココナラ¥20,000〜) で既存 MQL4 EA の MQL5 移植にも対応。CTrade クラスとハンドル方式をベストプラクティスに沿って書き直します。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次