はじめに:裁量トレードから一歩進んで「自動売買」に挑戦する
FXやCFD取引を続けていると、「チャートに張り付かずに、自動で売買してくれる仕組みが欲しい」と感じる場面が多くなります。その代表的な手段が、MT4(MetaTrader 4)で動かす自動売買プログラム「EA(Expert Advisor)」です。
とはいえ、いきなりEAを購入したり、よく分からないプログラムを動かしたりするのは不安だと思います。本記事では、MT4で自動売買を動かす仕組みと、自分でEAを組むまでの基本プロセスを、できるだけやさしい言葉でひと通り解説します。
「プログラミング経験ゼロだけれど、MT4のEAを自分でいじってみたい」「移動平均線やRSIなど基本インジケーターを使ったEAを試してみたい」という初心者の方向けの内容です。
MT4自動売買の全体像:EAがチャート上で何をしているのか
まず、MT4における自動売買の仕組みをざっくり把握しておきます。MT4では、EA(.ex4 / .mq4ファイル)をチャートにセットすると、以下のような流れで自動売買が行われます。
1. 新しいレートが配信されるたびに、EAのメイン処理(OnTick())が呼び出される。
2. EAはチャートの価格やインジケーター値を読み取る。
3. 売買ルールに該当する条件を満たせば、OrderSend() などの関数で注文を出す。
4. すでに持っているポジションについて、決済条件を満たしたらOrderClose()でクローズする。
つまり、EAとは「チャートを常に監視して、あらかじめ決めたルール通りに売買を実行するロボット」だと考えるとわかりやすいです。
自動売買を始める前に決めておきたい3つのポイント
EA作りを始める前に、次の3点を整理しておくと後の作業がスムーズになります。
1. どの市場(シンボル)で動かすか
代表的なのは、EURUSDやUSDJPYなどのメジャー通貨ペアです。スプレッドが狭く、流動性が高い通貨ペアは、EAとの相性が良い傾向があります。最初は、慣れ親しんだ1〜2通貨ペアに絞ると検証しやすくなります。
2. どの時間足を使うか
5分足・15分足・1時間足など、時間足によってチャートのノイズの多さが変わります。短い時間足は取引回数が増える代わりにダマシも多くなり、長い時間足はシグナルは少ないものの、より落ち着いた値動きになります。初心者なら、まずは15分足か1時間足あたりからスタートするのが扱いやすいです。
3. 1トレードあたりのリスク(ロットと損切り)
EAは人間と違って感情がありません。そのため、設定したロットと損切り幅で、淡々と注文を繰り返します。証拠金に対して1回の損失が大きくなりすぎないよう、1トレードあたり口座残高の1〜2%以内の損失を目安にロットを計算すると、安全寄りの設計になります。
最小構成のEAを覗いてみる:何が書いてあるのか
次に、EAの中身をイメージしやすくするために、極小のサンプル構造を見てみます。以下はイメージであり、そのまま運用するのではなく、構造を理解するためのサンプルです。
//+------------------------------------------------------------------+
// シンプルなサンプルEA(構造イメージ)
//+------------------------------------------------------------------+
#property strict
extern double Lots = 0.1;
extern int StopLoss = 200; // 20pips相当(5桁業者の場合)
extern int TakeProfit = 400; // 40pips相当
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
// ここに売買ロジックを書く
}
//+------------------------------------------------------------------+
重要なのは、OnTick()という関数の中に「どの条件で買うか・売るか」「どの条件で決済するか」を書いていく、という点です。あとは、ロットサイズや損切り・利確などのパラメータを extern 変数で外出ししておくことで、MT4上から簡単に調整できるようになります。
基本インジケーターを使ったEA作りの考え方
ここからは、具体的なインジケーターを使って「どうやって売買ルールを作るのか」を見ていきます。ここでは代表的な3つのインジケーターを取り上げます。
- 移動平均線(MA)
- RSI
- ボリンジャーバンド
1. 移動平均線クロスでトレンドフォローEA
もっとも基本的なアイデアの一つが、「短期移動平均線が長期移動平均線を上抜けたら買い、下抜けたら売り」というトレンドフォロー系のEAです。例えば、15分足のEURUSDで、期間10のMAと期間40のMAを使うイメージです。
MT4では、iMA()関数で移動平均線の値を取得できます。
double maFast = iMA(NULL, PERIOD_M15, 10, 0, MODE_EMA, PRICE_CLOSE, 0);
double maSlow = iMA(NULL, PERIOD_M15, 40, 0, MODE_EMA, PRICE_CLOSE, 0);
さらに、1本前の足の値も取得して、クロスの発生を判定します。
double maFastPrev = iMA(NULL, PERIOD_M15, 10, 0, MODE_EMA, PRICE_CLOSE, 1);
double maSlowPrev = iMA(NULL, PERIOD_M15, 40, 0, MODE_EMA, PRICE_CLOSE, 1);
bool goldenCross = (maFastPrev < maSlowPrev) && (maFast > maSlow);
bool deadCross = (maFastPrev > maSlowPrev) && (maFast < maSlow);
あとは、goldenCrossなら買いエントリー、deadCrossなら売りエントリーという形でロジックを組めば、シンプルなトレンドフォローEAになります。
2. RSIで作る「行き過ぎ」逆張りEA
RSIは、買われすぎ・売られすぎを測るオシレーターです。たとえば「RSIが30以下になったら売られすぎ、70以上なら買われすぎ」といった考え方で、逆張りのエントリーに使われることが多いインジケーターです。
MT4では、iRSI()でRSI値を取得できます。
double rsi = iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0);
これを使い、例えば次のようなルールをEA化できます。
- RSIが30以下になったら買い(売られすぎからの反発狙い)
- RSIが70以上になったら売り(買われすぎからの反落狙い)
- トレンド方向を移動平均線でフィルターして、トレンドと逆行しすぎないようにする
具体例として、1時間足でRSI14を使い、上位時間足(4時間足)の移動平均線が上向きのときは買い方向に限定するといった組み合わせも考えられます。こうした「複数インジケーターの組み合わせ」がEAらしい発想です。
3. ボリンジャーバンドブレイクでの順張りEA
ボリンジャーバンドは、価格の標準偏差をもとにしたバンドです。価格が強く動くときには、±2σや±3σといった外側のバンドを勢いよく抜けることがあります。この動きを利用して、「バンドの外に飛び出した方向に順張りする」EAを作ることもできます。
MT4では、iBands()関数で上部バンド・中線・下部バンドを取得できます。
double upperBand = iBands(NULL, PERIOD_M15, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 0);
double middleBand = iBands(NULL, PERIOD_M15, 20, 2.0, 0, PRICE_CLOSE, MODE_MAIN, 0);
double lowerBand = iBands(NULL, PERIOD_M15, 20, 2.0, 0, PRICE_CLOSE, MODE_LOWER, 0);
以下のようなルールをEAに落とし込めます。
- ローソク足の終値が上部バンドを上抜けたら、ブレイク方向(買い)でエントリー
- 終値が下部バンドを下抜けたら、売りエントリー
- トレンドと逆方向のブレイクはフィルターで避ける
- ボラティリティが極端に低いとき(バンド幅が狭いとき)は見送る
ボリンジャーバンドは、トレンドの有無とボラティリティを同時にチェックできるので、EAとの相性が良い指標の一つです。
MT4のMetaEditorでEAを作る具体的な手順
次に、MT4の操作手順ベースでEA作成の流れを整理します。
1. EAファイルを新規作成する
MT4のメニューから「ツール」→「MetaQuotes Language Editor」を開きます。MetaEditorが起動したら、「新規作成」→「Expert Advisor(テンプレート)」を選び、EA名(例:MyFirstEA)を入力してウィザードを進めると、ひな型となるEAファイルが作成されます。
2. OnTick内に売買ロジックを書く
MetaEditorで生成されたコードの中に、void OnTick()という関数があります。この中に、前述の移動平均線やRSI、ボリンジャーバンドのロジックを記述していきます。最初は、「エントリー条件」と「決済条件」を1つずつに絞ると理解しやすくなります。
3. コンパイルしてエラーを解消する
コードを書いたら、「コンパイル」ボタンを押します。エラーがあれば、エディタ下部に赤字で表示されます。セミコロン不足やスペルミスなど、最初は単純なエラーが多いので、1つずつ直して再度コンパイルします。エラーが0になれば、EAファイル(.ex4)が生成され、MT4に認識されます。
4. MT4でEAをチャートにセットする
MT4に戻ると、「ナビゲータ」ウィンドウの「エキスパートアドバイザ」欄に、作成したEAが表示されます。それを任意の通貨ペアのチャートにドラッグ&ドロップし、パラメータや許可設定(自動売買を許可するチェックボックス)を確認してOKを押すと、EAがチャートで動作します。
ストラテジーテスターでEAをバックテストする
EAを実運用する前に、過去チャートで動作を確認するのが「バックテスト」です。MT4にはストラテジーテスターが標準搭載されています。
1. テスターの基本設定
MT4画面下部の「ストラテジーテスター」タブを開き、次のように設定します。
- エキスパートアドバイザ:自作EAを選択
- シンボル:検証したい通貨ペア(例:EURUSD)
- 期間:時間足(例:M15)
- モデル:最初は「始値のみ」または「コントロールポイント」など軽めの設定でも可
- 期間指定:テストしたい開始日・終了日
パラメータ(ロット、ストップロス、テイクプロフィットなど)を設定したら、「スタート」を押してテストを実行します。
2. 結果の見方と簡単な改善
バックテストの結果では、損益曲線・勝率・最大ドローダウン・取引回数などが表示されます。最初のうちは、以下のポイントだけチェックしても十分です。
- 損益曲線が極端にギザギザしていないか
- 最大ドローダウンが口座資金に対して大きすぎないか
- 取引回数が少なすぎないか(検証期間に数回しか取引がない、など)
粗い段階では、「ロットを下げる」「ストップロスを広げる/狭める」「時間足を変更する」といったシンプルなパラメータ調整だけでも挙動が大きく変わります。細かい最適化よりも、まずはEAの「性格」を掴むことが大切です。
初心者がEA作りでやりがちな失敗と回避のポイント
ここからは、実際にEAを作り始めた初心者がつまずきやすいポイントを整理しておきます。
1. 条件を詰め込みすぎて、ほとんどエントリーしないEAになる
「負けるトレードを減らしたい」という思いから、あれもこれもフィルター条件を足していくと、ほとんどエントリーしないEAになってしまいがちです。最初は、1〜2個のインジケーター+シンプルなルールに絞り、「負けもあるが、ちゃんとトレードしている」状態を目指した方が学びが多くなります。
2. バックテストの成績だけを見てパラメータをいじり続ける
バックテスト画面の利益曲線を見ていると、「もう少しきれいな右肩上がりにしたい」と欲が出て、パラメータを何度も調整してしまいます。これは「過剰最適化(オーバーフィッティング)」に陥る典型パターンです。
過去データに合わせすぎたEAは、将来の相場環境が少し変わっただけで簡単に崩れてしまいます。パラメータを調整するときは、大雑把なステップで調整し、テスト期間も複数の相場環境(レンジ相場・トレンド相場・ボラティリティが高い時期など)を含めるように意識すると良いです。
3. 実際の約定コストやスリッページを考慮していない
バックテストでは、スプレッドやスリッページの影響が過小評価されることがあります。とくに短期足のスキャルピングEAでは、1トレードあたりの「期待される値幅」と「スプレッド+手数料」のバランスが非常に重要です。短い利確幅に対してスプレッドが大きすぎると、理論上は勝てるルールでも実運用では成績が悪化しやすくなります。
小さく実運用して学ぶためのチェックリスト
実際にEAをリアル口座で動かすときは、いきなり大きなロットで運用するのではなく、少量のロットからスタートして挙動を観察することが重要です。簡単なチェックリストを用意しておきます。
- 想定していた場面で、想定した方向にエントリーしているか
- 想定していないタイミングで連続して注文を出していないか
- 損切り・利確が設定通りの価格で行われているか
- 指標発表などボラティリティが高い時間帯の挙動をどうするか決めているか
- サーバーダウンや回線障害時にどう対処するか、最低限の方針を持っているか
EAを動かしていると、バックテストでは気付かなかった挙動がいろいろ見えてきます。そこで気付いた点をメモしておき、次のバージョンでロジックを少しずつ改善していく、という「小さなPDCAサイクル」を回していくことが、長く自動売買に取り組むうえで非常に重要です。
まとめ:EA作りは「難しいプログラム」より「ルールの言語化」から
ここまで、MT4で自動売買を行うEAの基本構造と、移動平均線・RSI・ボリンジャーバンドといった代表的インジケーターを使ったEA作りの考え方を解説しました。
EA作りというと、「プログラムが難しい」というイメージを持たれがちですが、本質的には自分の売買ルールを、できるだけシンプルな条件として言語化する作業です。言語化さえできてしまえば、コードに落とし込む作業は、サンプルを真似しながら少しずつ身につけていくことができます。
最初はごく単純なルールでも構いません。たとえば「短期MAが長期MAを上抜けしたら買い、20pipsで損切り・40pipsで利確」といったレベルからスタートし、そこにRSIやボリンジャーバンドなど、基本インジケーターを少しずつ組み合わせていくと、自分なりのEAが出来上がっていきます。
手作業の裁量トレードだけでは気付かなかった「自分のルールの弱点」や「得意な相場パターン」が、EAを通して見えてくることも多くあります。小さなリスクで試行錯誤を繰り返しながら、自分に合った自動売買のスタイルを少しずつ作り上げていくことが、大きな一歩になります。


コメント