このページでは、MT4に最初から搭載されている基本インジケーターだけを使って、シンプルな自動売買EAを作る方法を解説します。難しい数学や高度なプログラミングではなく、「移動平均線」「RSI」「ボリンジャーバンド」など、初心者でも名前を聞いたことがあるインジケーターを組み合わせて、再現性のある売買ルールに落とし込んでいく流れを具体的にまとめます。
裁量トレードでなんとなくエントリーしていた判断を、EAのロジックとして文章化し、それをコードに変換していくことで、自分だけの自動売買システムを構築できます。ここでは、FXを例にしながら、株価指数CFDや暗号資産などにも応用しやすい形で説明していきます。
MT4自動売買とEAの全体像
MT4における自動売買は、「エキスパートアドバイザー(EA)」と呼ばれるプログラムによって実現します。EAは、チャート上の価格データやインジケーターの値を読み取り、あらかじめ決めたルールに従って自動で注文・決済を行う小さなロボットのような存在です。
EAを使うメリットとしては、次のような点があります。
- 感情に左右されず、ルール通りに売買できる
- 24時間チャートを監視する必要がなくなる
- バックテストで過去データを使った検証ができる
- ロジックを細かく調整しながら改善していける
一方で、次のような注意点もあります。
- どんなロジックでも損失が出る局面は必ず存在する
- 過去データに合わせすぎると、将来の相場で機能しにくくなる(過剰最適化)
- スプレッドや約定品質などブローカー条件の影響を受ける
- VPSなど安定した稼働環境の準備が必要になることもある
重要なのは、「自動売買だから楽に必ず儲かる」と考えないことです。あくまで、自分の売買アイデアを機械的に実行してくれる道具であり、そのアイデア自体の良し悪しやリスク管理は、最終的にトレーダー自身の責任で設計する必要があります。
EA作りに使う基本インジケーターの考え方
ここでは、MT4に標準搭載されている代表的なインジケーターを、EA目線でどう使うかという観点から整理します。難しいパラメータチューニングよりも、「どんな役割を持たせるか」を明確にするのがポイントです。
トレンド把握:移動平均線(MA)
移動平均線は、一定期間の終値の平均を線で結んだもので、トレンドの方向をシンプルに視覚化してくれます。EAでは、次のような使い方が基本です。
- 価格が移動平均線の上にあるときは「買い優勢」、下にあるときは「売り優勢」と判断する
- 短期移動平均線が長期移動平均線を上抜けしたら買い、下抜けしたら売り(ゴールデンクロス・デッドクロス)
- 移動平均線の傾きが一定以上なら「強いトレンド」とみなす
例えば、EURUSDの1時間足チャートで「MA50の上ならロングだけ、下ならショートだけ」というフィルターを入れるだけでも、逆張りの回数を減らし、トレンド方向に沿った売買をしやすくなります。
勢いのフィルター:RSI
RSIは、一定期間の上昇幅と下落幅の比率から「買われ過ぎ」「売られ過ぎ」を示すオシレーターです。EAでは、トレンド方向にエントリーするときの「タイミング調整」に使うと相性が良いです。
- RSIが70以上なら買われ過ぎ、30以下なら売られ過ぎとみなす
- トレンドフォロー戦略では、RSIが一時的に押し目・戻りを示したところを狙う
- レンジ戦略では、RSIの上下端からの反転シグナルをエントリーに使う
例えば、「上昇トレンド中(価格がMAより上)で、RSIが一度30台まで下がってから再び50を上抜けたら押し目買い」といった条件は、EA化しやすい典型的なロジックです。
ボラティリティ把握:ボリンジャーバンド
ボリンジャーバンドは、移動平均線の上下に標準偏差を使って幅を持たせたインジケーターです。価格のバラつき(ボラティリティ)を視覚化できるため、EAでは次のように利用します。
- バンドが狭いとき(スクイーズ)は、レンジ相場やエネルギー蓄積局面とみなす
- バンドブレイク時にトレンドフォローで仕掛ける、または逆張りで戻りを狙う
- 利確・損切りの目安として、バンドの内側・外側を使う
例えば、「レンジ相場を想定して、上バンドタッチで売り、下バンドタッチで買い」という単純なEAも作れます。ただしトレンド発生時に連続損失が出やすいため、トレンドフィルターや損切り設定が重要です。
出来高・変動の補助:ATRなど
FXではティックベースの出来高しか取得できませんが、ATR(平均真の値幅)を使えばボラティリティに応じて損切り幅や利確幅を調整できます。
- ATRの何倍を固定の損切り幅とする(例:ATRの2倍で損切り)
- ボラティリティが低いときはエントリーを控えるフィルターとして使う
このように、各インジケーターには「トレンド方向」「タイミング」「ボラティリティ」という役割を割り振ると、組み合わせが整理され、EAのロジック設計がしやすくなります。
ステップ1:トレードアイデアを日本語で言語化する
いきなりコードを書こうとすると、多くの人が途中で挫折します。最初にやるべきことは、「どんな条件で買って、どんな条件で売るのか」を、日本語で箇条書きにすることです。
例として、上昇トレンドの押し目買いEAを考えてみます。
- 通貨ペア:EURUSD
- 時間足:1時間足
- トレンド判定:価格がMA50より上なら上昇トレンドとする
- 押し目条件:RSIが一度30以下まで下がったあと、再度50を上抜けしたら買う
- 決済条件:RR比1:1の利確と固定幅の損切り、またはRSIが70を超えたら利確
このレベルまで日本語で書ければ、あとは「各条件をどうやってプログラムで表現するか」を一つずつ置き換えていくだけです。裁量でやっている判断を、できるだけ具体的な数値条件に落とし込むことがポイントです。
ステップ2:EAの設計(売買ルールとパラメータ)
次に、EAとして必要なパラメータを整理します。最低限、以下のような項目を決めておくと良いでしょう。
- ロットサイズ(固定か、資金に対する割合か)
- 最大ポジション数
- 損切り幅・利確幅(pipsまたはATR倍率)
- トレードする時間帯(ロンドン時間のみなど)
- スプレッドが一定以上のときはトレードしないかどうか
例えば、次のような設計にします。
- ロット:口座残高の1%を想定した固定ロット(検証時は0.1ロットなど小さく)
- 最大ポジション数:1つ(ナンピンはしない)
- 損切り幅:ATR(14)の2倍
- 利確幅:損切り幅と同じ(RR1:1)
- トレード時間:ロンドン時間〜ニューヨーク序盤(日本時間17:00〜3:00)
こうした条件を事前に決めておくことで、後のバックテスト結果を解釈しやすくなります。また、EAのパラメータとして外部入力可能にしておけば、最適化テストで比較することも容易です。
ステップ3:MQL4でEAの骨格を書く
MT4のEAは、MQL4という専用言語で記述します。プログラミング経験がなくても、「いつ」「何をするか」という流れを理解すれば、シンプルなEAなら十分に自作可能です。典型的なEAの骨格は次のようなイメージです。
// 初期設定:パラメータや変数定義
int OnInit() {
// EA起動時に一度だけ実行される処理
return(INIT_SUCCEEDED);
}
// 毎ティックごとに実行されるメイン処理
void OnTick() {
// 1. 現在のポジションを確認
// 2. エントリー条件をチェック
// 3. 決済条件をチェック
}
// 終了処理(不要なら空でもよい)
void OnDeinit(const int reason) {
}
実際には、ここにインジケーターの値取得、エントリー/決済ロジック、ロット計算などを追加していきます。ポイントは、「1ティックごとに条件を監視し、条件を満たした瞬間に一度だけ注文を出す」という流れを守ることです。
ステップ4:インジケーターの値をEAで取得する
次に、EAから基本インジケーターの値を取得する方法を見ていきます。ここでは代表的な移動平均線とRSIを例にします。
移動平均線(iMA)の取得
MQL4では、iMA関数を使って移動平均線の値を取得します。
double ma = iMA(
_Symbol, // 通貨ペア
PERIOD_H1, // 時間足
50, // 期間
0, // シフト
MODE_SMA, // 種類(単純移動平均)
PRICE_CLOSE, // 適用価格
0 // 0バー(最新バー)
);
この値と現在価格を比較して、「価格 > MA なら上昇トレンド」といった条件判定を行います。
RSI(iRSI)の取得
RSIはiRSI関数で取得します。
double rsi = iRSI(
_Symbol,
PERIOD_H1,
14, // 期間
PRICE_CLOSE,
0 // 0バー
);
この値が30以下になったか、50を上抜けしたかなどを条件として使います。EAでは「一度30以下まで下がったこと」と「その後50を上抜けしたこと」を区別する必要があるため、フラグ用の変数を用意して状態管理を行います。
押し目買いEAのロジック例
押し目買いEAのシンプルなイメージは次のようになります。
- 価格がMA50より上
- RSIが30以下になったら「押し目候補フラグ」をON
- フラグONの状態でRSIが50を上抜けしたら成行買い
- ポジション保有中は新規エントリーを行わない
- 損切り・利確・時間フィルターは別途チェック
このように、「今フラグはONかOFFか」「ポジションはあるかないか」といった状態を明確に管理することで、EAの挙動が安定します。
ステップ5:バックテストとパラメータ検証
EAが動くようになったら、MT4のストラテジーテスターを使ってバックテストを行います。ここでは、単純にリターンだけを見るのではなく、次のような指標に注目します。
- 最大ドローダウン(資産のどれくらいが一時的に減るか)
- 勝率だけでなく、平均利益と平均損失のバランス
- 月ごとの損益の安定性
- 通貨ペアや時間帯による成績の偏り
例えば、勝率が50%でも、平均利益が平均損失の2倍あれば、長期的にはプラスになりやすい構造といえます。一方、勝率90%でも、まれに大きな損失が出てトータルでマイナスになるロジックも存在します。
また、パラメータ最適化機能を使う場合は、「1つの期間だけに特化しすぎていないか」を注意深く確認する必要があります。特定の数年だけ極端に成績が良く、他の期間では機能しない場合、過去データに合わせすぎている可能性が高いです。
具体的なEAアイデア3パターン
ここからは、基本インジケーターだけで構築できるEAアイデアを3パターン紹介します。実際にコード化するときは、ここで挙げるロジックを土台に、自分の相場観や許容リスクに合わせて微調整していくと良いでしょう。
パターン1:MA+RSIの押し目買いトレンドフォロー
先ほど説明したロジックを、少し整理して再掲します。
- 対象:トレンドが出やすい主要通貨ペア(例:EURUSD、GBPUSD)
- 時間足:1時間足
- トレンド判定:終値がMA50より上なら買いトレンド
- 押し目判定:RSIが一度30以下まで下がったら押し目候補
- エントリー:押し目候補後にRSIが50を上抜けしたら買い
- 損切り:ATR(14)の2倍
- 利確:損切り幅と同じか、RSIが70超えでクローズ
この戦略のポイントは、「トレンド方向にのみエントリーしつつ、一時的な逆行(押し目)を待ってから飛び乗る」という点です。逆張りではなく、あくまでトレンドフォロー型の押し目買いであることを意識します。
パターン2:ボリンジャーバンドのレンジ逆張りEA
レンジ相場が多い通貨ペアや時間帯では、ボリンジャーバンドを使った逆張りEAも有効な選択肢になります。
- 対象:比較的レンジになりやすい通貨ペア
- 時間足:15分足〜1時間足
- エントリー(買い):終値が下バンドを終値で割り込んだあと、次足で再びバンド内に戻ったら買い
- エントリー(売り):終値が上バンドを超えたあと、次足でバンド内に戻ったら売り
- 損切り:直近安値・高値の少し外側、またはATR基準
- 利確:ミドルバンド(移動平均線)または反対側のバンド
ただし、強いトレンドが発生すると連続損失が出やすいため、次のようなフィルターを組み合わせると安定しやすくなります。
- MAの傾きが一定以上のときはトレードを停止する
- 大きな経済指標発表前後の時間帯はトレードを控える
パターン3:ブレイクアウト+ATRフィルターEA
もう一つ、トレンド発生初動を狙う単純なブレイクアウトEAも紹介します。
- 対象:値動きが大きい通貨ペアや暗号資産
- 時間足:1時間足
- ブレイク条件:直近N本の高値・安値を上抜け/下抜け
- ボラティリティ条件:ATRが一定以上のときだけエントリー(低ボラはスキップ)
- 損切り:ブレイク基準となった高値/安値の少し外側
- 利確:固定RR、またはトレーリングストップ
このEAでは、ボラティリティ(ATR)を使って「動きが出ている局面だけを狙う」ことがポイントです。レンジ相場でのダマシブレイクをある程度避けることができますが、完全にゼロにはならないため、損切り設定は必須です。
運用時の注意点とリスク管理
EAを実際の口座で稼働させる前に、次のポイントを必ず確認しておくことが重要です。
- デモ口座や少額リアル口座で、想定通りの動作をするか確認する
- スプレッド拡大時(早朝や指標発表時)に不用意なエントリーをしないよう、フィルターを入れる
- 1回のトレードで失ってもよいリスク量を事前に決め、ロットを調整する
- 同じようなロジックのEAを複数同時に動かしすぎない(リスクが集中する)
また、VPSを利用して24時間稼働させる場合は、再起動や通信障害時にEAがどう振る舞うかも事前に確認しておくと安心です。ポジションを保有したままEAが停止した場合、どのようにクローズするかを自分なりにルール化しておきましょう。
まとめ:小さく作って、小さく試し、少しずつ改善する
MT4の基本インジケーターだけでも、自動売買EAのロジックは十分に構築できます。重要なのは、「難しいことをしようとする」のではなく、「自分が裁量でやっているシンプルな判断」をプログラムに落とし込むことです。
最初は、移動平均線とRSIだけを使った単純な押し目買いEAから始めてみるのがおすすめです。動作を確認しながら、「損切り幅をATR基準に変えてみる」「時間帯フィルターを追加してみる」「レンジ用ロジックと組み合わせてみる」など、少しずつ改良を重ねていくことで、自分のスタイルに合ったEAが育っていきます。
自動売買は、あくまでトレードを効率化するためのツールです。ロジックの発想やリスク管理の考え方は、人間の側が学び続ける必要があります。基本インジケーターを使ったシンプルなEAを自作する経験は、その土台をしっかりと作ってくれるはずです。


コメント