このページでは、MT4(MetaTrader4)で「移動平均線」と「RSI」という基本インジケーターを組み合わせたシンプルな自動売買EAを自分で作る方法を解説します。プログラミング未経験の投資初心者でも、考え方とパターンさえ押さえれば、シンプルなロジックのEAから十分スタートできます。
ここで紹介する内容は、あくまで学習用・検証用のサンプルです。実際に資金を投入する前に、必ずデモ口座やストラテジーテスターで十分な検証を行い、自分でリスクを理解したうえで判断することが重要です。
MT4で自動売買を行うための全体像
まずは、MT4で自動売買を行うときの全体像を整理しておきます。仕組みを俯瞰して理解しておくと、自分でEAを作るときに「どこで何をしているか」が見えやすくなります。
MT4自動売買の基本的な流れは、次のようになります。
1. MT4にEA(Expert Advisor)のファイル(拡張子.ex4または.ex5)を設置する
2. 対象の通貨ペアと時間足のチャートを開く
3. EAをチャートにドラッグ&ドロップする
4. MT4の「自動売買」ボタンをONにする
5. 相場が動くたびにEAがロジックを評価し、条件を満たしたら自動で売買を行う
EAは「条件を満たしたら注文を出すプログラム」です。最も単純な形では、「移動平均線を上抜けしたら買い」「RSIが70を超えたら利確」といったルールを、MQL4という言語で書き下ろしたものになります。
今回作るEAのコンセプト
この記事では、次のようなコンセプトのEAを作ります。
・通貨ペア:任意(例としてUSDJPY)
・時間足:15分足〜1時間足を想定
・インジケーター:移動平均線(SMA)とRSI
・エントリー条件:移動平均線のゴールデンクロス+RSIが50より上なら買い、デッドクロス+RSIが50より下なら売り
・決済条件:一定の利幅・損切幅(固定pips)で利確/ロスカット、もしくは反対シグナルで決済
このロジックは非常にシンプルですが、「トレンド方向を移動平均線で判定し、モメンタムをRSIで補強する」という、テクニカル分析の基本的な考え方に沿っています。複雑なインジケーターをいきなり使うより、まずはシンプルな組み合わせから始めた方が、検証と改善がしやすくなります。
MT4とMQL4の準備
EAを自作するためには、MT4本体だけでなく、MQL4を編集するための「メタエディタ」が必要です。MT4をインストールすると、メタエディタも一緒にインストールされます。
準備の手順は次の通りです。
1. MT4を起動する
2. メニューから「ツール」→「MetaQuotes Language Editor」を開く(もしくはF4キーを押す)
3. メタエディタが起動したら、「新規作成」をクリック
4. 「Expert Advisor(テンプレート)」を選び、EAの名前(例:MA_RSI_Simple_EA)を入力
5. 「次へ」を押していき、最後に「完了」をクリック
これで、基本構造だけが書かれたEAのテンプレートファイルが生成されます。このテンプレートの中に、移動平均線とRSIを使ったロジックを追加していきます。
MQL4の最低限おさえておきたい構造
MQL4の細かな文法をすべて覚える必要はありませんが、EAを触るうえで最低限知っておきたいポイントがあります。
テンプレートのEAを開くと、主に次のような関数が用意されています。
・OnInit():EAがチャートにセットされたときに一度だけ実行される
・OnDeinit():EAがチャートから外されるときに実行される
・OnTick():ティック(価格更新)があるたびに毎回実行される
自動売買のロジック本体は、基本的にOnTick()の中に書くことが多いです。相場が動くたびに「今、エントリー条件を満たしているか」「決済条件を満たしているか」をチェックし、必要であれば注文や決済を行います。
インジケーター値の取得:移動平均線とRSI
次に、移動平均線とRSIの値をMQL4で取得する方法を確認します。MT4には、これらのインジケーターを計算する「組み込み関数」が用意されています。
・移動平均線:iMA()
・RSI:iRSI()
例えば、直近のバー(1本前の確定足)の終値ベースで、期間20の単純移動平均線(SMA)の値を取得するコードは次のようになります。
double ma_prev = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
引数の意味はおおよそ以下の通りです。
・第1引数:シンボル(NULLは現在のチャートの通貨ペア)
・第2引数:時間足(0は現在の時間足)
・第3引数:期間(例:20)
・第4引数:シフト(ここでは0)
・第5引数:移動平均の種類(MODE_SMAは単純移動平均)
・第6引数:価格の種類(PRICE_CLOSEは終値)
・第7引数:取得したいバー(1は1本前の確定足)
同様に、期間14のRSIを1本前の確定足で取得する場合は次のようになります。
double rsi_prev = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);
このように、組み込み関数を使えば、チャートにインジケーターを表示していなくても、EAの内部で数値を利用できます。
売買ロジックの具体的な設計
次に、移動平均線とRSIを組み合わせた売買ロジックを、もう少し形式的に整理します。ここでは、シンプルなゴールデンクロス/デッドクロス+RSIフィルターの例を扱います。
移動平均線は2本使います。
・短期移動平均線:期間20
・長期移動平均線:期間50
エントリー条件は次のように定義します。
【買いエントリー】
1. 1本前の足で、短期MAが長期MAを下から上に抜けた(ゴールデンクロス)
2. そのときのRSI(期間14)が50より上
【売りエントリー】
1. 1本前の足で、短期MAが長期MAを上から下に抜けた(デッドクロス)
2. そのときのRSIが50より下
決済条件は、シンプルに固定の利確・損切り(pips)に加え、反対シグナルが出たらポジションを閉じる、という形をとることができます。
・利確:+30pips
・損切り:-20pips
・反対売買シグナルが出たら成行で決済
数値はあくまで例なので、自分の取引スタイルや通貨ペアに合わせて調整してください。ボラティリティの高い通貨や時間足では、利確・損切り幅を広げるなどの工夫が必要です。
ポジション管理とエントリー制御
EAを作るときに意外と重要なのが、「ポジション数の管理」です。ロジックだけ書いてしまうと、条件を満たすたびに何度も注文が走り、意図せずポジションが増えてしまうことがあります。
今回はサンプルとして「常に最大1ポジションまで」とし、すでにポジションを持っている場合は新規エントリーを行わない設計にします。
ポジション数の確認には、OrdersTotal()やポジションを走査するループを用います。シンプルにするため、ここでは「同一通貨ペア・同一マジックナンバーのポジションがないときだけエントリーする」という考え方を採用します。
EAのサンプル構造イメージ
実際のコードはここでは省略しますが、EAの構造は次のような流れになります。
1. OnInit()でパラメータ(ロット、利確・損切り幅、マジックナンバーなど)を初期化する
2. OnTick()で、現在のポジション状況を確認する
3. 移動平均線とRSIの値を取得する
4. エントリー条件・決済条件を判定する
5. 条件を満たしていて、かつポジション数が許容範囲内であれば、注文や決済を行う
この流れをテンプレートとして覚えておけば、インジケーターや条件を変更するだけで、さまざまなEAを試すことができます。
具体例:トレンドフォロー型EAとしての考え方
今回の移動平均線+RSIのEAは、トレンドフォローの考え方に基づいています。具体的には次のようなイメージです。
・移動平均線のゴールデンクロス/デッドクロスで「トレンド方向」を判断する
・RSIで「勢いが足りているか」を確認する(RSIが50を挟んで上なら強気、下なら弱気とみなす)
例えば、USDJPYの15分足で強い上昇トレンドが発生しているとします。短期MAが長期MAを上抜け、RSIも60〜70程度の強いゾーンに位置している場合、買いエントリーの条件が揃いやすくなります。
一方で、レンジ相場ではゴールデンクロスとデッドクロスが頻発し、ダマシが多くなります。このような局面では、RSIが50付近を行き来しているだけのことも多く、シグナルの質は下がります。EAを検証するときは、「トレンド局面では利益が出ているが、レンジ局面でドローダウンが発生していないか」といった視点で結果を確認することが重要です。
ストラテジーテスターでの検証方法
EAを作成したら、すぐにリアル口座で稼働させるのではなく、まずはストラテジーテスターでバックテストを行います。MT4には標準でバックテスト機能が備わっており、過去の価格データを使ってEAの挙動を確認できます。
基本的な手順は次の通りです。
1. MT4のメニューから「表示」→「ストラテジーテスター」を開く
2. テスターの画面で、EA名、通貨ペア、時間足を選択する
3. モデル(始値のみ、コントロールポイントなど)とテスト期間を設定する
4. 初期証拠金やレバレッジを設定する
5. 「スタート」をクリックしてテストを実行する
テスト結果では、損益曲線、トレード回数、勝率、最大ドローダウンなどを確認できます。特に、最大ドローダウンや連敗回数は、メンタル的に耐えられるかどうかを判断するうえでも重要な指標です。
パラメータ調整のポイント
EAを実際の相場で使えるレベルに近づけるには、パラメータ調整(最適化)が欠かせません。ただし、単純に「一番利益が大きくなる組み合わせ」を追いかけると、過去データに過度にフィットした「カーブフィッティング」になり、将来の相場で機能しなくなるリスクが高くなります。
パラメータ調整の際は、次のような点を意識すると良いです。
・移動平均線の期間:20と50だけでなく、15と40、10と30など近い値も試し、結果が極端に変わらないか確認する
・RSIの期間と閾値:期間14を基本に、12〜20程度の範囲でテストしてみる、閾値50だけでなく45/55なども試す
・利確・損切り幅:通貨ペアと時間足のボラティリティに合わせて、複数の組み合わせを比較する
理想は、「多少パラメータを変えても大きく性能が崩れないロジック」です。狭い範囲でだけうまく機能している戦略より、広い範囲で安定している戦略の方が、実運用に耐えやすくなります。
具体的な検証のイメージ(例:USDJPY15分足)
例えば、USDJPYの15分足で過去1〜2年分のデータを使って、次の条件でテストするイメージです。
・短期MA:20、長期MA:50
・RSI期間:14、閾値:50
・利確:30pips、損切り:20pips
・1トレードあたりロット:0.1(口座残高やリスク許容度に応じて設定)
テストの結果、トレンドがはっきり出ている期間では比較的安定した利益が出ている一方、レンジ局面ではドローダウンが発生していることが多いかもしれません。その場合、「ボラティリティフィルターを追加する」「上位時間足のトレンド方向と合わせる」といった改良案が見えてきます。
リスク管理と期待値の考え方
EAを使うと、人間の感情を排除して機械的に売買できるメリットがありますが、リスクが消えるわけではありません。重要なのは、「1回1回のトレード結果ではなく、長期的な期待値とリスク管理」を意識することです。
具体的には、次のような点に注意します。
・1回のトレードで口座残高の何%をリスクに晒すか(一般的には1〜2%以内に抑えることが多い)
・連敗したときに、どの程度のドローダウンまで許容できるか
・ロットを増やすタイミング(残高に応じた段階的なロット調整など)
EAが過去のデータで良い成績を出していても、将来も同じように機能する保証はありません。常に「最悪のケース」を想定しながらロットを決め、無理のない範囲で運用を行うことが大切です。
よくある失敗パターンと回避のヒント
自作EAに取り組み始めた投資家が陥りがちなパターンと、その回避のヒントをいくつか挙げます。
・過去チャートを見てからロジックを作り、その期間だけ極端に成績が良いEAを量産してしまう
→ 期間を変えても安定しているか、別の通貨ペアでも極端に崩れていないかを確認する
・短期間のバックテストだけで「優秀なEA」と判断してしまう
→ できるだけ長い期間でテストし、トレンド相場・レンジ相場の両方を含めたうえで評価する
・一つのEAに全資金を集中させてしまう
→ 異なるロジック・通貨ペア・時間足のEAを組み合わせて分散させることを検討する
EAは「聖杯」ではなく、あくまで自分の売買ルールを機械に任せるためのツールです。シンプルなロジックでも、堅実なリスク管理と継続的な検証を行うことで、裁量トレードだけでは得られない安定感を目指すことができます。
まとめ:まずはシンプルなEAから始める
この記事では、MT4で自動売買を行うために、移動平均線とRSIという基本インジケーターを使ったシンプルなEAの考え方を解説しました。
・MT4では、EAをチャートにセットし「自動売買」をONにすることで、プログラムに売買を任せることができる
・移動平均線とRSIは、トレンド方向と勢いをシンプルに判定できる基本インジケーター
・MQL4の組み込み関数iMAやiRSIを使うことで、チャート表示なしでもインジケーター値をEA内部で利用できる
・ゴールデンクロス/デッドクロス+RSIフィルターというシンプルなロジックからでも、EAの検証と改善のプロセスを学べる
・ストラテジーテスターによるバックテストと、慎重なリスク管理は欠かせない
最初から完璧なEAを目指す必要はありません。まずはシンプルなロジックでEAを作り、動かしてみて、結果を振り返りながら少しずつ改良していくことが、長期的には大きな学びと成長につながります。
自分でEAを組めるようになると、「気になったアイデアをすぐに形にして検証する」という強力な武器を手に入れることができます。焦らず一歩ずつ、自分のペースで取り組んでみてください。


コメント