本記事では、FXで広く利用されているMT4(MetaTrader4)を使って、移動平均線とRSIという基本インジケーターを組み合わせた自動売買EAを自作する手順を、できるだけ平易な言葉で丁寧に解説します。
裁量トレードだけに頼っていると、「エントリーのタイミングに迷って乗り遅れる」「感情に振り回されて損切りが遅れる」といった悩みを抱えやすいです。EA(エキスパートアドバイザー)を自作してルール通りにトレードさせることで、こうした感情的なミスを減らすことが期待できます。
MT4自動売買の全体像:裁量トレードとの違い
まず、MT4の自動売買がどのような仕組みになっているのかを整理します。MT4における自動売買は、MQL4という専用言語で書かれたプログラム(EA)をチャートに適用し、そのロジックに従って売買を自動で行う仕組みです。
裁量トレードと比べたときの主な違いは次のとおりです。
- 感情を排除し、ルール通りにエントリー・決済を行う
- 24時間チャートを監視し続けることができる(PCやVPSが稼働している前提)
- 事前にバックテストで過去チャートに対する成績を確認できる
一方で、EAは「過去にこうだったから、未来も同じように動く」という仮定に基づくため、相場環境が変化すると成績が崩れるリスクがあります。また、プログラムのバグや想定外の値動きによって、意図しないポジションが建つ可能性もあります。自動売買は便利ですが、万能ではないことを理解しておくことが重要です。
今回作るEAのコンセプト:移動平均線×RSIのシンプル戦略
本記事では、トレンド方向を移動平均線で判断し、エントリーのタイミングをRSIで絞り込む、シンプルな自動売買EAを題材にします。FXの主要通貨ペア(例:EURUSD、USDJPY)を想定し、時間足は1時間足(H1)を基準とします。
コンセプトは次のようになります。
- トレンド判定:短期移動平均線と長期移動平均線の位置関係で上昇トレンドか下降トレンドかを判定
- エントリー:トレンド方向に対して、RSIが一時的に行き過ぎたタイミングで押し目買い・戻り売りを狙う
- 決済:固定のストップロスとテイクプロフィット、もしくは移動平均線のクロスを利用した決済
- リスク管理:1つの通貨ペアにつき、同時保有ポジションは1つに制限
細かいパラメータは後ほど調整できますが、最初は「シンプルで理解しやすいこと」を優先したほうが、検証・改善がしやすくなります。
環境準備:MT4とデモ口座を用意する
EAを作って動かすためには、MT4本体と、MT4対応のデモ口座が必要です。多くのFX会社が無料でデモ口座を提供しており、MT4のダウンロードリンクも用意されています。まずはデモ口座を開設し、MT4にログインできる状態にしておきます。
MT4のインストール後は、以下の点も確認しておくとスムーズです。
- チャートの時間足を1時間足(H1)に設定
- 自動売買ボタン(ツールバーの「AutoTrading」)がONにできることを確認
- ヒストリカルデータ(過去データ)がある程度取得されていることを確認
実際の資金を使う前に、必ずデモ口座や少額資金で挙動を確認することが重要です。EAはあくまで道具であり、動作を理解しないまま全資金を任せるのは非常にリスクが高いです。
インジケーターの基礎を押さえる:移動平均線とRSI
移動平均線(MA)の役割
移動平均線は、一定期間の終値の平均を線で結んだもので、トレンドの方向や強さを視覚的に把握するために使われます。一般的には、
- 短期移動平均線が長期移動平均線の上にある:上昇トレンド
- 短期移動平均線が長期移動平均線の下にある:下降トレンド
といった形で、トレンドの向きを判断します。本記事では、例として「短期:20期間」「長期:50期間」の単純移動平均線(SMA)を使います。20SMAが50SMAの上にあるときは買い目線、下にあるときは売り目線とします。
RSIの役割
RSI(Relative Strength Index)は、一定期間内の上昇幅と下落幅のバランスから「買われすぎ・売られすぎ」を数値化したオシレーター系指標です。通常0〜100の値を取り、一般的には以下のように解釈されます。
- RSIが70以上:買われすぎ
- RSIが30以下:売られすぎ
今回のEAでは、トレンド方向に対する押し目・戻りを狙うために、
- 上昇トレンド中にRSIが30付近まで下がったら買いエントリーを検討
- 下降トレンド中にRSIが70付近まで上がったら売りエントリーを検討
というイメージで使います。パラメータとしては、RSIの期間14、買い条件として「RSI <= 30」、売り条件として「RSI >= 70」などが典型例です。
売買ロジックの設計:文章で明確なルールに落とし込む
いきなりコードを書き始めるのではなく、まずは「日本語で売買ルールを書き切る」ことが重要です。これがそのままEAの仕様書になります。
例として、次のようなルールを決めてみます。
ロング(買い)エントリーの条件
- 時間足:H1(1時間足)
- 短期MA(20SMA)が長期MA(50SMA)より上にある(上昇トレンド)
- RSI(14)が30以下になったタイミングで、次の足の始値で買い
- 同一通貨ペアではポジションは1つまで
ショート(売り)エントリーの条件
- 短期MA(20SMA)が長期MA(50SMA)より下にある(下降トレンド)
- RSI(14)が70以上になったタイミングで、次の足の始値で売り
- 同一通貨ペアではポジションは1つまで
決済ルール
- ストップロス:エントリー価格から20pips逆行したら損切り
- テイクプロフィット:エントリー価格から40pips有利に進んだら利確
- 移動平均線が逆方向にクロスしたら成行で手仕舞い(任意の追加ルール)
ストップロスとテイクプロフィットの幅は、通貨ペアやボラティリティに応じて調整が必要です。最初はシンプルに固定値で始め、バックテストの結果を見ながら調整していくと良いです。
MQL4でEA作成の準備:MetaEditorの基本操作
MT4のメニューから「ツール」→「MetaQuotes Language Editor」を選ぶと、MQL4のソースコードを編集するためのMetaEditorが開きます。新しいEAを作るときは、
- 「ファイル」→「新規作成」→「エキスパートアドバイザ(テンプレート)」を選択
- EAの名前を入力(例:MA_RSI_AutoTrader)
- 作成されたテンプレートの中身を、自分のロジックに合わせて書き換える
という流れになります。テンプレートにはすでにOnInit、OnDeinit、OnTickといった関数が用意されており、主にOnTickの中に売買ロジックを書いていきます。
サンプルEAコード:移動平均×RSIの自動売買ロジック
ここでは、先ほど設計したロジックをMQL4で実装したサンプルコードを示します。実際に利用する際は、必ずデモ口座で動作を確認し、自分の環境に合わせてパラメータやロジックを調整してください。
//+------------------------------------------------------------------+
//| MA_RSI_AutoTrader|
//| Simple MA & RSI based EA |
//+------------------------------------------------------------------+
#property strict
input double Lots = 0.10;
input int StopLossPips = 20;
input int TakeProfitPips = 40;
input int FastMAPeriod = 20;
input int SlowMAPeriod = 50;
input int RSIPeriod = 14;
input int BuyRSILevel = 30;
input int SellRSILevel = 70;
input int Slippage = 3;
input int MagicNumber = 123456;
bool HasOpenPosition(string symbol)
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == symbol && OrderMagicNumber() == MagicNumber)
return(true);
}
}
return(false);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
string symbol = _Symbol;
if(HasOpenPosition(symbol)) return;
int tf = PERIOD_H1;
int shift = 1; // 1本前の確定足で判断
double fastMA = iMA(symbol, tf, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, shift);
double slowMA = iMA(symbol, tf, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, shift);
double rsi = iRSI(symbol, tf, RSIPeriod, PRICE_CLOSE, shift);
if(fastMA == 0 || slowMA == 0 || rsi == 0) return;
double point = Point;
if(Digits == 3 || Digits == 5) point = Point * 10;
double ask = NormalizeDouble(Ask, Digits);
double bid = NormalizeDouble(Bid, Digits);
// ロング条件:上昇トレンド + RSIが買われすぎではなく押し目
if(fastMA > slowMA && rsi <= BuyRSILevel)
{
double sl = ask - StopLossPips * point;
double tp = ask + TakeProfitPips * point;
int ticket = OrderSend(symbol, OP_BUY, Lots, ask, Slippage, sl, tp, "MA_RSI_Buy", MagicNumber, 0, clrNONE);
}
// ショート条件:下降トレンド + RSIが売られすぎではなく戻り
if(fastMA < slowMA && rsi >= SellRSILevel)
{
double sl = bid + StopLossPips * point;
double tp = bid - TakeProfitPips * point;
int ticket = OrderSend(symbol, OP_SELL, Lots, bid, Slippage, sl, tp, "MA_RSI_Sell", MagicNumber, 0, clrNONE);
}
}
このEAは、1時間足チャートに適用した場合、1つ前の確定足の移動平均線とRSIの値をもとに売買判断を行い、ポジションを保有していないときにだけ新規エントリーを行います。ストップロスとテイクプロフィットは固定pipsで設定しています。
バックテストでEAの動きを確認する方法
EAを作成したら、いきなりリアル口座で動かすのではなく、MT4のストラテジーテスターで過去データに対してバックテストを行うことが大切です。手順は次のとおりです。
- MT4のメニューから「表示」→「ストラテジーテスター」を開く
- エキスパートアドバイザに先ほど作成したEAを選択
- 通貨ペア、期間(H1)、テスト期間、初期証拠金などを設定
- 「スタート」を押してテストを実行
テスト結果では、損益曲線や勝率、最大ドローダウンなどを確認できます。ここで重要なのは、「結果が良いからといって、将来も必ず同じように勝てるとは限らない」という点です。バックテストはあくまで過去データに対するシミュレーションであり、将来の利益を保証するものではありません。
実運用前にチェックしておきたいポイント
EAを実際の運用に近づけていく前に、次のようなポイントをチェックしておくと、極端なリスクを避けやすくなります。
- ロットサイズ:口座資金に対して過大になっていないか(例:資金10万円で0.10ロットはリスクが高すぎる場合が多い)
- 同時保有ポジション数:他のEAや通貨ペアとの兼ね合いで、全体のリスクが大きくなっていないか
- スプレッドやスリッページ:スプレッドが広い時間帯では成績が悪化しやすいこと
- VPSなどの稼働環境:PCの電源OFFや通信障害によるEA停止リスク
また、リアル口座でいきなり大きなロットを使うのではなく、少額から段階的にリスクを調整していくことが現実的です。相場環境の変化によってEAが機能しづらくなる時期もあるため、定期的にバックテストやフォワードテストの結果を見直し、必要に応じてロジックの見直しや停止判断を行う姿勢が重要です。
発展アイデア:自分なりのEAにカスタマイズする
ここまで解説したEAは、あくまで「移動平均線とRSIを組み合わせた、ごく基本的な自動売買ロジック」の一例です。実際の運用では、この土台の上に、自分なりのアイデアを少しずつ加えていくことで、より自分のトレードスタイルに合ったEAに育てていくことができます。
例えば、次のような拡張が考えられます。
- ボラティリティ(ATRなど)を利用して、相場が静かなときはトレード回数を減らす
- 重要な経済指標の前後は新規エントリーを控えるロジックを追加する
- 複数時間足(上位足のトレンド方向と下位足のタイミング)を併用する
- 損切り・利確を固定pipsではなく、直近高値・安値や移動平均線の位置を目安にする
最初から完璧なEAを作ろうとする必要はありません。むしろ、1つのシンプルなロジックを動かし、その挙動を観察しながら「どこが弱点なのか」「どの場面で負けやすいのか」を理解していくプロセスこそが、EA作成の大きな学びになります。
まとめ:自作EAは「小さく作って、検証しながら育てる」
MT4で自動売買EAを自作する流れは、
- 売買アイデアを日本語で明文化する(ルールを文章で書き切る)
- インジケーターの役割とパラメータを理解する
- MQL4でEAとして実装する(今回のようなサンプルをベースにカスタマイズ)
- バックテストで過去データに対する挙動を確認する
- デモ口座や少額でフォワードテストを行い、必要に応じて調整する
というステップに分解できます。最初の一歩は難しく感じるかもしれませんが、一度「シンプルなEAを自分で動かすところ」まで到達すると、売買アイデアをプログラムに落とし込んで検証するサイクルを自力で回せるようになります。
自動売買は、リスクを完全に排除してくれる魔法の道具ではありませんが、ルールに基づいたトレードを徹底し、検証と改善を繰り返すための強力なツールになり得ます。小さく試しながら、自分のスタイルに合ったEAを少しずつ育てていく発想で取り組んでみてください。


コメント