FXの自動売買プログラム(EA)は、市販のものを買うだけでなく、自分で作ることもできます。MT4(MetaTrader 4)には「MetaEditor」というプログラム作成ツールが標準で付属しており、MQL4という専用の言語を使ってEAを書くことができます。追加のソフトを購入する必要はありません。
とはいえ、プログラミングの経験がない方にとっては、どこから手をつければよいのか分かりにくいのも事実です。この記事では、MetaEditorの開き方からEAの基本構造、売買ロジックの書き方、つまずきやすいポイントまでを、順を追って解説します。いきなり複雑なものを作ろうとせず、動く最小限のものから積み上げていく進め方をおすすめします。

EAとMQL4の基礎知識
EA(エキスパートアドバイザ)とは
EAとは、MT4上で動作する自動売買プログラムのことです。あらかじめ決めたルールに従って、新規注文の発注、損切り・利確の設定、決済までを自動で行います。人の判断が入らないため、決めたルールがそのまま執行されるという特徴があります。
MQL4とは
MQL4(MetaQuotes Language 4)は、MT4向けのプログラムを書くための言語です。C言語をベースにした文法を持ち、変数、条件分岐、繰り返し処理といった基本的な考え方は一般的なプログラミング言語と共通しています。言語仕様と関数の一覧はMQL4の公式リファレンスで公開されています。
MQL4で作れるものはEAだけではありません。次のような種類があります。
| 種類 | 役割 |
|---|---|
| エキスパートアドバイザ(EA) | 自動売買を行うプログラム |
| カスタムインジケーター | チャート上に指標を描画する |
| スクリプト | 一度だけ実行される処理(一括決済など) |
| ライブラリ | 複数のプログラムで使い回す関数群 |
公式リファレンスは関数を調べるには便利ですが、文法を順番に学ぶには不向きな面もあります。MT4のプログラミングを解説した本を1冊手元に置いておくと、基礎から順を追って確認できます。
EAを作る準備
MT4とMetaEditorを用意する
MT4は、開発元であるMetaQuotes社のプラットフォームで、対応するFX業者を通じて配布されています。EAの開発と検証だけであればデモ口座で十分です。MT4を起動したら、ツールバーのMetaEditorのアイコンをクリックするか、キーボードのF4を押すとMetaEditorが開きます。
ファイルの置き場所を把握する
MT4のメニューから「ファイル」→「データフォルダを開く」を選ぶと、MT4が実際に使っているフォルダが開きます。この中の「MQL4」フォルダに、種類ごとの保存先があります。
- MQL4/Experts:EAのソースコードとコンパイル済みファイル
- MQL4/Indicators:カスタムインジケーター
- MQL4/Scripts:スクリプト
- MQL4/Include:外部から読み込むファイル
- MQL4/Files:EAが読み書きするデータファイル
MetaEditorで保存すると自動的に適切なフォルダに配置されるため、慣れないうちは手動でファイルを移動する必要はありません。
EAの基本構造を理解する
MQL4のEAは、決まったタイミングで自動的に呼び出される関数を中心に構成されています。まずはこの3つを押さえてください。
| 関数 | 呼び出されるタイミング | 主な用途 |
|---|---|---|
| OnInit() | EAがチャートに適用されたとき(1回) | 初期設定、パラメーターの検査 |
| OnTick() | 新しい価格(ティック)が届くたび | 売買判断と発注処理 |
| OnDeinit() | EAが取り外されたとき(1回) | 後片付け、描画オブジェクトの削除 |
このうち、売買のロジックはすべてOnTick()の中に書くと考えて差し支えありません。価格が更新されるたびにOnTick()が呼ばれ、その中で「今エントリーすべきか」「決済すべきか」を判断する流れです。
もっとも簡単なEAの骨組み
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
// ここに売買の判断を書いていく
}
この状態でもコンパイルは通ります。まずはこれを保存してコンパイルし、エラーが出ないことを確認するのが最初の一歩です。

EA作成の手順
ステップ1:新規ファイルを作る
MetaEditorの「新規作成」ボタンを押すと、作成するプログラムの種類を選ぶウィザードが開きます。ここで「エキスパートアドバイザ(テンプレート)」を選択し、次へ進みます。
ステップ2:名前とパラメーターを設定する
EAの名前、作者名などを入力します。ここで「パラメータの追加」を行うと、あとからMT4の設定画面で変更できる項目(ロット数、損切り幅など)を最初から用意できます。もちろん後からコードに書き足すこともできます。
ステップ3:入力パラメーターを定義する
MQL4では、externまたはinputという指定子を付けた変数が、MT4の設定画面に表示されます。
input double Lots = 0.01; // 取引数量 input int StopLoss = 300; // 損切り幅(ポイント) input int TakeProfit = 600; // 利益確定幅(ポイント) input int MagicNumber = 12345; // EAの識別番号
マジックナンバーは、そのEAが出した注文を識別するための番号です。複数のEAを同じ口座で動かすときに、他のEAのポジションを誤って決済しないために欠かせない仕組みです。EAごとに別の番号を割り当ててください。
ステップ4:売買条件を書く
売買ロジックを書く前に、日本語で条件を言語化しておくと迷いません。たとえば「短期の移動平均線が長期の移動平均線を上抜けたら買う」というルールであれば、必要なのは次の情報です。
- 短期・長期それぞれの移動平均線の現在の値
- 1本前の足での、それぞれの値
- 現在ポジションを持っているかどうか
移動平均線の値はiMA()という関数で取得できます。関数の引数の意味は公式リファレンスで確認しながら書き進めるのが確実です。
MetaEditor・公式リファレンス・MT4のチャートを行き来しながら書くことになるので、PCモニターを1枚足して画面を並べておくと、ウィンドウの切り替えが減って作業しやすくなります。
ステップ5:注文を出す
注文の発注にはOrderSend()という関数を使います。引数が多いため、それぞれの意味を整理しておきます。
| 引数 | 内容 |
|---|---|
| symbol | 通貨ペア名 |
| cmd | 注文種別(買い・売り・指値など) |
| volume | 取引数量(ロット) |
| price | 発注価格 |
| slippage | 許容するスリッページ |
| stoploss | 損切り価格 |
| takeprofit | 利益確定価格 |
| comment | 注文コメント |
| magic | マジックナンバー |
| expiration | 有効期限(指値注文などで使用) |
| arrow_color | チャート上に表示する矢印の色 |
OrderSend()は、成功するとチケット番号を返し、失敗すると負の値を返します。戻り値を確認せずに次の処理へ進むと、発注できていないのに成功したものとして動いてしまうため、失敗時の処理も忘れずに書き込んでおきましょう。エラーの理由はGetLastError()で取得できます。
ステップ6:ポジションの管理
すでにポジションを持っているかどうかを調べるには、OrdersTotal()で注文の総数を取得し、OrderSelect()で1件ずつ選択して、通貨ペアとマジックナンバーが自分のEAのものかを確認します。この確認を省くと、他のEAや手動で建てたポジションまで操作対象にしてしまいます。
ステップ7:コンパイルする
MetaEditorの「コンパイル」ボタンを押すと、ソースコード(.mq4)から実行可能ファイル(.ex4)が生成されます。エラーがあれば下部のウィンドウに行番号とともに表示されるので、該当箇所を修正します。警告(Warning)はコンパイル自体は通りますが、意図しない動作の原因になることがあるため、内容を確認しておくことをおすすめします。
つまずきやすいポイント
EAをチャートに適用しても動かない場合、次を確認してください。
・MT4のツールバーにある「自動売買」ボタンが有効になっているか
・チャート右上のアイコンが、EAが動作中であることを示す表示になっているか
・「ツール」→「オプション」→「エキスパートアドバイザ」で自動売買が許可されているか
・そのEAが想定している通貨ペア・時間足のチャートに適用しているか
取引数量の指定でエラーが出る
FX業者ごとに、最小取引数量と数量の刻み幅が決まっています。たとえば0.01ロット単位でしか受け付けない口座に0.005ロットで発注しようとすると、エラーになります。SymbolInfoDouble()などで業者の設定値を取得して、それに合わせて丸める処理を入れておくと安全です。
損切り・利確の価格が業者に拒否される
多くの業者は、現在価格から一定の距離を空けないと損切り・利確を設定できないという制限を設けています。この最小距離はStopLevelとして取得できます。制限より近い価格を指定するとエラーになるため、事前にチェックする処理を入れておきましょう。
数値の桁数(Digits)の扱い
通貨ペアによって価格の小数点以下の桁数が異なります。また、業者によっては1桁多い表示(いわゆる小数点以下5桁表示)を採用しています。ポイント数で損切り幅を指定する場合、この桁数の違いを吸収する処理を入れないと、意図した幅の10分の1になってしまうことがあります。

ログを活用する
Print()関数を使うと、任意のタイミングで値をログに出力できます。「なぜエントリーしないのか」「なぜ想定と違う価格で発注されるのか」を調べるとき、変数の中身を出力して確認するのがもっとも確実です。デバッグの基本として覚えておいてください。
作ったEAは検証してから使う
コンパイルが通っても、それは「文法的に正しい」というだけで、意図どおりに売買するかは別の話です。次の順序で検証を進めてください。
- ビジュアルモードでのバックテスト:チャート上で売買の様子を目で見て、意図どおりのタイミングで発注しているか確認する
- 通常のバックテスト:長い期間で回して、損益の推移と最大ドローダウンを確認する
- デモ口座でのフォワードテスト:リアルタイムの相場で、約定の挙動を含めて確認する
- 最小単位での実運用:デモと実口座で差がないかを確かめる
バックテストの結果は過去データに基づくシミュレーションであり、将来の運用成績を保証するものではありません。EAによる自動売買であっても、相場環境が変われば損失が生じる可能性があります。
よくある質問
Q1. プログラミングが未経験でもEAは作れますか?
作れないことはありませんが、変数、条件分岐、繰り返しといった基本概念の理解は前提になります。MQL4はC言語に似た文法なので、C言語やJavaScriptなどを触った経験があると理解が早いでしょう。未経験の方は、まず既存のサンプルコードを読んで、どこで何をしているのかを追うところから始めるのが現実的です。
Q2. MQL4とMQL5はどう違いますか?
MQL5はMT5向けの言語で、注文処理の書き方などが大きく異なります。MQL4で書いたEAをそのままMT5で動かすことはできません。どちらを学ぶかは、使いたいFX業者がMT4とMT5のどちらを提供しているかで判断するとよいでしょう。なお、国内ではJFXがMT4の提供を終了し、OANDA証券もMT4の提供終了を発表するなど、MT5へ移行する動きが進んでいます。
Q3. EAの開発に費用はかかりますか?
MT4とMetaEditorは、対応する業者に口座を開設すれば追加費用なく利用できます。開発そのものに費用はかかりません。ただし、24時間稼働させる段階になると、VPSの月額費用が発生する場合があります。金額は事業者によって異なるため、公式サイトでご確認ください。
Q4. どんなロジックから作り始めるとよいですか?
条件が単純で、動作を目で確認しやすいものから始めることをおすすめします。移動平均線のクロスや、一定時刻での売買といったルールは、チャート上でいつ発注されるはずかが分かりやすく、検証しやすいためです。複雑なロジックは、動くものができてから足していきましょう。
Q5. 自作EAと市販EAはどちらがよいですか?
どちらが優れているとは言えません。自作は中身を完全に把握できるため、成績が悪化したときに原因を追いやすいという利点があります。市販EAは開発の手間が省ける一方、ロジックが公開されていない場合、なぜ動かないのかを検証しづらいことがあります。どちらの場合も、過去の実績が将来の成績を示すものではない点は同じです。
Q6. EAを動かすためにPCをつけっぱなしにする必要がありますか?
MT4が起動していないとEAは動作しません。24時間の稼働を望む場合は、PCを常時起動しておくか、VPSを利用することになります。自宅PCの場合は、停電やWindowsの自動更新による再起動で稼働が止まるリスクも考慮してください。
自宅PCで動かす場合は、瞬間的な停電でPCが落ちるのを防ぐために、無停電電源装置(UPS)をつないでおくという備え方もあります。長時間の停電まで防げるものではないので、あくまで補助的な対策として考えてください。
Q7. EAを他人に販売してもよいですか?
販売の形態によっては、金融商品取引業(投資助言・代理業など)の登録が必要になる場合があります。登録なく該当する業を行うと法令違反となる可能性があるため、事前に専門家や監督官庁へ確認してください。登録業者かどうかは金融庁の事業者一覧で確認できます。
Q8. コンパイルエラーの意味が分かりません。
エラーメッセージには行番号と内容が表示されます。セミコロンの付け忘れ、括弧の対応漏れ、変数名のスペルミスが原因であることが大半です。エラーが複数出ている場合は、いちばん上のエラーから順に直してください。上流のエラーが下流の誤検出を招いていることがよくあります。
まとめ
MT4でEAを作る流れを整理します。
- F4でMetaEditorを開き、「エキスパートアドバイザ(テンプレート)」から新規作成する
- OnInit・OnTick・OnDeinitの3つの関数がEAの骨組みになる
- 売買ロジックはOnTick()の中に書く
- inputで宣言した変数がMT4の設定画面に表示される
- OrderSend()の戻り値を確認し、失敗時の処理を書く
- マジックナンバーで自分のEAの注文を識別する
- 桁数・最小取引数量・StopLevelなど業者固有の条件に対応させる
- バックテストとデモ運用で検証してから実資金に移す
EAの開発は、一度に完璧なものを作ろうとするほど行き詰まります。小さく作って動かし、少しずつ条件を足していく進め方が結局は近道です。そして、どれだけ丁寧に作ったEAであっても、FXが損失の生じる可能性のある取引であることは変わりません。検証を重ね、余裕のある資金で運用してください。



