当サイトはアフィリエイト広告を含みます(PR)

MQL4入門|MT4 EAを自作するための基礎知識

MQL4を始めるための最低限の知識
  1. 開発環境はMT4に内蔵。MetaEditorを開くだけですぐにプログラミングを始められる
  2. C言語ベースの構文なので、プログラミング経験があれば習得は早い。未経験でも基礎から学べる
  3. 3つの関数(OnInit・OnTick・OnDeinit)がEAの骨格。これだけ理解すれば簡単なEAは作れる
  4. バックテストとデモ口座で動作を検証してからリアル口座に投入するのが鉄則

自作EAの検証には、XMのデモ口座が便利。リアル運用にはスプレッドの狭いKIWAMI極口座の追加開設がおすすめだ。

MQL4 EAの基本構造 OnInit() — 初期化関数 EAがチャートにセットされたとき1回だけ実行。変数の初期化やインジケーターの準備を行う。 例:移動平均線のハンドル取得、パラメーターの妥当性チェックなど ↓ ティックごとに繰り返し OnTick() — メイン関数(心臓部) 新しいティック(価格変動)が来るたびに実行。売買ロジックのすべてをここに書く。 例:エントリー条件の判定、OrderSend()での注文発注、決済処理など ↓ EA終了時に1回 OnDeinit() — 終了関数 EAがチャートから削除されたとき1回だけ実行。後片付け処理を行う。 例:描画オブジェクトの削除、ログ出力など 開発環境:MetaEditor MT4内蔵。F4キーで起動 テスト:ストラテジーテスター Ctrl+Rで起動。バックテスト実行

MQL4とは?EAを自作するメリット

MQL4はMetaTrader 4(MT4)専用のプログラミング言語だ。この言語を使えば、自分だけのオリジナルEA(自動売買プログラム)を作ることができる。「プログラミング」と聞くと身構える人もいるだろうけど、MQL4はC言語をベースにしたシンプルな構文で、FX取引に特化した関数が最初から用意されているから、ゼロからWebアプリを作るような難しさはない。

自作EAの最大のメリットは「自分のトレードロジックを完全に再現できる」こと。市販のEAや無料EAは他人が作ったロジックだから、中身がわからないブラックボックスになりがちだ。自分で書けば、「なぜそこでエントリーするのか」「なぜそこで決済するのか」がすべて自分の意志。料理で例えれば、出来合いの惣菜を買うのと、自分でレシピから作るのとの違いだ。

開発環境:MetaEditorの使い方

MetaEditorの起動方法

MT4を開いて、キーボードの「F4」キーを押すだけ。これでMetaEditorが起動する。あるいはMT4のメニューから「ツール」→「MetaQuotes言語エディタ」でもOK。MetaEditorはMT4に内蔵されているから、追加でソフトをインストールする必要はない。

新しいEAファイルの作成

MetaEditorのメニューから「ファイル」→「新規作成」→「エキスパートアドバイザ」を選択。ウィザードに従ってEAの名前を入力すると、テンプレートコードが自動生成される。このテンプレートには、EAに最低限必要な関数(OnInit、OnTick、OnDeinit)が既に書かれている。

MQL4の基本構文

変数とデータ型

MQL4で使う主なデータ型をまとめた。

データ型用途
int整数注文チケット番号、バーのインデックスなど
double小数価格、ロット数、スプレッドなど
string文字列通貨ペア名、コメントなど
bool真偽値条件判定の結果(true/false)
datetime日時エントリー時間、決済時間など

EAの3つの主要関数

EAの骨格は3つの関数で構成されている。家に例えるなら、OnInitが「引っ越し」、OnTickが「日々の生活」、OnDeinitが「退去」にあたる。

OnInit():EAがチャートにセットされたときに1回だけ呼ばれる。インジケーターの準備や変数の初期化をここで行う。

OnTick():新しい価格データ(ティック)が届くたびに呼ばれる。EAの心臓部で、売買ロジックのすべてをここに書く。「今買うべきか?」「今決済すべきか?」の判断はすべてこの関数の中で行われる。

OnDeinit():EAがチャートから削除されたときに1回だけ呼ばれる。描画したオブジェクトの削除やログの出力など、後片付けをここで行う。

注文関数:OrderSend()

EAで注文を出すときに使う関数がOrderSend()だ。引数が多くて最初は面食らうけど、慣れれば定型的な書き方になる。

主な引数は、通貨ペア(Symbol())、売買の種類(OP_BUYまたはOP_SELL)、ロット数、価格、スリッページ、ストップロス、テイクプロフィットなど。エラーが返ってきた場合はGetLastError()で原因を特定できる。

OrderSend()のエラー対策
よくあるエラーは「ERR_INVALID_STOPS」(ストップロスやテイクプロフィットの値が不正)と「ERR_NOT_ENOUGH_MONEY」(証拠金不足)。ストップロスは現在価格から最低ストップレベル以上離れた値を設定する必要がある。最低ストップレベルはMarketInfo(Symbol(), MODE_STOPLEVEL)で取得できる。

自作EAをリアルで動かすなら、スプレッドの狭いKIWAMI極口座がおすすめ。追加口座としてすぐに開設できる。

KIWAMI極口座を追加開設する →

簡単なEAのサンプル:移動平均線クロス

MQL4の学習で最初に作られることが多い「移動平均線クロスEA」の考え方を紹介する。短期移動平均線が長期移動平均線を上抜けたら買い、下抜けたら売り——というシンプルなロジックだ。

ロジックの流れ

  1. OnTick()が呼ばれるたびに、短期MAと長期MAの値を取得する
  2. 前回のティックでの短期MA・長期MAの位置関係と比較する
  3. 短期MAが長期MAを下から上に抜けたら(ゴールデンクロス)→ 買い注文を発行
  4. 短期MAが長期MAを上から下に抜けたら(デッドクロス)→ 売り注文を発行
  5. 既にポジションがある場合は、反対シグナルで決済してからドテンする

iMA()関数を使えば、移動平均線の値は1行で取得できる。引数に通貨ペア、時間足、期間、シフト、MA種別、適用価格を指定するだけだ。

実際のコーディングのヒント

クロスの検出には「1本前のバーでの位置関係」と「現在のバーでの位置関係」を比較する方法が一般的。具体的には、iMA()の第5引数(shift)に1を指定して1本前の値を取得し、shiftに0を指定して現在の値を取得する。1本前では短期MAが長期MAの下にあり、現在は上にある——これがゴールデンクロスだ。

移動平均線クロスEAの最小コード

言葉で説明するだけでは掴みにくいので、実際に動く最小構成のコードを掲載する。MetaEditorにコピペしてコンパイルすれば、そのままストラテジーテスターで動作確認できる。

//+------------------------------------------------------------------+
//| 移動平均線クロスEA(最小構成)                                    |
//+------------------------------------------------------------------+

// OnInit() — EA起動時に1回だけ呼ばれる初期化関数
int OnInit() { return INIT_SUCCEEDED; } // 特別な初期化処理がなければ成功を返すだけでOK

// OnTick() — 新しい価格データが届くたびに呼ばれるメイン関数
void OnTick()
{
   // 短期移動平均線(期間10)の現在値を取得
   double maFast = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 0);
   // 短期移動平均線の1本前の値を取得(クロス判定用)
   double maFast1 = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
   // 長期移動平均線(期間25)の現在値を取得
   double maSlow = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, 0);
   // 長期移動平均線の1本前の値を取得(クロス判定用)
   double maSlow1 = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, 1);

   // ゴールデンクロス検出:現在は短期MAが上、1本前は短期MAが下 → 買いエントリー
   // OrdersTotal()==0 で既存ポジションがないときだけ注文する
   if(maFast > maSlow && maFast1 <= maSlow1 && OrdersTotal() == 0)
      OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0, "MA Cross", 0, 0, clrBlue);
      // Symbol()=現在の通貨ペア, OP_BUY=買い, 0.01=ロット数, Ask=買値,
      // 3=許容スリッページ, 0=SL無し, 0=TP無し, "MA Cross"=コメント

   // デッドクロス検出:現在は短期MAが下、1本前は短期MAが上 → 売りエントリー
   if(maFast < maSlow && maFast1 >= maSlow1 && OrdersTotal() == 0)
      OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, 0, 0, "MA Cross", 0, 0, clrRed);
      // Bid=売値を使用。売り注文はBid価格で発注する
}

このコードの限界

上記は学習用の最小構成であり、実運用にはそのまま使えない。主な限界をまとめた。

これらの機能を一つずつ追加していくのが、MQL4学習の次のステップだ。まずはこのコードを動かしてみて、ストラテジーテスターのビジュアルモードで売買の様子を眺めてみよう。

デバッグとテストの方法

Print()関数でログ出力

MQL4のデバッグでもっとも基本的な方法がPrint()関数だ。変数の値やロジックの通過状況をMT4のエキスパートタブに出力できる。たとえばPrint("短期MA = ", shortMA, " 長期MA = ", longMA)と書けば、ティックごとの移動平均値を確認できる。プログラミングの世界では「printf デバッグ」と呼ばれる古典的だけど確実な方法だ。

ストラテジーテスターでの動作確認

MetaEditorでコンパイルが通ったら、MT4のストラテジーテスターでバックテストを実行する。「ビジュアルモード」にチェックを入れると、チャート上でEAの売買が視覚的に確認できるから、ロジックが意図通りに動いているかを目で追える。スピードの調整バーもあるから、ゆっくり1トレードずつ確認することも、高速で全体像を把握することもできる。

よくあるコンパイルエラーと対処法

初心者がよくハマるコンパイルエラーを挙げておく。

MQL4学習のロードマップ

MQL4を学ぶ順番としては、以下のステップがおすすめだ。

  1. 基本構文(変数・条件分岐・ループ)を理解する
  2. 3つの主要関数(OnInit/OnTick/OnDeinit)の役割を把握する
  3. 移動平均線クロスEAを自分で書いてみる
  4. ストラテジーテスターでバックテストして結果を確認する
  5. ストップロスやテイクプロフィットの機能を追加する
  6. インジケーター(RSI、MACD、ボリンジャーバンドなど)を組み合わせた複合ロジックに挑戦する
  7. 資金管理ロジック(ロットサイズの自動計算など)を実装する

焦る必要はまったくない。最初のEAが動くまでには数日〜数週間かかるのが普通だ。大事なのは「小さく作って、テストして、改善する」のサイクルを回すこと。いきなり完璧なEAを目指すと挫折するから、まずは「移動平均線クロスで売買するだけ」のシンプルなEAを完成させよう。

MQL5との違い
MT5用のプログラミング言語MQL5は、MQL4よりもオブジェクト指向が強化されており、文法もやや異なる。ただしMQL4で基礎を学んでおけば、MQL5への移行は比較的スムーズ。まずはMT4ユーザーが多い現状を考慮して、MQL4から始めるのが実用的だろう。
✓ 編集部検証済み

FX Rescue編集部では、2026年4月にXMのMT4環境(MetaEditor)で移動平均線クロスEAを実際にコーディング・コンパイル・バックテストまで検証。MetaEditorでの開発からストラテジーテスターでの動作確認まで、初心者でも再現可能な手順であることを確認済み。

よくある質問

Q. MQL4はプログラミング未経験でも学べる?
学べます。FX専用の関数が用意されているので、汎用言語よりもとっつきやすい面もあります。
Q. EAを自作するのにどのくらい時間がかかる?
シンプルなEAなら経験者で数時間、未経験者で1〜2週間程度。複雑なものは数ヶ月かかることもあります。
Q. MetaEditorは無料?
はい、MT4内蔵の無料開発環境です。追加費用は不要で、F4キーで起動します。
Q. MQL4とMQL5、どちらを学ぶべき?
MT4ユーザーが多いのでMQL4から始めるのが実用的。MQL4の基礎があればMQL5への移行もスムーズです。
Q. 自作EAをXMで使えるようにするには?
MetaEditorでコンパイル後、MT4を再起動してチャートにドラッグ&ドロップするだけで使えます。

出典・参考

自作EAの本番環境を整えよう

自作EAの検証にはデモ口座、本番運用にはKIWAMI極口座が最適。XMなら追加口座も簡単に作れる。

XMで口座を追加開設する
※ 当サイトのリンクにはアフィリエイト広告が含まれます

リスクに関する注意事項

FXは元本保証のない金融商品です。相場の変動により投資元本を割り込むことがあります。XMTrading(Tradexfin Limited)は日本の金融庁に登録されていない海外の金融サービス提供者であり、日本の投資者保護基金の対象外です。海外FX業者の利用は自己責任で行ってください。本記事は情報提供を目的としたものであり、特定の金融商品の売買を推奨するものではありません。