本記事では、MetaTrader4(MT4)を使って、移動平均線とRSIという基本的なインジケーターを組み合わせたシンプルな自動売買EA(エキスパートアドバイザー)を自分で作る方法を解説します。裁量トレードでチャートを見ながら売買するのではなく、あらかじめ決めたルールをプログラムにし、24時間ルール通りに取引させるのがEAです。
専門的な数式を暗記する必要はありません。ここではFXの初心者でも理解しやすいように、「なぜそのロジックなのか」「どこを変えれば自分好みにできるのか」を、できるだけ噛み砕いてお伝えします。具体的なMQL4コードのサンプルも掲載しますので、そのままコピペして動かしながら学ぶことができます。
MT4で自動売買を行う基本の流れ
EAを自作して運用するための全体の流れは、大きく分けると次のようになります。
- 1. 取引ルール(売買ロジック)を紙に書き出す
- 2. そのルールをMQL4のコードに落とし込む
- 3. MT4の「ナビゲーター」からEAをチャートに適用する
- 4. ストラテジーテスターで過去検証を行う
- 5. デモ口座や小さなロットで試運用する
- 6. リスク管理ルールを決めて本格運用に移行する
いきなり複雑なロジックから始めると、うまく動かないときに原因が分からず挫折しがちです。まずは非常にシンプルなロジックを作り、「売買シグナルの判断」「ポジションの保有と決済」「ロットや損切りの設定」といったEAの基本構造に慣れることが重要です。
今回作るEAのコンセプト
今回は、トレンド方向を移動平均線で判断し、エントリーのタイミングをRSIで測るという、ごく基本的な組み合わせを使います。コンセプトは次の通りです。
- 上昇トレンドのときは押し目買いだけを狙う
- 下降トレンドのときは戻り売りだけを狙う
- 買われ過ぎ・売られ過ぎの極端なところではなく、「ほどよい押し/戻し」を狙う
- 損切りと利確はあらかじめ固定pipsで決めておく
トレンド方向とエントリータイミングの役割を分けることで、ロジックの見通しが良くなり、改良もしやすくなります。
使用するインジケーターの基礎
移動平均線(Moving Average)
移動平均線は、一定期間の終値の平均を線で結んだインジケーターです。期間が長いほど価格変動をなだらかに慣らし、全体的なトレンドを掴みやすくなります。今回は「期間50」の単純移動平均線(SMA)を使い、中期的なトレンド方向をざっくり判断することにします。
具体的には、次のように解釈します。
- 現在価格がSMA50より上 → 上昇トレンド
- 現在価格がSMA50より下 → 下降トレンド
RSI(Relative Strength Index)
RSIは「買われ過ぎ・売られ過ぎ」を数値(0〜100)で表すオシレーター系インジケーターです。一般的には、70以上で買われ過ぎ、30以下で売られ過ぎと判断しますが、今回は少し発想を変えます。
強い上昇トレンド中は、RSIがなかなか30まで下がってこないことが多く、70以上に張り付いたままになることもあります。そのため、押し目を拾う目安として「RSIが50〜40まで下がったところ」を狙う、という考え方が実践的です。下降トレンドではその逆を考えます。
売買ルールを文章で定義する
EAを作る前に、必ず日本語でルールを書き出します。今回のロジックは次のように整理できます。
ロングエントリーの条件
- 現在のBid価格がSMA50より上にある(上昇トレンド)
- RSI(期間14)が直近で40以下まで下がったあと、再び40を上抜けたタイミング
- すでに買いポジションを持っていないこと
イメージとしては、「上昇トレンド中に一旦押してRSIが40以下まで下がり、その後再び持ち直してきたところで押し目買い」という形です。
ショートエントリーの条件
- 現在のBid価格がSMA50より下にある(下降トレンド)
- RSI(期間14)が直近で60以上まで上がったあと、再び60を下抜けたタイミング
- すでに売りポジションを持っていないこと
こちらは、「下降トレンド中に一旦戻してRSIが60以上まで上がり、その後再び下方向に折れたところで戻り売り」を狙う考え方です。
決済ルール
- ロング・ショートともに、あらかじめ決めたpipsで利確と損切りを設定(例:TP=40pips、SL=20pips)
- 指値・逆指値で自動的に決済させ、EA側では特別な決済ロジックを持たない
最初は決済ロジックをシンプルにしておくことで、EAがどのタイミングでエントリーしているのかに集中して検証できます。慣れてきたらトレーリングストップや時間決済などを追加することも可能です。
MQL4での基本構造を理解する
MT4のEAは、「いつ起動されるか」「どこに売買ロジックを書くか」が決まっています。初心者がまず押さえるべきポイントは以下の2つです。
OnInit():EAをチャートにセットしたとき、最初に一度だけ実行される部分OnTick():新しいティック(価格更新)が来るたびに実行される部分
実際の売買判断は、ほとんどの場合OnTick()の中で行います。ここに「今ポジションを持っているか」「エントリー条件を満たしているか」をチェックするコードを書き、条件を満たしたときにOrderSend()で新規注文を出します。
サンプルEAコード:移動平均線+RSI押し目買い/戻り売り
以下に、今回説明したロジックのシンプルなEAサンプルコードを示します。実運用の前に必ずデモ口座やストラテジーテスターで動作と特性を確認してください。
//+------------------------------------------------------------------+
//| MA & RSI Pullback EA |
//+------------------------------------------------------------------+
#property strict
input double Lots = 0.1;
input int MagicNumber = 123456;
input int MaPeriod = 50;
input int RsiPeriod = 14;
input double TakeProfit = 40;
input double StopLoss = 20;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnTick()
{
// 現在のシンボルと時間足でのみ動作
if(IsTradeAllowed()==false) return;
// 既存ポジション数の確認
int buys = 0;
int sells = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
}
// 価格とインジケーターの取得
double price = Bid;
double ma = iMA(NULL, 0, MaPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
double rsi = iRSI(NULL, 0, RsiPeriod, PRICE_CLOSE, 0);
double rsi_prev = iRSI(NULL, 0, RsiPeriod, PRICE_CLOSE, 1);
// 損切り・利確の価格計算(小数桁数に応じて調整)
double point = Point;
if(Digits==3 || Digits==5) point *= 10;
double sl_buy = price - StopLoss * point;
double tp_buy = price + TakeProfit * point;
double sl_sell = price + StopLoss * point;
double tp_sell = price - TakeProfit * point;
// 上昇トレンドでの押し目買い条件
bool isUpTrend = (price > ma);
bool rsiPullbackBuy = (rsi_prev <= 40 && rsi > 40);
// 下降トレンドでの戻り売り条件
bool isDownTrend = (price < ma);
bool rsiPullbackSell = (rsi_prev >= 60 && rsi < 60);
// ロングエントリー
if(buys==0 && isUpTrend && rsiPullbackBuy)
{
OrderSend(Symbol(), OP_BUY, Lots, price, 3, sl_buy, tp_buy, "MA_RSI_Buy", MagicNumber, 0, clrNONE);
}
// ショートエントリー
if(sells==0 && isDownTrend && rsiPullbackSell)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, sl_sell, tp_sell, "MA_RSI_Sell", MagicNumber, 0, clrNONE);
}
}
このコードは、あくまで学習用のシンプルな例です。スプレッドが広い通貨ペアや、スキャルピングに近い短期足ではうまく機能しない場合もあります。また、約定拒否やリクオート、スリッページ等の現実的な要素への配慮も省略しています。
パラメーターを調整して自分のスタイルに合わせる
EAを自分のものにするためには、「なぜこの値なのか」を理解したうえでパラメーターを調整していくことが大切です。先ほどのコードに登場した主なパラメーターと、調整の考え方を整理します。
- Lots:1回の取引あたりのロット数。口座残高や許容リスクに応じて設定します。
- MaPeriod:移動平均線の期間。短くするとトレンド判定が敏感になり、長くすると鈍感になります。
- RsiPeriod:RSIの期間。標準的には14がよく使われますが、短くすると反応が速く、ノイズも増えます。
- TakeProfit / StopLoss:利確・損切り幅。通貨ペアのボラティリティや時間足に応じて、過去チャートを見ながら調整します。
- RSIの閾値(40、60など):押し目/戻りの深さの目安です。数値を変えることでエントリー頻度や勝率・平均損益が変わります。
例えば、ボラティリティの高い通貨ペアでは、TPとSLを大きめに設定しないとノイズに振り回されやすくなります。一方で、値幅の小さい通貨や時間足では、TPとSLを詰めて回転数を高める戦略も考えられます。
ストラテジーテスターで検証するときのポイント
MT4のストラテジーテスターを使うと、過去データに対してEAを自動で走らせ、損益カーブやトレード履歴を確認できます。検証時には、次のポイントを意識すると良いです。
- 複数の通貨ペア・複数の時間足で挙動を確認する
- 直近数年だけでなく、できれば10年以上の期間をテストしてみる
- プロフィットファクターや勝率だけでなく、最大ドローダウンにも注目する
- 利益が右肩上がりでも、深い含み損や長い連敗がないかを確認する
- テスト結果を見てパラメーターを微調整し、過去データに過度に最適化しないよう注意する
EAの良し悪しは、総損益だけでなく「どのようなリスクを取ってその利益になっているか」で判断する必要があります。連敗が続いても精神的に耐えられるか、口座が破綻しないかという視点も重要です。
よくあるつまずきポイントと対処法
初心者がEA作成でつまずきやすいポイントをいくつか挙げ、その対処法をまとめます。
1. エントリー条件が厳しすぎてほとんどトレードしない
RSIや移動平均線の条件を詰め込みすぎると、過去チャートで見たときには「ここで入りたい」と感じる場面も、EAのルール上は条件を満たしていないことがあります。まずは条件を最小限にし、必要ならあとからフィルターを追加する方が改善しやすくなります。
2. コードは動くが成績が安定しない
EAはあくまで「決めたルールを忠実に実行するだけ」の存在です。相場環境が変われば、同じロジックでも成績は変動します。単一の通貨ペア・時間足だけに依存するのではなく、複数の条件でテストし、特定の相場にだけ偏りすぎていないかを確認することが大切です。
3. 損切りが遠すぎて一度の損失が大きくなる
チャートを見ながら裁量で損切りしていると、つい「もう少し待てば戻るかも」と引き伸ばしてしまいがちです。EAでは、最初から許容リスクをpipsで決めておき、口座残高に対して1回のトレードで失っても良い金額の範囲に収まるようロットを調整することが重要です。
インジケーターを追加して発展させるアイデア
移動平均線とRSIの2つだけでもロジックは成り立ちますが、慣れてきたら次のような拡張も検討できます。
- ボリンジャーバンドを追加し、バンドのミドルライン付近で押し目買い・戻り売りを狙う
- ATR(平均真のレンジ)を用いて、相場のボラティリティに応じてSL・TPの幅を自動調整する
- 上位時間足の移動平均線で大きなトレンド方向を判断し、下位時間足でエントリータイミングを取る
- トレールストップ機能を実装して、含み益が一定以上になったらストップを建値付近まで引き上げる
重要なのは、「なぜそのインジケーターを加えるのか」を自分の言葉で説明できることです。単に他人の設定を真似するのではなく、「トレンドの把握」「押し目・戻りの判断」「ボラティリティの把握」といった役割を意識すると、ロジックの構造が明確になります。
まとめ:小さく作り、検証しながら育てる
MT4での自動売買EA作りは、一見難しそうに見えますが、ステップを分解して取り組めば少しずつ理解が深まっていきます。本記事で扱ったように、まずは移動平均線とRSIといった基本インジケーターを組み合わせたシンプルなロジックから始めるのがおすすめです。
いきなり完璧なEAを目指すのではなく、「まず動くものを作る→過去検証で特徴を把握する→パラメーターを少しずつ調整する」というサイクルを回していくことで、自分の考え方に合ったEAに育てていくことができます。自動売買は、感情に左右されずにルール通りのトレードを継続するための強力なツールです。仕組みを理解し、自分なりのルールを言語化・コード化するプロセスを通じて、相場への理解も一段と深まっていきます。
まずはデモ口座や小さなロットから、リスクを抑えながら試してみてください。EA作りの経験は、裁量トレードを行ううえでもきっと役に立ちます。


コメント