MT4(MetaTrader4)は、個人投資家でも本格的な自動売買(EA:Expert Advisor)を構築して運用できるプラットフォームとして広く利用されています。本記事では、MT4で自動売買を始めるための基本と、移動平均線やRSIなどの代表的なテクニカルインジケーターを使って、シンプルなEAロジックを自分で組み立てる流れを丁寧に解説します。
プログラミングに不慣れな方でも、「まずはこう考える」「この順番で設計する」という全体像が分かるように構成しています。いきなり難しいロジックを狙うのではなく、シンプルな戦略を小さく回しながら、少しずつ改良していくことを前提に説明します。
MT4自動売買の概要とメリット・注意点
MT4自動売買とは、MT4上で動作するEAと呼ばれるプログラムに、売買の判断と発注を任せる運用スタイルです。チャートを見続けなくてもロジック通りに売買してくれるため、感情に左右されにくく、複数の通貨ペアや時間足を同時に運用できる点が大きなメリットです。
一方で、EAはあくまで「決められたルールを機械的に実行するツール」に過ぎません。相場環境が変化したり、想定外の値動きが起きたりした場合、ロジックが機能しなくなる可能性もあります。また、過去データに合わせすぎたロジック(いわゆる過剰最適化)は、本番環境で期待通りに機能しないことが多いため注意が必要です。
重要なのは、「自動売買=放置で稼げる」と考えないことです。ロジックの前提を理解した上で、相場環境の変化やドローダウンの大きさを確認しながら、適切なロット管理や停止判断を行うことが欠かせません。
MT4自動売買を始めるための準備
自動売買を始める前に、以下のような準備が必要です。
- MT4が利用できる証券会社・FX業者の口座開設
- MT4のインストールとログイン設定
- デモ口座での動作確認環境の準備
- 24時間稼働させたい場合はVPS(仮想専用サーバー)の利用検討
まずはデモ口座でEAの動きを確認し、ロジックの癖やドローダウンのイメージを掴んでから、少額のリアル口座に切り替えていく流れが基本です。いきなり大きなロットで運用を始めると、想定外の損失を抱えるリスクが高まります。
EAの基本構造を理解する
MT4のEAは、MQL4という専用言語で書かれたプログラムです。細かい文法をすべて暗記する必要はありませんが、「どのタイミングで何が実行されているか」を大まかに理解しておくと、ロジックのイメージが掴みやすくなります。
代表的な関数は次の3つです。
- OnInit():EAをチャートにセットしたときに一度だけ実行される初期化処理
- OnDeinit():EAをチャートから外したときに実行される終了処理
- OnTick():新しいティック(レート)が届くたびに繰り返し実行されるメイン処理
売買ロジックの中心になるのはOnTick()内の処理です。ここで「現在ポジションを持っているか」「インジケーターの条件を満たしているか」「リスク許容範囲か」などをチェックし、条件を満たした場合に新規注文や決済注文を出します。
代表的インジケーターとEAロジックの考え方
ここからは、EAロジックに組み込みやすい代表的インジケーターを取り上げ、シンプルな売買ルールの考え方を説明します。実際にプログラムを書く際にも、そのまま条件に落とし込みやすい構造を意識します。
移動平均線クロスによるトレンドフォローEA
最も基本的な戦略の一つが、短期移動平均線と長期移動平均線のクロスを使ったトレンドフォローです。
例として、以下のようなルールを考えます。
- 期間20の移動平均線(短期)と、期間80の移動平均線(長期)を使用
- 短期が長期を下から上に抜けたら買いエントリー
- 短期が長期を上から下に抜けたら売りエントリー、もしくは買いポジションの決済
- 方向が同じポジションは同時に1つまでに制限
- 損切り・利確はATRなどのボラティリティ指標、または固定pipsで設定
この戦略のポイントは、「押し目や戻りを完璧に捉える」のではなく、「トレンドの一部を淡々と取りにいく」発想に切り替えることです。レンジ相場ではダマシシグナルが増えるため、ボラティリティが低い局面では取引を控える、上位時間足のトレンド方向にのみエントリーするなどのフィルターを追加していく余地があります。
RSIを使った逆張りEA
RSIは、一定期間内の値上がり幅と値下がり幅のバランスから「買われ過ぎ・売られ過ぎ」を測るオシレーターです。レンジが意識されやすい通貨ペアや時間帯では、RSI逆張りのロジックが機能しやすいケースがあります。
シンプルなルール例は以下の通りです。
- RSI期間14を使用
- RSIが30以下まで低下したら買いエントリー候補
- RSIが70以上まで上昇したら売りエントリー候補
- エントリーはローソク足が確定したタイミングで行う
- 利確はRSIが50近辺まで戻ったら、または一定pipsで決済
RSI逆張りのEAでは、「トレンドが強く出ている局面でむやみに逆張りしない」ためのフィルターが重要です。例えば、上位時間足の移動平均線の傾きが大きいときは逆張りを禁止する、ADXが一定以上のときはエントリーを見送るなど、トレンドの強さを測る条件と組み合わせると安定しやすくなります。
MACDを使った順張りEA
MACDは、異なる期間の移動平均線の差を利用してトレンドの勢いを測るインジケーターです。ヒストグラムの拡大・縮小や、MACDラインとシグナルラインのクロスを使ってエントリーするロジックがよく用いられます。
例えば、次のようなEAロジックが考えられます。
- MACD(12,26,9)を使用
- MACDラインがシグナルラインを下から上にクロスしたら買い
- MACDラインがシグナルラインを上から下にクロスしたら売り、または買い決済
- ヒストグラムの絶対値が小さいとき(±0に近い)はノートレードにしてダマシを減らす
MACDはトレンドの勢いを見る指標なので、ボラティリティがあまりに低い時間帯ではシグナルの信頼度が下がります。ボラティリティフィルターや、重要経済指標前後の取引停止ルールと合わせて使うことで、無駄なトレードを減らす工夫ができます。
EAロジック設計のステップ
ここからは、実際にEAロジックを設計していく具体的なステップを整理します。プログラムを書く前に、まず日本語でロジックを言語化することが重要です。
ステップ1:時間足と通貨ペアを決める
同じロジックでも、時間足や通貨ペアによって特性が大きく変わります。例えば、短期のスキャルピングであればM5やM15、もう少し落ち着いたトレードをしたいならH1やH4といった時間足が候補になります。
最初は、自分がチャートを見慣れている時間足・通貨ペアに絞ると、ロジックの良し悪しを感覚的にも判断しやすくなります。
ステップ2:エントリー条件を日本語で書く
次に、「どのような条件でエントリーするのか」を日本語で明確に書き出します。例えば移動平均クロスEAなら、次のように整理できます。
- 20SMAが80SMAを下から上にクロスしたローソク足の確定時に買いエントリー
- すでに買いポジションを保有している場合は、新規の買いは行わない
- 直近のスプレッドが○pips以下のときのみエントリーを許可
日本語の時点で曖昧な表現があると、コードに落とし込むときにも迷いが生じます。「いつ」「どの足で」「どの条件を満たしたら」「いくつまでポジションを持つのか」などを漏れなく書き出すことが、安定したEAを作る第一歩です。
ステップ3:決済ルールとリスク管理を設計する
エントリー条件だけでなく、決済ルールとリスク管理もEAの中核です。具体的には、次のような観点を決めておきます。
- 損切り:固定pips、直近スイング高値・安値、ATRの何倍など
- 利確:固定pips、リスクリワード比、トレailing stopなど
- 同時保有ポジション数:通貨ペアごと、口座全体の上限
- 1回あたりの損失許容額:口座残高の何%までに制限するか
特に自動売買では、「気付いたらポジションが増えすぎていた」「ドローダウンが許容範囲を大きく超えていた」といった事態を防ぐために、ルールベースでのリスク管理が不可欠です。
MQL4によるEAコード化のイメージ
ここでは、移動平均クロスEAのごく簡単なコード例のイメージを示します。実運用にはスプレッドチェックやエラーハンドリングなどの追加が必要ですが、ロジックがどのように記述されるかを掴む参考になります。
// シンプルな移動平均クロスEAのイメージ(抜粋)
#property strict
input int FastMAPeriod = 20;
input int SlowMAPeriod = 80;
input double Lots = 0.1;
input int StopLossPips = 50;
input int TakeProfitPips = 100;
double FastMA, SlowMA, FastMA_prev, SlowMA_prev;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnTick()
{
// 現在足と1本前の移動平均を取得
FastMA = iMA(NULL, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
SlowMA = iMA(NULL, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
FastMA_prev = iMA(NULL, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
SlowMA_prev = iMA(NULL, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
// すでにポジションを持っているか確認
bool hasBuy = false;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderType() == OP_BUY)
hasBuy = true;
}
}
// ゴールデンクロスで買いエントリー
if(!hasBuy && FastMA_prev < SlowMA_prev && FastMA >= SlowMA)
{
double sl = Bid - StopLossPips * Point;
double tp = Bid + TakeProfitPips * Point;
OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, sl, tp, "MA Cross EA", 0, 0, clrNONE);
}
}
このように、日本語で整理したロジックを一つずつ条件文(if文など)に変換していくことで、EAとして実装していきます。最初から完璧なコードを書こうとする必要はなく、「まずは動くもの」を作ってから、ログ出力や追加条件を少しずつ足していくと理解が深まりやすくなります。
バックテストとフォワードテストの進め方
EAが完成したら、いきなりリアル口座で動かすのではなく、MT4のストラテジーテスターでバックテストを行います。バックテストでは、過去データに対してEAを動かし、勝率やプロフィットファクター、最大ドローダウンなどを確認できます。
バックテストで見るべきポイントは次の通りです。
- 期間全体の損益カーブが右肩上がりかどうか
- ドローダウンの深さと長さが自分の許容範囲内か
- 特定の期間に集中して利益または損失が偏っていないか
- 手数料やスプレッド、スリッページを考慮しても成績が保てるか
バックテストである程度の手応えが得られたら、次にデモ口座でフォワードテスト(将来のリアルタイムデータに対する検証)を行います。ここでは、実際のレート配信や約定状況を踏まえて、ロジックが想定通りに動いているかを確認します。
初心者がやりがちな失敗と回避のポイント
MT4自動売買を始めたばかりの方が陥りやすいパターンを、いくつか挙げておきます。
- 過去の一部期間だけを見てロジックを評価してしまう
良い成績が出た期間だけを抜き出してパラメータを最適化すると、他の期間では通用しない「過剰最適化EA」になりがちです。複数の相場環境(上昇・下降・レンジ)を含む長めの期間でテストすることが重要です。 - リスク管理を後回しにしてしまう
ロジックの勝率や平均利益ばかりに目が向き、1回あたりの損失許容額や最大ドローダウンの想定を決めないまま運用を始めてしまうと、想定外の損失で運用が続けられなくなることがあります。 - ロットを急に上げてしまう
少額でうまく行ったからといって、急にロットを数倍にすると、精神的な負担も一気に増えます。ロットを上げるときは、口座残高の増加に合わせて段階的に上げる方が安定しやすくなります。
少額から始める運用プランの一例
最後に、MT4自動売買とEA自作に取り組む際の、現実的なステップの一例を示します。
- まずはデモ口座で、シンプルな移動平均クロスEAやRSI逆張りEAを動かし、売買履歴とチャートを見比べながらロジックの動きを理解する。
- ロジックを自分なりにアレンジし、「この条件を追加したらどう変わるか」をバックテストで検証する。
- デモ口座で一定期間(例:1〜3か月)安定した結果が出たら、リアル口座でごく小さいロットから運用を開始する。
- 実際の損益のブレやドローダウンを体感しながら、許容できるリスク水準を見直し、必要に応じてルールやロットを調整する。
このように、MT4の自動売買は「一気に稼ぐ魔法の道具」ではなく、「自分のトレードルールを機械に正確に実行させるための仕組み」です。インジケーターを使ったシンプルなロジックから出発し、小さく検証と改善を繰り返すことで、経験とともにEAの精度も少しずつ高めていくことができます。


コメント