MT4(MetaTrader4)は、今でも多くの個人トレーダーに使われている定番のトレードプラットフォームです。中でも、チャートにインジケーターを表示するだけでなく、自分で売買ロジックをプログラムし、自動売買(EA:Expert Advisor)として動かせることが大きな魅力です。
とはいえ、「プログラミングは難しそう」「どこから手を付ければよいかわからない」と感じて、一歩を踏み出せない方も多いです。本記事では、移動平均線・RSI・MACDといった基本的なテクニカルインジケーターを使って、MT4のEAを自作するまでの流れを、初めての方にもわかりやすいように順を追って解説します。
コードはシンプルなサンプルにとどめつつ、実際の運用でつまずきやすいポイントや、利益を伸ばすための考え方もあわせて紹介します。最終的には、読者ご自身が「まずは自分でEAを1本作り、デモ口座で動かせる」状態になることを目標にします。
MT4とEAの基本構造を理解する
まずは、MT4とEAの関係を簡単に整理します。MT4では、MQL4という専用言語を使ってプログラムを書き、コンパイルするとEAとしてチャートに適用できるようになります。EAは、チャートに張り付いた状態で常に価格やインジケーターの値を監視し、条件が揃えば自動的に注文を出したり、ポジションをクローズしたりします。
EAの中身は、ざっくりと次のような構造になっています。
- 初期化処理(
OnInit):EAをチャートにセットしたときに一度だけ実行される部分 - メイン処理(
OnTick):新しいティックデータ(価格更新)があるたびに呼ばれる部分 - 終了処理(
OnDeinit):EAをチャートから外したときに呼ばれる部分
実際の売買ロジックはほぼすべてOnTickの中に書きます。「インジケーターの条件をチェックする」「すでにポジションを持っているか確認する」「新規エントリーするか、決済するかを判断する」といった処理を1ティックごとに繰り返していくイメージです。
EA作成の全体フローを押さえる
いきなりコードを書き始めるのではなく、まずはEA作成の全体フローをイメージしておくと、途中で迷いにくくなります。本記事で扱う流れは次の通りです。
- 取引する時間軸と通貨ペアを決める
- 使うインジケーターと売買ルールを文章で定義する
- MQL4のEAテンプレートを用意する
- インジケーターの値をコードで取得する
- 売買条件を
if文で実装する - ロット・損切り・利確などのリスク管理を組み込む
- ストラテジーテスターでバックテストする
- デモ口座でフォワードテストする
このうち、特に初心者がつまずきやすいのは「売買ルールを文章で定義する部分」と「インジケーターの値の取り方」です。ここを丁寧に押さえることで、その後の応用もぐっと楽になります。
基本インジケーターでEAロジックを設計する
ここでは、代表的な3つのインジケーターを題材にEAのロジックを考えていきます。
- 移動平均線(MA)
- RSI
- MACD
それぞれの特徴と、EAに組み込む際の考え方を解説します。
移動平均線(MA)でトレンドフォローEA
移動平均線は、一定期間の終値の平均を線で結んだものです。期間の短い線と長い線を組み合わせ、ゴールデンクロス/デッドクロスで売買するのは非常にポピュラーな手法です。EAとしては次のようなルールが典型的です。
- 短期MA(例:20期間)と長期MA(例:50期間)を使う
- 短期MAが長期MAを下から上に抜けたら買い
- 短期MAが長期MAを上から下に抜けたら売り
- すでにポジションを持っているときは、新しいシグナルで反対ポジションにドテンするか、ポジションを維持するかをあらかじめ決めておく
例えば、EURUSDの1時間足でトレンドフォローを狙う場合、レンジ相場ではダマシも多くなりますが、強いトレンドが出た局面では比較的わかりやすく利益を伸ばせることがあります。このように、「どんな相場で、このロジックは強みを発揮するか」を意識すると、後の検証や改良がしやすくなります。
RSIで逆張りEA
RSI(Relative Strength Index)は、買われ過ぎ・売られ過ぎを数値で表すオシレーターです。一般的には70以上で買われ過ぎ、30以下で売られ過ぎと言われます。EAにする場合、次のようなルールが一例です。
- RSI期間を14に設定
- RSIが30以下になったら、次の足の始値で買いエントリー
- RSIが70以上になったら、次の足の始値で売りエントリー
- 損切りや利確は、ATRなどのボラティリティ指標や固定pipsで決めておく
このロジックは、トレンドがあまり強くないレンジ相場で機能しやすい一方、一方向に強くトレンドが出ているときには逆行をつかまされやすい傾向があります。そのため、トレンドフィルター(例:長期MAの傾き)を組み合わせることで、トレンドが強いときはエントリーを見送る、といった工夫が考えられます。
MACDでトレンド転換を狙うEA
MACDは、2本の指数平滑移動平均線の差と、その移動平均(シグナル)を使ってトレンド転換を捉えるインジケーターです。EAにする場合の一例は次の通りです。
- 標準設定(12,26,9)のMACDを使用
- MACDラインがシグナルラインを下から上に抜けたら買いシグナル
- MACDラインがシグナルラインを上から下に抜けたら売りシグナル
- プラス圏/マイナス圏(0ラインより上か下か)もあわせて確認し、トレンド方向を意識する
MACDは、トレンドの勢いが変化したタイミングを捉えるのに向いていますが、値動きが小さいときにはシグナルが頻発してノイズも増えます。そのため、ボラティリティが一定以上ある場面に絞るなどの条件を加えることで、余計なエントリーを減らす工夫が可能です。
MQL4でインジケーターの値を取得する考え方
EAでインジケーターを使うには、まず「どの関数を使えば、どの足の値が取れるのか」を押さえる必要があります。代表的な例を挙げます。
- 移動平均線:
iMA(Symbol(), Period(), 期間, シフト, MA_METHOD, PRICE_CLOSE, インデックス) - RSI:
iRSI(Symbol(), Period(), 期間, PRICE_CLOSE, インデックス) - MACD:
iMACD(Symbol(), Period(), 12, 26, 9, PRICE_CLOSE, MODE_MAIN, インデックス)など
ここで重要なのが、最後の「インデックス」です。これは、どのバーの値を取るかを指定する数字で、一般的に0が最新の形成途中のバー、1が確定した1本前のバーを意味します。初心者に多いミスは、「確定していないバーの値でシグナルを判定してしまう」ことです。これを避けるため、EAでは基本的に1以降のバーの値を使ってロジックを組むことを強くおすすめします。
移動平均線クロスEAの具体的なロジック例
ここからは、移動平均線クロスを使ったシンプルなEAのロジックを、文章レベルで具体化していきます。コードは概念的な説明にとどめますが、雰囲気をつかむには十分です。
条件は次の通りとします。
- 通貨ペア:EURUSD
- 時間足:H1(1時間足)
- インジケーター:SMA20とSMA50(単純移動平均)
- エントリー:
- 終値ベースで、1本前のバーでSMA20がSMA50を下から上に抜けたら買い
- 終値ベースで、1本前のバーでSMA20がSMA50を上から下に抜けたら売り
- 決済:
- 反対シグナルが出たらドテン(買い→売り、売り→買い)
- または、固定pipsの損切り・利確(例:SL=40pips、TP=80pips)を設定
EA内では次の手順で処理します。
- 現在ポジションの有無を確認する(
OrdersTotal()など) - 1本前のバーのSMA20とSMA50を取得する
- 2本前のバーのSMA20とSMA50も取得する
- 「2本前ではクロスしていなかったが、1本前ではクロスしている」ことをチェックすることで、クロスの発生を検出する
- 買いクロスなら買い注文、売りクロスなら売り注文を発注する
- すでにポジションがある場合は、反対シグナルが出たときに決済+ドテンするかどうかをルールに応じて実装する
このように、「どのバーで何が起きたらシグナルとみなすか」を明確に文章で定義し、それをコードに落とすのがEA作成の基本パターンです。
RSIを組み合わせたフィルターの例
移動平均線クロスだけだと、レンジ相場でのダマシが多くなる傾向があります。そこで、RSIをフィルターとして組み合わせる例を見てみましょう。
- トレンドフォロー買い:短期MAが長期MAを上抜け、なおかつRSIが50以上のときだけエントリー
- トレンドフォロー売り:短期MAが長期MAを下抜け、なおかつRSIが50以下のときだけエントリー
このようにすると、RSIが中立以上のときに買いシグナルを採用し、中立以下のときに売りシグナルを採用することになり、トレンド方向とRSIの方向が矛盾しにくくなります。フィルターを加えることで、シグナルの回数は減りますが、その分、質の高いエントリーだけを選別できる可能性があります。
リスク管理とロット計算の基本
EAは24時間自動でトレードしてくれる一方で、リスク管理が甘いと短期間で口座資金を大きく減らしてしまうことがあります。そこで、ロットサイズと損切りをあらかじめルール化しておくことが重要です。
一つの考え方として、「1回のトレードで口座残高の何%までリスクを取るか」を決める方法があります。例えば、口座残高10万円で、1回のトレードのリスクを1%(1,000円)と決めた場合、損切り幅を40pipsとするなら、40pipsで約1,000円の損失になるロット数を計算します。EA内では、損切り幅と口座残高を基に、このロット数を動的に計算することも可能です。
最初は、固定の少額ロットでテストし、ロジックの安定性が確認できてからロットを増やすのが現実的です。いきなり大きなロットで運用するのは避けた方がよいでしょう。
バックテストとフォワードテストの進め方
EAを作成したら、いきなりリアル口座で動かすのではなく、まずはMT4のストラテジーテスターでバックテストを行います。バックテストでは、過去の価格データを使ってEAを仮想的に動かし、損益曲線や最大ドローダウン、勝率、プロフィットファクターなどの指標を確認できます。
バックテストで見るべきポイントは次の通りです。
- 長期間(少なくとも数年)で一貫したパフォーマンスが出ているか
- 特定の期間だけ異常に成績が良くなっていないか(過剰最適化の可能性)
- ドローダウンが口座資金に対して許容範囲か
- トレード回数が少なすぎないか(検証として十分なサンプル数か)
バックテストの結果が悪い場合は、ルールやパラメータを見直しますが、このとき注意したいのが「過剰最適化」です。特定の期間にだけ通用するようにパラメータを微調整しすぎると、将来の相場ではまったく機能しないEAになりがちです。
ある程度納得できる結果が出たら、次はデモ口座にEAを実際にセットし、リアルタイムでの動きを確認する「フォワードテスト」に進みます。フォワードテストでは、スプレッドや約定速度、指標発表時の値飛びなど、バックテストでは見えにくい要素も含めてロジックの耐久性をチェックできます。
実際の運用で意識したいポイント
EAを実際に運用する際には、次のような点を意識するとリスク管理がしやすくなります。
- 複数のEAに資金を分散し、1つのロジックに依存しすぎない
- 同じ通貨ペア・同じ方向に偏ったポジションが重ならないように調整する
- 月次や四半期ごとにEAの成績をレビューし、必要なら一時停止やパラメータの見直しを行う
- サーバーやPCの停止、回線トラブルに備えてVPS利用も検討する
EAは「放っておけば勝手にお金を増やしてくれる魔法の箱」ではなく、あくまで自分のトレードルールを忠実に実行してくれるツールです。その意味で、ルールを理解し、定期的に振り返る姿勢が重要です。
まずはシンプルなEAを1本完成させる
MT4でのEA作成は、慣れてしまえばパターン化できますが、最初の1本を作るまではハードルが高く感じられるかもしれません。本記事で紹介したように、
- 移動平均線クロス
- RSIフィルター
- シンプルなロット・損切り・利確ルール
といった基本的な構成だけでも、十分に検証しがいのあるEAを作ることができます。まずは、1つの通貨ペア・1つの時間足に絞ってロジックを固め、その後に通貨ペアや時間軸、パラメータを少しずつ変えて検証範囲を広げていくと、無理なくステップアップできます。
ご自身の相場観や生活スタイルに合ったロジックをEAとして形にすることで、裁量トレードだけでは見えなかった「自分の強み・弱み」も見えやすくなります。MT4のEA自作は、単なる自動売買ツール作りにとどまらず、トレードそのものの理解を深める有効な手段となり得ますので、少しずつ取り組んでみてください。


コメント