MT4のチャートを眺めながら「このインジケーターの条件をそのまま自動売買にできたら楽なのに」と感じたことはないでしょうか。実際、移動平均線やRSI、MACD、ボリンジャーバンドといった基本的なインジケーターだけでも、しっかりルール化してEA(エキスパートアドバイザー)に落とし込めば、裁量トレードでは再現しにくい「同じ判断を繰り返す売買システム」を作ることができます。
この記事では、MT4で動くインジケーターEAを自分で組み立てることをテーマに、考え方と具体的なロジック例、そして実際に動かすまでの流れを詳しく解説します。難しい数学やプログラミング理論ではなく、「どうやって売買ルールを決めて、EAにして、検証していくか」にフォーカスします。
インジケーターEAとは何か:裁量判断を「条件式」に変える作業
インジケーターEAとは、MT4に標準搭載されているテクニカル指標(移動平均線、RSI、MACD、ボリンジャーバンドなど)の値を使って、売買タイミングをコンピュータに判断させる自動売買プログラムです。裁量トレードであれば「なんとなく上がりそう」「チャートの形が良い」といった感覚も入りますが、EAにする時はこれをすべて数値条件に変換する必要があります。
例えば、次のような裁量のイメージを考えてみます。
・「短期の移動平均線が長期の移動平均線を上に抜けたら上昇トレンドだと判断して買いたい」
・「RSIが売られすぎゾーン(30以下)から戻ってきたら押し目買いを狙いたい」
・「ボリンジャーバンドの+2σを上抜けたらブレイクアウトを狙いたい」
これらをEA用の条件にすると次のようになります。
・移動平均クロス:短期MA > 長期MA になったタイミングで買いエントリー
・RSI押し目買い:RSIが30以下から30を上抜けた足で買いエントリー
・ボリンジャーブレイク:終値が+2σを上抜けた足で買いエントリー
ポイントは、「いつ」「何を比較して」「どうなったら売買するか」をすべて言語化することです。この作業ができれば、プログラム自体は比較的シンプルなロジックで組み上げることができます。
MT4 EAの基本構造を押さえる:どこにインジ条件を書くのか
MT4のEAは、MQL4という言語で書かれますが、初心者が最初に理解すべきなのは「EAのファイルを全部読めること」ではなく、どの場所に売買ロジックを書けばよいかです。代表的な構造は次のようになります。
・OnInit:EAの初期化処理(パラメータの確認など)
・OnDeinit:EA終了時の処理
・OnTick:価格が更新されるたびに呼ばれるメイン処理
実際にインジケーターの条件を使って売買判断を行うのは、ほぼ例外なくOnTick内です。ここで最新足または確定足のインジケーター値を取得し、if文などで条件分岐してエントリー・決済を行います。
イメージとしては次のような流れです。
1. 現在ポジションを持っているかをチェックする
2. ポジションを持っていない場合は「エントリー条件」をチェックする
3. ポジションを持っている場合は「決済条件」または損切り・利確条件をチェックする
4. 条件を満たしたらOrderSendなどの関数で注文を出す
この中の「エントリー条件」「決済条件」の部分に、インジケーターの条件式を埋め込んでいきます。
代表的インジケーターを使ったEAロジック例
ここからは、MT4標準インジケーターを使ったEAロジックの具体例をいくつか紹介します。いずれのロジックも、完璧な聖杯ではなく「自分で検証して調整できるシンプルな種」と考えてください。
1. 移動平均線クロスEA:トレンドフォローの基本形
もっとも基本的なインジケーターEAの一つが、移動平均線(Moving Average)のクロスを使ったトレンドフォロー戦略です。
売買ルールの例(買いのみ)
・期間10の単純移動平均線(MA1)と期間30の単純移動平均線(MA2)を使う
・MA1がMA2を下から上に抜けたら買いエントリー
・エントリー後、一定のpipsで利確・損切りを行う(例:TP=40pips、SL=30pips)
・逆クロス(MA1がMA2を上から下に抜けた)で決済、もしくはドテン売りにするかは好みで決める
EAで使う場合、実際の条件式は次のようなイメージになります。
・一つ前の足では MA1 < MA2 だった
・今確定した足では MA1 > MA2 になった
この「一つ前と今の足で状態が変化した瞬間」を検知することで、クロスを検出します。
// 疑似コードイメージ
double maFastPrev = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
double maSlowPrev = iMA(NULL, 0, 30, 0, MODE_SMA, PRICE_CLOSE, 1);
double maFastNow = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 0);
double maSlowNow = iMA(NULL, 0, 30, 0, MODE_SMA, PRICE_CLOSE, 0);
// ゴールデンクロス判定
if(maFastPrev < maSlowPrev && maFastNow > maSlowNow) {
// 買いエントリー
}
初心者がやりがちなのは「今の足の条件だけで判定する」ことですが、それだとクロスした瞬間かどうかがわからず、同じ足の中で何度も注文を出してしまう可能性があります。一つ前の足との比較で「変化」を見ることが、インジケーターEAでは非常に重要なポイントです。
2. RSI押し目買いEA:逆張りとトレンドフォローのハイブリッド
RSI(相対力指数)は「買われすぎ」「売られすぎ」を見るオシレーター系インジケーターです。EAでは、トレンド方向を移動平均線で確認しながら、RSIで押し目を狙うロジックがよく使われます。
売買ルールの例(買いのみ)
・期間50の移動平均線で長期トレンドをチェック
・価格がMA50より上にあるときだけ「上昇トレンド」とみなす
・RSI(14)が30以下まで下がった後、30を上抜けた足で押し目買いエントリー
・利確は最近の高値付近、損切りは直近安値割れ、または固定pipsで設定
条件式のイメージは次の通りです。
// トレンド判定
double maTrend = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 0);
double closePrice = Close[0];
bool isUpTrend = (closePrice > maTrend);
// RSI押し目判定
double rsiPrev = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);
double rsiNow = iRSI(NULL, 0, 14, PRICE_CLOSE, 0);
bool isRsiRebound = (rsiPrev <= 30 && rsiNow > 30);
if(isUpTrend && isRsiRebound) {
// 押し目買いエントリー
}
このように、RSI単体ではなく移動平均線と組み合わせて「大きな流れの中の押し目」だけを拾うロジックにすると、無秩序な逆張りになりにくくなります。
3. MACDトレンドフォローEA:ダマシを減らすフィルターとして使う
MACDはトレンドの強さと方向を示すインジケーターです。EAでは、移動平均クロスやブレイクアウトのフィルターとして使い、「トレンドが十分に強いときだけエントリーする」という使い方が有効です。
売買ルールの例
・移動平均クロス(期間10と30)でエントリー方向を決める
・同時に、MACDヒストグラムが0より上のときだけ買い、0より下のときだけ売りを許可する
・これにより、レンジ相場のノイズ的なクロスをある程度ふるい落とす
MQL4では、iMACD関数を使ってMACD値を取得できます。
double macdMain, macdSignal;
macdMain = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0);
macdSignal = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0);
double macdHist = macdMain - macdSignal;
bool allowBuy = (macdHist > 0);
bool allowSell = (macdHist < 0);
「移動平均クロスで方向を決めつつ、MACDヒストグラムがその方向と一致しているときだけエントリーする」というフィルターをかけるだけでも、バックテスト上の無駄なトレードがかなり減るケースがあります。
4. ボリンジャーバンドブレイクEA:レンジからの飛び出しを狙う
ボリンジャーバンドは価格の分布幅を示す指標で、+2σや-2σ付近は「統計的に見てあまり出現しないゾーン」として扱われることが多いです。EAでは、このバンドを「レンジの外側」として扱い、ブレイクアウトや逆張りの起点にすることができます。
ここでは、シンプルなブレイクアウト戦略の例を挙げます。
売買ルールの例(買いのみ)
・ボリンジャーバンド(期間20、偏差2)を使用
・終値がバンドの+2σを上抜けた足で買いエントリー
・利確は一定pipsまたはトレーリングストップ
・損切りはミドルバンド(20MA)割れ、または固定pips
double upperBand = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 0);
double middleBand = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_MAIN, 0);
double closeNow = Close[0];
if(closeNow > upperBand) {
// ブレイクアウト買いエントリー
}
ボリンジャーバンド系EAの注意点は、ボラティリティが低いレンジ相場ではダマシが多発しやすいことです。そのため、ATRなどのボラティリティ指標を組み合わせて「一定以上のボラがある時だけ動かす」といった工夫も有効です。
インジケーターEA設計の基本ルール:パラメータと時間軸の決め方
インジケーターEAを作るときに、初心者がつまずきやすいポイントが「パラメータの決め方」と「時間軸の選び方」です。ここでは、最低限おさえておきたい考え方を整理します。
時間軸(タイムフレーム)の選び方
・スキャルピング系EA:M1、M5などの超短期足が中心。ただしスプレッドや約定力の影響を非常に受ける。
・デイトレード系EA:M15〜H1あたりが中心。ノイズと機会のバランスが良く、初心者には扱いやすい。
・スイング系EA:H4やD1などの長期足。トレード回数は減るが、ノイズは少なくなりやすい。
最初の一本目のEAを作るのであれば、M15またはH1あたりをおすすめします。超短期足よりもノイズが減り、バックテスト結果も比較的安定しやすいからです。
パラメータの初期値の決め方
・移動平均線:短期5〜15、長期20〜50あたりからスタートし、バックテストで調整
・RSI:期間14が標準、閾値30/70または20/80を中心に検証
・MACD:標準(12,26,9)からスタートし、いきなりいじりすぎない
・ボリンジャーバンド:期間20、偏差2.0がベース。偏差を1.5〜2.5の範囲で検証
重要なのは、「最初から完璧なパラメータを探そうとしない」ことです。まずは直感的に妥当だと思える標準値を使い、そのうえでバックテストを通じて少しずつ調整していきます。
リスク管理とポジションサイズ:インジEAでも絶対に外せない部分
どれだけ優れたインジケーターEAでも、ロット管理や損切りがいい加減だと簡単に口座が破綻してしまいます。特に自動売買は24時間機械的にトレードを続けるため、人間の感覚よりも早く損失が積み上がる点に注意が必要です。
シンプルな考え方として、次のようなルールをおすすめします。
・1トレードあたりの損失許容額を口座残高の1〜2%程度に抑える
・SL(損切り幅)が広い戦略ほどロットを小さくする
・複数通貨ペアで同時運用するときは、合計リスクが膨らみすぎないようにする
例えば、口座残高10万円、1トレードあたりの許容損失を2%(2,000円)と決めた場合、損切り幅を30pipsにするなら、1pipsあたりの価値は約66円(=2,000円÷30pips)までに抑える必要があります。通貨ペアにもよりますが、この考え方をベースにロット数を決めていきます。
MT4ストラテジーテスターでの検証ステップ
EAが完成したら、いきなりリアル口座で動かすのではなく、必ずMT4のバックテスト機能(ストラテジーテスター)で検証します。基本的な手順は次の通りです。
1. MT4のメニューから「表示」→「ストラテジーテスター」を開く
2. テストするEAを選択
3. 通貨ペア・時間足・期間を設定
4. モデリング精度を「始値のみ」から始め、慣れてきたら「全ティック」にも挑戦
5. スプレッドは実際の口座に近い値に設定
6. テスト実行後、損益曲線、ドローダウン、勝率、平均損益などを確認
7. パラメータを少しずつ変えながら結果を比較
バックテストを行う際の注意点として、次のようなものがあります。
・短期間だけ成績が良いパラメータに過度に最適化しない(過剰最適化)
・片側だけの相場(上昇トレンドだけなど)に偏った期間でテストしない
・通貨ペアや時間足を変えたときにも極端に崩れないかを確認する
インジケーターEAの真価は、長期的に見て「大負けしにくい」かどうかにあります。短期的な爆発力だけを追うと、ある日突然大きなドローダウンを食らうリスクが高まります。
実践例:移動平均クロス+RSIフィルターEAを組み立てる流れ
最後に、ここまでの内容を組み合わせた具体例として、「移動平均クロス+RSI押し目フィルターEA」を設計する流れを簡潔にまとめます。
1. コンセプトを言語化する
・基本はトレンドフォロー(移動平均クロス)
・上昇トレンド中でも、一度押し目をつけてから再上昇したポイントだけを狙いたい
・無駄なエントリーを減らし、勝率とリスクリワードのバランスを改善したい
2. 具体的なルールに落とし込む
・MA(10)がMA(30)を上抜けたら「上昇トレンド」とみなす
・その後、RSI(14)が30以下まで下落し、再び30を上抜けた足で買いエントリー
・損切りは直近スイング安値の少し下、または30pips固定
・利確はリスクリワード1:1.5〜2を目安に設定
・同時に複数ポジションは持たない
3. MQL4のロジックに変換する
OnTick内で、次の順序で処理します。
1. ポジションの有無をチェック
2. ポジションがない場合のみ、移動平均クロスの発生を確認
3. クロス後の一定期間内に、RSIが30を下回り、30を上抜けたかどうかを確認
4. 条件が揃ったら買いエントリー(ロットは口座残高から計算)
5. ポジション保有中は、損切り・利確の条件を監視し、該当すれば決済
コードとしては、前述のMAクロスとRSI押し目のロジックを組み合わせれば実装できます。最初は多少ぎこちなくても構わないので、「自分の頭の中のイメージを条件式に変換する」ことを徹底して練習すると、次第にEA設計のスピードと精度が上がっていきます。
まとめ:インジケーターEAは「小さく作って、検証しながら育てる」
インジケーターを使ったEA自作は、一見すると難しそうに感じるかもしれませんが、やっていることは次の3ステップに集約されます。
1. 裁量でやっていることを、インジケーターの条件式に変換する
2. その条件式をMQL4のコードとしてOnTick内に実装する
3. MT4のストラテジーテスターで検証と調整を繰り返す
最初から完璧なEAを作る必要はありません。むしろ、「シンプルだけれど自分で意味が理解できるロジック」を一つ動かし、そこから少しずつインジケーターを追加したり、パラメータを調整したりしながら育てていく方が、結果的に多くの学びと経験値を得られます。
この記事を参考に、まずは移動平均線やRSIなどの基本インジケーターだけを使ったEAを一本作り、バックテストで動きを確認してみてください。チャートを眺めているだけでは見えなかった相場の癖や、自分のトレードの弱点が、数字と履歴として浮かび上がってくるはずです。


コメント