MT4(MetaTrader4)は、個人投資家でも本格的な自動売買ができる定番プラットフォームです。ただ、「EAって難しそう」「プログラミングなんて無理」と感じている方も多いと思います。この記事では、まったくの初心者が「インジケーターを使ったシンプルな自動売買EA」を自分で組めるようになることをゴールに、MT4自動売買の全体像から、具体的なEAコードの例、バックテストの考え方までを体系的に解説します。
ここで紹介する内容は、為替FXを前提にしていますが、CFDや一部の暗号資産のMT4口座でも基本的な考え方は同じです。難しい数学や高度なプログラミングは使わず、「移動平均線」や「RSI」といった基本インジケーターだけで構成した現実的な入門戦略を題材にしています。
MT4自動売買EAとは何か:裁量トレードとの違い
MT4の自動売買で使うプログラムのことを「EA(Expert Advisor)」と呼びます。EAは、あらかじめ決めた条件どおりに、売買シグナルの検出から注文、決済までを自動で行う「売買ルールのロボット化」です。
裁量トレードとの主な違いは、次の3点です。
- 感情を一切挟まず、ルールどおりに淡々と売買する
- チャートを見ていない時間帯でも24時間稼働させられる
- ルールがコードとして明文化されるため、バックテストや検証がしやすい
一方で、「相場状況に合わせた柔軟な判断」は苦手です。トレンド相場には強いがレンジではダマシが多いEA、逆にレンジ相場で強いがトレンドに巻き込まれると損失が膨らみやすいEAなど、それぞれの特性があります。重要なのは、「万能なEAは存在しない」という前提で、戦略の長所と短所を理解したうえで使うことです。
MT4自動売買を始めるために必要な環境
自動売買EAを自作・運用するには、以下の環境が必要です。
- MT4対応のFX口座(デモ口座からで十分)
- Windows環境(VPSまたは自宅PC)
- MT4本体と標準搭載のMetaEditor
最初の段階では、必ず「デモ口座」で始めることをおすすめします。EAのロジックに不具合がある場合、実弾でいきなり運用すると、想定外の大量ポジションや損失につながるリスクがあります。デモ口座でロジックや動きに問題がないことを確認し、動作の癖を理解してから、少額のリアル口座に移行する流れが安全です。
EAを作る前に決めておくべき戦略設計のポイント
いきなりコードを書き始めるのではなく、最初に「どんな戦略を自動化したいのか」を言語化しておくことが重要です。最低限、次の5点を紙に書き出しておくと、EA設計がスムーズになります。
- どの時間足をメインで使うか(例:M15、H1、H4など)
- トレンドフォローか、逆張りか、レンジブレイクか
- どのインジケーターを使ってエントリー条件を定義するか
- どこに損切り(ストップロス)、利確(テイクプロフィット)を置くか
- 1回あたりのリスク許容度(口座残高の何%か)
この記事では、次のような非常にシンプルなトレンドフォロー戦略を題材にします。
「移動平均線とRSIを組み合わせ、上昇トレンドで押し目買い、下降トレンドで戻り売りを狙うEA」
このコンセプトを、少しだけ定量的に落とし込むと、次のようになります。
- 時間足:15分足(M15)
- トレンド判定:期間50の移動平均線(SMA)が上向きなら上昇トレンド、下向きなら下降トレンド
- 押し目/戻りの判定:RSI(期間14)が40以下なら押し目、60以上なら戻り
- エントリー方向:上昇トレンド+RSI40以下で買い、下降トレンド+RSI60以上で売り
- 損切り:直近スイングの高値/安値から一定pips離して設定
- 利確:リスクリワード比1:1.5〜2倍を目安
実際のコードではさらに細かく条件を定めますが、まずは「戦略コンセプトが1〜2行で説明できるレベル」に整理されていることが大切です。
基本インジケーターの役割をEA視点で理解する
EAを組むうえでは、インジケーターの「意味」だけでなく、「数値としてどう取得し、条件に使うか」を意識しておく必要があります。ここでは、MT4標準搭載の中でも特にEAで使いやすい4つのインジケーターを取り上げます。
移動平均線(Moving Average)
移動平均線は、一定期間の終値の平均をつないだラインで、トレンドの方向と強さをざっくり把握するのに使います。EAでは、次のようなロジックで利用されることが多いです。
- 価格が移動平均線より上にあれば上昇バイアス、下にあれば下降バイアス
- 短期移動平均線が長期移動平均線を上抜けすればゴールデンクロス(買い)、下抜ければデッドクロス(売り)
- 移動平均線の傾きがプラスなら上昇トレンド、マイナスなら下降トレンド
RSI(Relative Strength Index)
RSIは「買われすぎ/売られすぎ」を数値化した代表的なオシレーターです。EAでは、
- RSIが30以下:売られすぎゾーン
- RSIが70以上:買われすぎゾーン
のような基準を使い、逆張りシグナルとして使うことが多いですが、トレンドフォローの押し目・戻りを測るために、「40以下=押し目」「60以上=戻り」といった中庸ゾーンを使う方法も有効です。
MACD
MACDは、2本の移動平均線の差からトレンドの勢いを測るインジケーターです。EAでは、
- MACDラインがシグナルラインを上抜け:上方向のモメンタム強化
- MACDがゼロラインより上:全体として上昇バイアス
といったロジックに使われます。初心者向けEAでは、最初からMACDまで入れるとロジックが複雑になりやすいため、「第2弾」として後から組み込むくらいの感覚で良いでしょう。
ボリンジャーバンド
ボリンジャーバンドは、価格の標準偏差から「値動きの幅」を表す指標です。EAでは、
- ±2σバンドにタッチしたら逆張り
- バンド幅が極端に縮小した後、ブレイク方向に順張り
のような使い方ができます。ただし、標準偏差は計算がやや重く、EAの処理負荷にも影響するため、最初のEAでは無理に使わず、慣れてから組み込むのがおすすめです。
MQL4でEAを作る基本構造
MT4のEAは、MQL4という専用言語で記述します。構文はC言語に似ていますが、EAで最低限押さえるべきポイントはそれほど多くありません。最も重要なのは次の3つの関数です。
OnInit():EAがチャートにセットされたときに1回だけ実行される初期化処理OnDeinit():EAが外されたときに実行される終了処理OnTick():価格のティックが更新されるたびに実行されるメイン処理
実際の売買ロジックは、ほとんどの場合OnTick()の中に書いていきます。イメージとしては、
- 現在ポジションを持っているか確認
- 新規エントリー条件をチェック
- 条件を満たしていれば発注(発注ロットやSL/TPを指定)
- 既存ポジションの決済条件をチェック
- 条件を満たしていれば決済
という一連の流れをコードに落とし込んでいきます。
移動平均線+RSIによるシンプルEAのロジック設計
ここでは、先ほど言語化した戦略コンセプトを、そのままEAの疑似コードに落とし込んでみます。
買いエントリー条件の例は次のとおりです。
- 最新足の終値が期間50SMAより上にある
- 期間50SMAが上向き(直近数バーと比較して値が上昇)
- RSI(14)が40以下まで一度下がってから再び40を上抜けたタイミング
- 現在ポジションを持っていない
売りエントリー条件はその逆です。
- 最新足の終値が期間50SMAより下
- 期間50SMAが下向き
- RSI(14)が60以上まで一度上がってから再び60を下抜けたタイミング
- 現在ポジションを持っていない
損切りと利確は、例えば次のように定義できます。
- 損切り:エントリー価格から30pips逆行
- 利確:エントリー価格から60pips順行(リスクリワード1:2)
このように、EAのロジックは「文章として破綻なく説明できるか」を基準に設計すると、コードに落とし込んだときのバグを減らせます。
実際のMQL4コード例:最小限の構造
次に、上記のロジックを簡略化したMQL4コード例を示します。実運用前には必ずデモ環境で動作確認とバックテストを行ってください。
//+------------------------------------------------------------------+
//| Simple MA + RSI Trend EA |
//+------------------------------------------------------------------+
#property strict
extern double Lots = 0.1;
extern int Magic = 12345;
extern int MaPeriod = 50;
extern int RsiPeriod = 14;
extern double StopLoss = 30; // pips
extern double TakeProfit= 60; // pips
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
// 1. すでにポジションを持っているか確認
if(PositionsTotalByMagic(Magic) > 0) return;
// 2. インジケーターの値を取得
double ma = iMA(NULL, PERIOD_M15, MaPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
double ma1 = iMA(NULL, PERIOD_M15, MaPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double rsi = iRSI(NULL, PERIOD_M15, RsiPeriod, PRICE_CLOSE, 0);
double ask = NormalizeDouble(Ask, Digits);
double bid = NormalizeDouble(Bid, Digits);
// 3. 上昇トレンド判定(MAが上向き)
bool upTrend = (ma > ma1);
bool downTrend = (ma < ma1);
// 4. エントリー条件
if(upTrend && rsi > 40 && rsi < 60 && Close[0] > ma)
{
// 買いエントリー
double sl = ask - StopLoss * Point;
double tp = ask + TakeProfit * Point;
OrderSend(Symbol(), OP_BUY, Lots, ask, 3, sl, tp, "MA+RSI Buy", Magic, 0, clrBlue);
}
else if(downTrend && rsi < 60 && rsi > 40 && Close[0] < ma)
{
// 売りエントリー
double sl = bid + StopLoss * Point;
double tp = bid - TakeProfit * Point;
OrderSend(Symbol(), OP_SELL, Lots, bid, 3, sl, tp, "MA+RSI Sell", Magic, 0, clrRed);
}
}
// マジックナンバーでポジション数を数える補助関数
int PositionsTotalByMagic(int magic)
{
int total = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderMagicNumber() == magic && OrderSymbol() == Symbol())
total++;
}
}
return(total);
}
//+------------------------------------------------------------------+
このコードはあくまで「最小限のサンプル」です。実際には、
- スプレッドが広いときはエントリーしない
- 重要指標前後の時間帯は新規エントリーを停止する
- 連敗時にロットを自動的に絞る
といったロジックを追加することで、より現実的な戦略に近づけられます。
MetaEditorでのEAファイル作成とコンパイル手順
具体的な作成手順を、初心者向けにステップごとに整理します。
- MT4を起動し、上部メニューから「ツール」→「MetaQuotes Language Editor」を開く
- MetaEditorで「新規作成」→「Expert Advisor(テンプレート)」を選択
- EA名(例:SimpleMA_RSI_EA)を入力し、次へをクリックしてテンプレートを生成
- 自動生成されたコードの
OnTick()内に、自分のロジックを書き込む - ファイルを保存し、「コンパイル」ボタンを押してエラーがないか確認する
- MT4に戻ると、ナビゲーターの「Expert Advisors」内に自作EAが表示される
コンパイルエラーが出る場合は、エラー行の番号とメッセージを確認し、セミコロン抜けやスペルミスなどの基本的なミスを一つずつ潰していくのがコツです。最初から完璧を目指さず、「エラーを読むことに慣れる」ことを優先しましょう。
バックテストのやり方と結果の読み方
EAがコンパイルできたら、次はバックテストです。MT4には「ストラテジーテスター」が標準搭載されており、過去データを使ってEAを検証できます。
- MT4のメニューから「表示」→「ストラテジーテスター」を開く
- エキスパートアドバイザに自作EAを選択
- 通貨ペア、期間(M15など)、テスト期間を設定
- モデルは最初は「コントロールポイント」など軽い設定で試し、慣れてきたら「すべてのティック」に変更
- スタートボタンを押してバックテストを実行
バックテスト結果を見る際には、「最終損益」だけでなく、次の指標にも注目すると、EAの性格が把握しやすくなります。
- 最大ドローダウン:どの程度の含み損・確定損を許容するEAなのか
- 勝率:win率が低くても、リスクリワードが高ければトータルでプラスになる場合もある
- 平均利益/平均損失:典型的な1トレードの振る舞いを定量的に理解する
- トレード回数:年に数回しかシグナルが出ないEAなのか、1日に何度もトレードするEAなのか
バックテスト期間は、少なくとも2〜3年分を一度は回してみることをおすすめします。特定の相場局面だけを切り取ると、「たまたまその期間だけ成績が良かったEA」を過大評価してしまうリスクがあるためです。
フォワードテストと少額リアルトレードへの移行
バックテストの結果が良くても、そのままいきなり大きなロットでリアル運用に移行するのはリスクが高いです。次のようなステップを踏むと、現実的なリスク管理がしやすくなります。
- デモ口座で1〜3か月程度、リアルタイムにEAを動かして挙動を確認する(フォワードテスト)
- デモとバックテストの結果が大きく乖離していないかチェックする
- 問題がなければ、リアル口座でごく少額(例:0.01ロットなど)から運用を始める
- 一定期間ごとに、バックテストと最新のリアル成績を比較し、必要に応じてパラメータを見直す
また、複数のEAを同時に走らせる場合、相関が高すぎる戦略を重ねると、特定の相場局面で一斉に含み損が膨らむことがあります。時間足やロジックの異なるEAを組み合わせて、全体としてのリスクを分散することも検討すると良いでしょう。
初心者がEA開発で陥りがちな落とし穴
最後に、これからMT4でEAを自作しようとする初心者が、特に気をつけるべきポイントを整理します。
- 過剰最適化(オーバーフィッティング):バックテストで最高成績になるまでパラメータをいじり続けると、「過去データ専用EA」になり、将来の相場で機能しなくなるリスクが高まります。
- 最大ドローダウンを軽視する:最終損益だけを見てEAを評価すると、実際に運用したときに「想像以上の含み損」に耐えられず、底で停止してしまう原因になります。
- スプレッドやスリッページを無視する:バックテスト設定が楽観的すぎると、実運用で成績が大きく落ちることがあります。スプレッドは現実的な値を入れ、手数料型口座なら手数料も考慮しましょう。
- EAの仕組みを理解しないまま他人のロジックを流用する:インターネット上のコードをそのままコピペしても、なぜそのロジックが存在するのか理解していないと、相場環境が変わったときに対応できません。
本記事で紹介したような、「基本インジケーターを組み合わせたシンプルなEA」をまずは自分でゼロから作ってみることで、EA開発の全体像と要点がつかめるはずです。そのうえで、徐々にインジケーターやパラメータを増やし、バックテストとフォワードテストを繰り返しながら、自分なりの自動売買戦略を育てていくことが、長期的には最も堅実なアプローチと言えます。


コメント