MetaTrader4(MT4)は、裁量トレードだけでなく「EA(Expert Advisor)」と呼ばれるプログラムを使って、自動売買を行えるプラットフォームです。本記事では、MT4に標準搭載されている代表的なインジケーターだけを使って、シンプルなEAを自作し、自動売買までつなげる流れを丁寧に解説します。
MT4でインジケーターEAを動かす全体像
まずは、MT4でインジケーターを使ったEAを動かす全体像を整理しておきます。いきなりコードを書くのではなく、「何を作るのか」「どのステップで確認するのか」をイメージしておくと、途中で挫折しにくくなります。
大まかな流れは次のようになります。
1. 戦略設計:どのインジケーターをどのように組み合わせるかを決める。
2. ルール化:エントリー/決済条件を数値ルールに落とし込む。
3. コーディング:MQL4でEAとして実装する。
4. バックテスト:過去チャートで動作確認と性能チェックを行う。
5. フォワードテスト:デモ口座などでリアルタイムの動き方を確認する。
6. 実運用:少額からリアル口座で稼働させ、運用を継続的に見直す。
この記事では特に、1〜4の部分を重点的に説明し、「MT4標準インジケーターだけでここまでできる」という具体的なイメージを持っていただくことを目指します。
インジケーターでEAを作るときの考え方
MT4には、移動平均線(Moving Average)、RSI、MACD、ボリンジャーバンドなど、多くの代表的なテクニカル指標が標準で搭載されています。EAを作る際に重要なのは、インジケーターの数を増やすことではなく、役割を整理してシンプルに組み合わせることです。
役割の例は次の通りです。
・トレンド判定用:移動平均線、MACDなど。
・タイミング(オシレーター)用:RSI、ストキャスティクスなど。
・ボラティリティ確認用:ボリンジャーバンド、ATRなど。
初心者のうちは、「トレンド判定用1つ+タイミング用1つ」から始めるのがおすすめです。あまり多くの指標を組み込むと、条件が複雑になり過ぎて、バックテストでそれなりの成績が出ていても、実際には再現しにくい「過剰最適化」になりがちです。
戦略設計のステップ:移動平均線+RSIの組み合わせ
ここでは、具体例として「移動平均線+RSI」を組み合わせたシンプルな順張り戦略を設計してみます。対象は、FXの主要通貨ペア(例:EURUSD)を1時間足で想定します。
戦略コンセプトは次の通りです。
・トレンド方向は移動平均線で判断する。
・押し目・戻りのタイミングはRSIで測る。
・損切りと利益確定は固定ピップス、または直近高値・安値で管理する。
より具体的な売買ルールは次のように定義できます。
買いエントリー条件
・期間50の単純移動平均線(MA50)が期間200の単純移動平均線(MA200)の上にある(上昇トレンド)。
・RSI(期間14)が30以下から上に抜けたタイミング(売られ過ぎからの反発)。
・現在のローソク足の終値が、MA50より上で確定した。
売りエントリー条件
・MA50がMA200の下にある(下降トレンド)。
・RSIが70以上から下に抜けたタイミング(買われ過ぎからの反落)。
・現在のローソク足の終値が、MA50より下で確定した。
決済条件
・損切り:エントリー価格から固定30pips逆行したらロスカット。
・利益確定:エントリー価格から固定60pips有利に動いたら利確。
・または、逆シグナル(買いポジションなら売り条件、売りポジションなら買い条件)が出たら成行でクローズ。
このように、インジケーターを「条件のチェックリスト」として整理していくと、後でコードに落とし込むときにも迷いにくくなります。
MQL4でEAを作るときの基本構造
MT4のEAは、MQL4という専用言語で書かれますが、構造自体はシンプルです。大枠を理解しておくと、サンプルコードが読みやすくなります。
EAの骨格はおおよそ次のような形です。
//+------------------------------------------------------------------+
//| インクルード・パラメータ宣言など |
//+------------------------------------------------------------------+
#property strict
input double Lots = 0.10;
input int StopLoss = 30;
input int TakeProfit = 60;
//+------------------------------------------------------------------+
//| 初期化関数 |
//+------------------------------------------------------------------+
int OnInit()
{
// 初期化処理
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| メイン処理(新しいティックが来るたびに実行される) |
//+------------------------------------------------------------------+
void OnTick()
{
// 売買ロジック
}
//+------------------------------------------------------------------+
//| 終了処理 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// 終了時の処理
}
重要なのは、OnTick()の中に「さきほど設計した売買ルールをそのまま素直に書く」ことです。条件分岐(if文)を使って、エントリー条件・決済条件を順番にチェックしていくイメージです。
インジケーター値の取得方法
EAの中でインジケーターを使うには、MQL4が用意している関数を呼び出します。代表的なものは次の通りです。
・移動平均線:iMA()
・RSI:iRSI()
・MACD:iMACD()
・ボリンジャーバンド:iBands()
今回の「移動平均線+RSI」戦略では、iMA()とiRSI()を使います。終値で計算する例は次のようになります。
double ma_fast = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 1);
double ma_slow = iMA(NULL, 0, 200, 0, MODE_SMA, PRICE_CLOSE, 1);
double rsi_val = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);
ここでそれぞれの引数は、順に「シンボル(NULLで現在の銘柄)」「時間足(0で現在の時間足)」「期間」「シフト」「移動平均の種類」「どの価格を使うか」「どのバーを参照するか」です。最後の「1」は、1本前の確定足を参照していることを意味します。まだ確定していない最新バー(0)ではなく、1本前を使うことで、「確定していないシグナルに振り回される」ことを避けられます。
サンプルEAロジック(移動平均線+RSI)
ここでは、売買ロジックのイメージがつかみやすいように、シンプルなサンプルコードを示します。実運用に使う前には、必ずご自身でバックテストとフォワードテストを行い、ロット管理も慎重に行ってください。
//+------------------------------------------------------------------+
//| 簡易サンプルEA:MA+RSI順張り |
//+------------------------------------------------------------------+
#property strict
input double Lots = 0.10;
input int StopLoss = 30;
input int TakeProfit = 60;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnTick()
{
// 既存ポジション数を確認
int total = PositionsTotal();
if(total > 0)
return; // このサンプルでは常に1ポジションまでとする
// インジケーター値の取得(1本前の確定足)
double ma_fast_prev = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 1);
double ma_slow_prev = iMA(NULL, 0, 200, 0, MODE_SMA, PRICE_CLOSE, 1);
double rsi_prev = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);
double ask = NormalizeDouble(Ask, _Digits);
double bid = NormalizeDouble(Bid, _Digits);
// 買い条件:上昇トレンドかつRSI30以下からの反発
bool buy_signal = (ma_fast_prev > ma_slow_prev && rsi_prev <= 30.0);
// 売り条件:下降トレンドかつRSI70以上からの反落
bool sell_signal = (ma_fast_prev < ma_slow_prev && rsi_prev >= 70.0);
// 買いエントリー
if(buy_signal)
{
double sl = ask - StopLoss * _Point;
double tp = ask + TakeProfit * _Point;
OrderSend(Symbol(), OP_BUY, Lots, ask, 3, sl, tp, "MA+RSI BUY", 0, 0, clrBlue);
}
// 売りエントリー
if(sell_signal)
{
double sl = bid + StopLoss * _Point;
double tp = bid - TakeProfit * _Point;
OrderSend(Symbol(), OP_SELL, Lots, bid, 3, sl, tp, "MA+RSI SELL", 0, 0, clrRed);
}
}
実際にコーディングする際は、スプレッドやスリッページのチェック、エラー処理、複数ポジション管理などを追加していくことになりますが、最初は「ルールをそのままコードにした最低限の形」から始めるのが理解しやすいです。
バックテストのやり方とチェックポイント
EAを自作したら、いきなりリアル口座で動かすのではなく、必ずMT4のストラテジーテスターでバックテストを行います。大まかな手順は次の通りです。
1. MT4上部メニュー「表示」→「ストラテジーテスター」を開く。
2. EA名・通貨ペア・時間足・期間を設定する。
3. 「モデル」を「全ティック」または「コントロールポイント」に設定する。
4. 初期証拠金やレバレッジを、自分が想定する運用条件に合わせる。
5. 「スタート」を押してテストを実行する。
バックテスト結果で特に確認したいのは、次のポイントです。
・最大ドローダウン:資産がどの程度落ち込む可能性があるか。
・プロフィットファクター:総利益と総損失の比率。
・勝率と平均リスクリワード:勝率が高くても、1回あたりの損失が大きければトータルではマイナスになることもある。
・エントリー回数:あまりにも少ないと検証が不十分になりやすい。
短期間のデータだけで良さそうに見えても、期間を伸ばすとまったく違う結果になることがあります。できるだけ複数の期間・複数の通貨ペアで挙動を確かめると、戦略の特徴が見えやすくなります。
パラメータ最適化の考え方
MT4のストラテジーテスターには、パラメータを自動で動かして最適な組み合わせを探す「最適化」機能があります。例えば、移動平均線の期間やRSIの閾値などを複数の候補から自動で試すことができます。
ただし、最適化は使い方を間違えると「過去データにだけ異常にフィットしたEA」を量産してしまいます。次のような点に注意が必要です。
・パラメータの範囲を広く取り過ぎない(現実的な範囲に絞る)。
・テスト期間を前半・後半に分けて、前半で最適化→後半で検証する。
・プロフィットファクターなど1つの指標だけで判断しない。
・「あまり調整しなくてもそれなりに動くシンプルなパラメータ」を優先する。
インジケーターEAの魅力は、「ロジックが理解しやすく、パラメータを少し動かしたくらいでは性格が大きく変わらない戦略」を作りやすい点にあります。複雑な最適化よりも、シンプルなロジックと適度なパラメータで「だいたいこういう動きをする」という感覚を持てる戦略の方が、長く付き合いやすいことが多いです。
実運用前に必ず確認したいポイント
バックテストやデモ口座でのフォワードテストを通過したら、いよいよ実運用という段階になります。ただし、リアルマネーを投入する前に、次のポイントを改めて確認しておくことをおすすめします。
・1回のトレードで失ってもよい金額は、口座全体の何%までに抑えるか。
・連敗が続いた場合、どの程度のドローダウンを許容するのか。
・稼働させる時間帯や曜日(重要指標の前後は止めるのかなど)。
・VPSや自宅PCなど、EAを動かす環境をどう準備するか。
特に、EAは「24時間動いてくれる」というメリットがある一方で、「気付かないうちにポジションが積み上がっていた」「ネット回線トラブルで決済が遅れた」といったリスクもあります。ロットを小さく抑える、複数のEAを同時に動かし過ぎないなど、リスク管理のルールも合わせて設計しておくことが重要です。
よくある失敗パターンと改善のヒント
インジケーターEA作りでよくある失敗パターンとして、次のようなものがあります。
失敗例1:インジケーターを増やし過ぎて、シグナルがほとんど出ない
複数のインジケーターを「全部そろったらエントリー」としてしまうと、条件が厳しすぎて、ほとんど取引が行われないことがあります。役割が重複している指標は整理し、「トレンド判定」「タイミング」「ボラティリティ」のように役割ごとに1つずつに絞ると、シンプルで動きのある戦略になりやすいです。
失敗例2:1つの通貨ペア・1つの期間だけで最適化する
特定の通貨ペア・期間だけで最適化を行うと、その期間にだけ合ったEAになってしまうことがあります。別の期間や別の通貨ペアに切り替えた途端に成績が崩れるケースは少なくありません。複数条件での検証を行い、どこでも「極端な成績にはならないが、大負けもしにくい」というバランス型の戦略を目指すと、長く使える可能性が高まります。
失敗例3:ロットを急に上げてしまう
バックテストやデモで良い結果が出ると、ついロットを大きくしたくなりますが、EA運用は長期戦です。口座残高の増減に応じて徐々にロットを調整する「段階的なロット管理」を意識した方が、精神的にも安定しやすくなります。
まとめ:インジケーターEA作りで押さえたい3つのポイント
最後に、MT4標準インジケーターを使ったEA作りで特に重要なポイントを3つに絞ってまとめます。
1つ目は、「インジケーターの役割を分けてシンプルに組み合わせる」ことです。移動平均線でトレンドの方向を見て、RSIで押し目・戻りのタイミングを測る、といった形で、役割ごとに1つずつ指標を選ぶと、ロジックが整理されます。
2つ目は、「設計したルールを素直にコード化し、バックテストで特徴を確認する」ことです。難しいテクニックを使う必要はありません。まずは売買ルールをそのままif文で書くところから始め、テスト結果から「この戦略はどんな相場で得意か・苦手か」を理解していきます。
3つ目は、「リスク管理と運用ルールもセットで設計する」ことです。EAは自動で取引してくれますが、資金管理や稼働時間の管理まではやってくれません。損切り幅・ロットサイズ・ドローダウン許容度などをあらかじめ決めておくことで、感情に左右されにくい運用がしやすくなります。
MT4の標準インジケーターだけでも、十分に意味のある自動売買戦略を組み立てることができます。最初はシンプルなEAから始めて、少しずつ改良を重ねていくことで、「自分で理解できるロジックでマーケットと向き合う」という大きなメリットを得られるはずです。


コメント