この記事では、FX初心者でも扱いやすいMT4(MetaTrader4)を使って、「移動平均線」と「RSI」を組み合わせたシンプルな自動売買EA(エキスパートアドバイザー)を自作する方法について解説します。難しい数式や高度なプログラミングは最小限に抑えつつ、「どういうロジックで売買するのか」「どこにリスクがあるのか」を丁寧に確認しながら進めていきます。
MT4自動売買の全体像をまず押さえる
最初に、MT4で自動売買を動かす流れをざっくり押さえておきます。流れが分かっていると、途中でつまずいたときに「自分はいまどこで止まっているのか」が把握しやすくなります。
MT4のEAによる自動売買は、次のようなステップで構成されます。
① 売買ルール(ロジック)を決める
② そのルールをMQL4という言語でEAとして実装する
③ MT4のテスター画面でバックテストして挙動と成績を確認する
④ 実弾を入れる前にデモ口座でフォワードテストを行う
⑤ 問題なければ少額からリアル口座で運用を開始する
今回の記事では、とくに①と②の部分を丁寧に分解し、初心者でも迷わないように解説します。
今回作るEAの売買コンセプト
まずは、今回作るEAの「売買アイデア」を明確にします。インジケーターを闇雲に並べるのではなく、「どういう相場でどう利益を狙うのか」を言語化することが重要です。
コンセプト:トレンド方向に押し目・戻り目でエントリー
今回のEAは、移動平均線で大きな流れ(トレンド方向)を確認し、RSIで「一時的に逆行したタイミング(押し目・戻り目)」をとらえてエントリーするという、非常にベーシックなトレンドフォロー戦略です。
具体的には、以下のようなイメージです。
・短期足では上下に振れるが、中期的には上昇トレンドが続いている
・一時的に売りが強くなりRSIが30近辺まで下がる
・しかし移動平均線はまだ上向きで、価格も移動平均線より上で推移している
→「トレンドは続いているが、一時的に売られ過ぎ」と判断して押し目買い
逆に、下降トレンドの中でRSIが70近辺まで上がったところを戻り売りのチャンスとみなします。
使用するインジケーターの設定
EAで使うインジケーターのパラメータは、最初から奇をてらわず、まずは王道設定からスタートするのがポイントです。今回は、次の設定を使います。
移動平均線(SMAもしくはEMA)
・期間:50
・種別:SMA(単純移動平均線)でもEMAでもよいが、まずはSMAで十分
・適用価格:Close(終値)
期間50は、1時間足なら約2日分、4時間足なら約1週間分、日足なら約2ヶ月分というイメージで、中期のトレンドを捉えやすい設定です。
RSI(Relative Strength Index)
・期間:14
・買われ過ぎ水準:70
・売られ過ぎ水準:30
RSI14は多くのトレーダーが使う「標準設定」です。シンプルに、RSIが30を下回ってから上に戻る動きが出たら「押し目買い候補」、RSIが70を上回ってから下に戻る動きが出たら「戻り売り候補」として扱います。
EAに落とし込む売買ルールの詳細
次に、このインジケーター設定をもとに、EAが自動売買で実行するルールをはっきり定義します。ここを言語化しておくと、コードを書くときに迷いが少なくなります。
買いエントリー条件
買いエントリーの条件を、次のように定めます。
1)終値が移動平均線50の上にある(トレンドは上方向)
2)RSIがいったん30を下抜け、その後30を上抜けた(売られ過ぎからの回復)
3)現在ポジションを持っていない
この3つがそろったら買いエントリーします。「いったん30を下抜けてから30を上抜ける」という条件にすることで、「すでに売られ過ぎゾーンから反転し始めたタイミング」を狙うイメージになります。
売りエントリー条件
売りエントリーの条件は、買いの逆です。
1)終値が移動平均線50の下にある(トレンドは下方向)
2)RSIがいったん70を上抜け、その後70を下抜けた(買われ過ぎからの反転)
3)現在ポジションを持っていない
こちらも、「買われ過ぎのピークをつけてから戻り始めたタイミング」を狙うイメージです。
決済ルール(利確・損切り)
エントリー条件と同じくらい重要なのがエグジット(決済)のルールです。今回の記事では、初心者にも分かりやすいように「固定幅の損切り・利確」と「時間による決済」の2つを採用します。
・損切り幅:エントリー価格から30pips逆行したら損切り
・利確幅:エントリー価格から60pips有利に進んだら利確
・最大保有時間:エントリーから48時間経過したら成行決済
このルールだと、勝ちトレード1回で負けトレード2回をカバーできる「リスクリワード1:2」の設計になります。もちろん、通貨ペアや時間足によって最適値は変わるため、バックテストを通じて調整していきます。
MQL4でEAを書くときの基本構造
売買ルールが固まったら、次はMQL4でEAを書くステップです。ここではコード全文ではなく、構造の考え方を押さえることに重点を置きます。
EAの基本構造
MQL4のEAは、大きく次の3つのパートで構成されます。
1)OnInit():EAの初期化処理を書く部分
2)OnDeinit():EAをチャートから外すときの後片付けを書く部分
3)OnTick():ティックが来るたびに実行されるメインロジック
自動売買ロジックのほとんどは、OnTick()の中に記述します。ここに、「インジケーターの値を取得する処理」「売買条件をチェックする処理」「エントリー・決済の注文を出す処理」をまとめていきます。
インジケーター値を取得する
移動平均線とRSIの値は、それぞれiMA()とiRSI()という関数で取得できます。たとえば、直近確定足の移動平均線50の値は次のように書けます。
double ma = iMA(NULL, PERIOD_H1, 50, 0, MODE_SMA, PRICE_CLOSE, 1);
ここで、最後の「1」は「1本前の確定足」を意味します。同様にRSIも、iRSI()で取得し、1本前・2本前の値を比較することで「30を下抜けてから上抜けたか」を判定します。
エントリー条件の実装イメージ
買いエントリー条件を実装する場合の考え方を、擬似コードで示します。
if (ポジションなし) {
ma = 移動平均線50の値;
rsi_now = 現在足のRSI14;
rsi_prev = 1本前のRSI14;
if (終値 > ma) {
if (rsi_prev <= 30 && rsi_now > 30) {
買いエントリー;
}
}
}
売りエントリーも同様に、「終値 < ma かつ RSIが70を上から下に抜けたタイミング」で売りエントリーします。
リスク管理とロットサイズの決め方
EAを動かすうえで、ロットサイズの決め方は非常に重要です。どんな優れたロジックでも、ロットを大きくしすぎれば一時的なドローダウンで口座が耐えきれません。
1トレードあたりの許容リスクを決める
まず、「1回のトレードで口座残高の何%までの損失を許容するか」を決めます。初心者であれば、1トレードあたり口座残高の1%以内に抑えるのが無難です。
例えば口座残高が10万円で、1トレードあたりの許容損失を1%(1,000円)に設定するとします。損切り幅が30pipsであれば、1pipsあたりの価値が約33円になるようにロットを調整する必要があります。通貨ペアや口座仕様によってpipsの価値は変わるため、事前に計算式を確認しておきましょう。
ロットを固定しないメリット
ロットを固定してしまうと、口座残高が増えても減ってもリスクの割合が変動し、長期的な資金管理が難しくなります。一方、「口座残高 × リスク% ÷ 損切りpips ÷ 1pips価値」の式でロットを毎回計算すれば、常に一定のリスク割合で運用できます。
バックテストで必ず確認すべきポイント
EAが完成したら、いきなりリアル運用に移るのではなく、まずはストラテジーテスターでバックテストを行います。ここでは「どの数字を見るべきか」を整理します。
1. 期間と通貨ペア
・最初は1つの通貨ペア(例:EURUSD)に絞る
・期間は少なくとも数年分を確認する(例:2018年〜直近)
・時間足はロジックに合わせて選ぶ(今回は1時間足や4時間足が現実的)
2. 損益カーブの形
純利益がプラスであること以上に、「損益カーブが右肩上がりで大きな崩れがないか」を確認します。途中で大きなドローダウンが何度も出るようなら、ロジックやパラメータを見直す必要があります。
3. ドローダウンと勝率・リスクリワード
・最大ドローダウンが口座残高の何%か
・勝率に比べてリスクリワードは適切か(例:勝率40%でもリスクリワード1:3なら十分戦える)
今回のようなトレンドフォロー系EAは、レンジ相場で連敗が出やすいため、リスクリワードをやや有利にしておくことが重要です。
実運用前のフォワードテスト
バックテストだけでは、スプレッド拡大時の挙動や、約定のズレなどを十分に反映しきれません。そのため、実際のレート配信に近い環境でフォワードテストを行うことが大切です。
デモ口座でのフォワードテスト
・EAをデモ口座にセットして数週間〜数ヶ月動かす
・バックテストの傾向と同じような損益パターンになるか確認する
・想定外のタイミングでエントリー・決済していないかをチェックする
ここで明らかにバックテストと違う挙動をするようであれば、タイムフレームの設定やインジケーター取得のロジックなどに問題がないかコードを見直します。
少額リアル運用への移行
デモでのフォワードテストで大きな問題がなければ、次は少額のリアル資金で運用を開始します。いきなり全資金を投入するのではなく、「このEAが完全に止まっても生活に影響のない金額」から始めることが重要です。
また、リアル運用開始直後は、1日1回はMT4の稼働状況を確認し、VPSや回線トラブルが起きていないかをチェックします。
実際の相場環境に合わせてチューニングする
EAは一度作って終わりではありません。相場環境が変われば、インジケーターのパラメータやロット設計も見直す必要があります。
トレンド相場とレンジ相場を見分ける工夫
今回のEAはトレンドフォロー型なので、長期的にレンジが続く相場では苦戦しやすくなります。簡単な工夫として、ATRやボリンジャーバンドの幅を参考に、「一定以上のボラティリティがあるときだけ稼働する」ようなフィルターを追加するのも有効です。
時間帯フィルターの導入
FX市場は時間帯によって特徴が異なります。たとえば、ロンドン市場〜ニューヨーク市場が重なる時間帯は値動きが大きくなりやすく、アジア時間は比較的レンジになりやすい傾向があります。EAに「エントリーしてよい時間帯」を制限するだけでも、無駄なエントリーを減らせる場合があります。
まとめ:シンプルなロジックから始めて、徐々に精度を高める
今回は、移動平均線とRSIという基本的なインジケーターを組み合わせたシンプルなEAを題材に、MT4で自動売買を行うまでの流れを解説しました。
・まずは売買コンセプトを言語化する
・移動平均線でトレンド方向を、RSIで押し目・戻り目をとらえる
・MQL4でインジケーター値を取得し、エントリー条件と決済条件をコード化する
・リスクを1トレードあたり口座の数%に抑え、ロットを調整する
・バックテスト → デモでのフォワードテスト → 少額リアルの順で段階的に進める
この流れを一度体験すれば、MACDやボリンジャーバンド、ストキャスティクスなど別のインジケーターを組み合わせたEAにも応用できます。最初はシンプルなロジックから始めて、経験を積みながら少しずつ改良を重ねていくことが、自動売買で長く相場と付き合うための現実的なアプローチです。


コメント