MQL4でEAを作る前に理解すべき基本構造
MQL4は、MetaTrader 4上で動く自動売買プログラムを作るための言語です。EAとはExpert Advisorの略で、チャート上に設定しておくことで、条件に合致したときに売買注文、決済、ポジション管理を自動で実行できます。裁量トレードでは、相場を見て判断し、手で注文を出します。一方、EAでは「どの条件で買うか」「どの条件で売るか」「損切りはどこか」「利益確定はどこか」「同時に何ポジションまで持つか」を事前に決め、プログラムに落とし込みます。
EA作成で最初に重要なのは、コードを書くことではありません。最初にやるべきことは、売買ルールを言語化することです。たとえば「上昇トレンドのときに買う」という表現は、人間には伝わってもEAには伝わりません。EAに理解させるには、「20期間移動平均線が75期間移動平均線を上回っている」「直近の終値が20期間移動平均線より上にある」「RSIが50以上70未満である」といった数値条件に分解する必要があります。曖昧な言葉を排除し、すべてを条件式に変換する作業がEA開発の出発点です。
初心者が最初に作るEAは、複雑なものにする必要はありません。むしろ、移動平均線、RSI、ボリンジャーバンドなど、単純な指標を使ったルールから始めるべきです。理由は明確です。単純なEAほど、負けた理由を分析しやすいからです。複雑な条件を大量に詰め込んだEAは、一見すると高性能に見えても、どの条件が利益に貢献しているのか、どの条件が損失を増やしているのかが分かりにくくなります。EAは「複雑だから勝てる」のではなく、「検証可能で、再現性があり、リスク管理が明確だから運用できる」と考えるべきです。
EA開発の全体フロー
MQL4でEAを作る流れは、大きく分けると七つの工程になります。第一に、売買アイデアを作ること。第二に、売買条件を数値化すること。第三に、MQL4でコードを書くこと。第四に、バックテストで過去データ上の挙動を確認すること。第五に、パラメータを調整すること。第六に、デモ口座や小ロットでフォワード検証すること。第七に、実運用しながら成績を監視することです。
多くの人は第三工程のコード作成から入ろうとしますが、これは失敗しやすい進め方です。コードは売買思想を実行する道具にすぎません。元のロジックが曖昧であれば、どれだけ綺麗にコードを書いても、実運用に耐えるEAにはなりません。EA開発では「アイデア」「条件化」「検証」「改善」の順番を崩さないことが重要です。
また、EAを作る目的も最初に決めておく必要があります。短期スキャルピング型なのか、デイトレード型なのか、スイング型なのかによって、必要なロジックもリスク管理も変わります。スキャルピング型ならスプレッドと約定速度の影響が大きく、デイトレード型なら時間帯や経済指標の影響を受けやすく、スイング型ならスワップポイントや週末ギャップの影響も考慮する必要があります。EAは単なる売買ツールではなく、運用スタイルそのものをコード化したものだと考えると分かりやすいです。
最初に作るべきEAのテーマ
最初のEAとして適しているのは、移動平均線を使った順張り型です。理由は、トレンド判定が比較的分かりやすく、MQL4でも実装しやすいからです。たとえば、短期移動平均線が長期移動平均線を上抜けたら買い、下抜けたら売りというゴールデンクロス・デッドクロス型のEAがあります。ただし、このルールをそのまま使うと、レンジ相場でダマシが多くなります。そのため、トレンドフィルターや時間帯フィルターを追加することで、無駄なエントリーを減らす設計が必要になります。
具体例として、次のようなロジックを考えます。通貨ペアはUSDJPY、時間足は1時間足、短期移動平均線は20期間、長期移動平均線は75期間とします。買い条件は、20期間移動平均線が75期間移動平均線を上回っており、直近の終値が20期間移動平均線より上にあり、現在ポジションを保有していないことです。売り条件はその逆で、20期間移動平均線が75期間移動平均線を下回り、直近の終値が20期間移動平均線より下にあり、現在ポジションを保有していないことです。損切りは50pips、利益確定は100pipsとします。
この程度の単純なルールでも、EA開発の基本要素は一通り含まれています。インジケーターの値を取得する、条件分岐を作る、ポジションの有無を確認する、注文を出す、損切りと利益確定を設定する、という一連の処理が必要になるからです。最初からナンピン、両建て、複利ロット、トレーリングストップ、時間決済などを全部入れる必要はありません。まずは最小構成で動くEAを作り、そこから必要な機能を足していく方が安全です。
MQL4コードの基本構成
MQL4のEAには、主に初期化処理、終了処理、ティックごとの処理があります。現在のMQL4では、OnInit、OnDeinit、OnTickという関数を使うのが一般的です。OnInitはEAをチャートにセットしたときに一度だけ実行されます。OnDeinitはEAを停止したときやチャートから外したときに実行されます。OnTickは価格が更新されるたびに実行されます。売買条件の判定は基本的にOnTick内で行います。
ただし、OnTickは価格が動くたびに何度も呼び出されるため、何も考えずに注文処理を書くと、同じ条件で連続注文してしまう危険があります。そのため、まず現在ポジションを持っているかを確認し、ポジションがない場合だけ新規注文を検討する処理が必要です。また、1本のローソク足につき1回だけ判定したい場合は、新しい足が確定したタイミングを検出する処理も重要になります。
EAでよく使う外部パラメータには、ロット数、損切り幅、利益確定幅、移動平均線の期間、マジックナンバー、許容スリッページなどがあります。これらはコード内に固定値で書くより、input変数として外部から変更できるようにした方が便利です。バックテスト時にパラメータを変えて検証しやすくなるからです。たとえば、ロット数を0.1、損切りを50pips、利益確定を100pipsと固定してしまうと、別条件で検証するたびにコードを書き換える必要があります。外部パラメータ化しておけば、ストラテジーテスター上で簡単に調整できます。
実装時に必要な主要処理
インジケーター値の取得
MQL4では、移動平均線の値を取得するためにiMA関数を使います。RSIならiRSI、MACDならiMACD、ボリンジャーバンドならiBandsを使います。iMAでは、通貨ペア、時間足、期間、シフト、平均方法、適用価格、取得する足の位置を指定します。たとえば、1本前の確定足における20期間単純移動平均線の値を取得したい場合、現在足ではなく1本前の値を使うのが基本です。現在足はまだ確定していないため、価格変動によってシグナルが消えたり出たりするからです。
初心者がよくやる失敗は、未確定足の値を使ってバックテストでは勝っているように見えるEAを作ってしまうことです。実際の運用では、ローソク足が確定する前に条件が変わるため、バックテストとリアル運用の挙動がズレます。EAでは原則として、確定足を基準に判断する設計が安全です。短期売買で現在足を使う場合でも、そのリスクを理解したうえで使う必要があります。
ポジション確認
EAは、すでに保有しているポジションを把握しなければなりません。特に複数のEAを同じ口座で動かす場合、どのEAが出した注文なのかを区別するためにマジックナンバーを使います。マジックナンバーとは、EAごとの識別番号です。注文時に設定しておくことで、後からポジションを検索するときに、そのEAが管理すべき注文だけを抽出できます。
ポジション確認では、OrdersTotalで現在の注文数を調べ、OrderSelectで各注文を選択し、OrderSymbolで通貨ペアを確認し、OrderMagicNumberでマジックナンバーを確認します。自分のEAが出したポジションがすでにある場合、新規注文を出さないようにします。これにより、同じ方向にポジションが増えすぎることを防げます。ナンピン型EAを意図して作る場合は別ですが、最初のEAでは1通貨ペア1ポジションに制限した方が検証しやすいです。
注文処理
新規注文にはOrderSendを使います。買いならOP_BUY、売りならOP_SELLを指定します。注文時には、通貨ペア、注文種別、ロット数、価格、スリッページ、損切り価格、利益確定価格、コメント、マジックナンバー、有効期限、色などを指定します。ここで重要なのは、損切りと利益確定を価格で指定する点です。pipsで指定するのではなく、現在価格から何ポイント離した価格かを計算して渡す必要があります。
USDJPYのような3桁表示の通貨ペアと、EURUSDのような5桁表示の通貨ペアでは、1pipsに相当するPointの扱いが異なります。MQL4ではPointやDigitsを使って価格単位を調整します。初心者向けEAでは、pipsをポイントに変換する関数を用意しておくとミスを減らせます。損切り幅が意図より10分の1になったり10倍になったりすると、バックテスト結果も実運用リスクも大きく変わるため、価格単位の確認は必須です。
シンプルなEA設計例
ここでは、移動平均線によるトレンドフォローEAを想定します。買い条件は、短期移動平均線が長期移動平均線より上、かつ終値が短期移動平均線より上であること。売り条件は、短期移動平均線が長期移動平均線より下、かつ終値が短期移動平均線より下であること。さらに、同一EAのポジションがない場合だけエントリーします。利益確定は損切りの2倍に設定します。これにより、勝率が50%未満でも期待値がプラスになる可能性を残せます。
ただし、リスクリワード比率を2対1にしただけで勝てるわけではありません。重要なのは、損切りに対して十分な利益幅を取れる相場だけを選ぶことです。レンジ相場では、利益確定に届く前に反転して損切りになるケースが増えます。そのため、移動平均線の傾き、ADX、直近高値安値の更新、上位足の方向などをフィルターとして追加する余地があります。最初は単純に作り、バックテストで負け方を観察し、必要なフィルターを後から加えるのが実践的です。
たとえば、1時間足では買い条件が出ていても、4時間足では下落トレンドのままという場合、買いエントリーは伸びにくくなります。このようなケースを避けるために、上位足の移動平均線も確認し、上位足が上向きのときだけ買うという条件を追加できます。EA開発では、いきなり完璧なルールを作るのではなく、負けパターンを特定して、それを減らす条件を追加していく考え方が重要です。
バックテストで見るべき指標
EAが完成したら、すぐに実口座で動かすのではなく、まずバックテストを行います。バックテストでは、過去データに対してEAを動かし、どのような成績になったかを確認します。見るべき指標は、純益だけではありません。総取引数、勝率、平均利益、平均損失、最大ドローダウン、プロフィットファクター、リカバリーファクター、連敗数、月別損益などを総合的に確認する必要があります。
特に重要なのは最大ドローダウンです。純益が大きくても、途中で資金の半分以上を失うようなEAは、実運用に耐えにくいです。投資家が実際に耐えられる損失幅は、バックテスト上の数字よりも小さいことが多いです。バックテストでは冷静に見られても、実際に資金が減ると判断が揺らぎます。そのため、最大ドローダウンは理論上の許容値ではなく、自分が運用を継続できる現実的な水準で考えるべきです。
また、取引回数が少なすぎるEAにも注意が必要です。10年間で20回しか取引していないEAが高収益だったとしても、それは偶然の可能性を排除しにくいです。逆に、取引回数が多すぎるEAは、スプレッドやスリッページの影響を強く受けます。スキャルピングEAでバックテスト結果が良くても、実運用では約定条件の違いで成績が悪化することがあります。バックテストは万能ではなく、あくまで仮説検証の第一段階です。
最適化で失敗しないための考え方
MQL4のストラテジーテスターでは、パラメータの最適化ができます。移動平均線の期間、損切り幅、利益確定幅などを一定範囲で変化させ、最も成績が良い組み合わせを探す機能です。ただし、最適化は使い方を間違えると危険です。過去データにだけ過剰適合したEA、いわゆるカーブフィッティングEAを作ってしまうからです。
最適化で見るべきなのは、最高成績の一点ではありません。周辺パラメータも安定して利益が出ているかです。たとえば、短期移動平均線が19、20、21のときは利益が出るが、18や22では急に負けるようなEAは不安定です。偶然その期間だけに合った可能性があります。一方、短期移動平均線が18から25程度まで幅広く利益を出しているなら、ロジック自体に一定の優位性がある可能性が高まります。
実践的には、過去データを二つ以上に分けて検証します。たとえば、2015年から2020年を開発期間、2021年から2024年を検証期間とします。開発期間で良いパラメータを探し、そのパラメータを検証期間に適用しても成績が崩れないかを確認します。これをウォークフォワード的に行うことで、過去に合わせただけのEAを避けやすくなります。最適化は利益を最大化するためではなく、壊れにくいパラメータ帯を探すために使うべきです。
フォワード検証の重要性
バックテストで良い結果が出ても、すぐに本番資金を投入するのは危険です。次に必要なのがフォワード検証です。フォワード検証とは、デモ口座や小ロットの実口座で、現在進行形の相場に対してEAを動かし、バックテストと同じような挙動をするか確認する作業です。バックテストでは再現できないスプレッド拡大、約定遅延、スリッページ、サーバー停止、経済指標時の急変動などを確認できます。
フォワード検証では、最低でも数十回の取引を観察したいところです。1週間だけ利益が出たからといって、EAが機能しているとは判断できません。相場環境には、トレンド相場、レンジ相場、急変相場、低ボラティリティ相場があります。EAがどの環境で利益を出し、どの環境で損失を出すのかを把握する必要があります。EAにとって重要なのは、常に勝つことではなく、得意な局面と苦手な局面が分かっていることです。
フォワード検証中は、取引ごとの記録を残します。エントリー時刻、決済時刻、通貨ペア、方向、ロット、損益、スプレッド、エントリー理由、相場環境、想定外の挙動などを記録します。EAは自動で売買しますが、運用者が何も見なくてよいわけではありません。むしろ、自動化したからこそ、結果をデータとして客観的に管理しやすくなります。EA運用は放置ではなく、ルール化された投資プロセスの継続です。
資金管理とロット設計
EAで最も軽視されやすく、最も重要なのがロット設計です。同じ売買ロジックでも、ロットを大きくしすぎれば破綻します。ロットを小さくすれば利益は小さくなりますが、長期検証と改善を続けやすくなります。EA初心者がまず守るべき原則は、1回の損失を口座資金の1%以下に抑えることです。より慎重に運用するなら0.5%以下でも構いません。
たとえば、口座資金が100万円で、1回の許容損失を1%とするなら、1回の損失上限は1万円です。損切り幅が50pipsの場合、1pipsあたりの損益がいくらになるロットなら1万円以内に収まるかを計算します。USDJPYで1万通貨あたり1pipsが約100円なら、50pipsの損切りで約5,000円の損失です。この場合、2万通貨なら約1万円となります。実際にはスプレッドやスリッページもあるため、少し余裕を持たせるべきです。
複利ロットを導入する場合も慎重さが必要です。資金が増えるほどロットを上げる設計は、理論上は資金効率を高めます。しかし、連敗時の損失も大きくなります。バックテストで複利設定にすると資産曲線が美しく見えることがありますが、実運用ではドローダウンの心理的負担が増します。最初は固定ロットで検証し、EAの特性を理解してから複利化を検討する方が現実的です。
EAに追加しやすい実践的フィルター
時間帯フィルター
FX市場は24時間動いていますが、時間帯によって値動きの質が異なります。東京時間は比較的穏やかになりやすく、ロンドン時間から値動きが活発化し、ニューヨーク時間には指標や株式市場の影響を受けやすくなります。EAの売買結果を時間帯別に集計すると、利益が出やすい時間と損失が出やすい時間が見えてくることがあります。損失が多い時間帯を除外するだけで成績が安定するケースもあります。
たとえば、移動平均線の順張りEAが東京時間のレンジで何度もダマシに遭い、ロンドン時間のブレイクで利益を出しているなら、東京時間の新規エントリーを停止する価値があります。時間帯フィルターはロジックを複雑化しすぎず、実運用上のノイズを減らしやすい実践的な改善策です。
スプレッドフィルター
EAでは、スプレッドが広がっているときのエントリーを避けることが重要です。特に早朝、週明け、重要指標前後、流動性が低い時間帯はスプレッドが拡大しやすくなります。スプレッドが広い状態でエントリーすると、最初から不利な価格で取引することになります。短期売買ほどこの影響は大きくなります。
MQL4ではAskとBidの差から現在のスプレッドを計算できます。たとえば、許容スプレッドを2pips以内と決め、それを超える場合は新規注文を出さないようにします。単純な条件ですが、実運用での成績悪化を防ぐうえで有効です。バックテストでは固定スプレッドで良く見えても、実運用では変動スプレッドの影響が出るため、スプレッドフィルターは早めに実装しておきたい機能です。
経済指標回避
重要経済指標の発表前後は、通常のテクニカルロジックが機能しにくくなります。雇用統計、CPI、FOMC、政策金利発表などでは、スプレッド拡大、急変動、約定遅延が発生しやすくなります。EAで完全に経済指標を自動判定するには外部データ連携が必要ですが、初心者段階では、重要指標の前後だけ手動でEAを停止する運用でも十分です。
EAは自動売買だから常時稼働させるもの、という考え方は危険です。戦略によっては、重要指標前後を避けるだけでドローダウンを抑えられることがあります。運用ルールとして「重要指標の30分前から30分後までは停止」「週末持ち越しを避ける」「年末年始や流動性低下期間は停止」といった条件を決めておくと、想定外の損失を減らしやすくなります。
EAを改善するときの優先順位
EA改善では、いきなり利益を増やそうとするより、まず大きな負けを減らす方が現実的です。バックテストの取引履歴を確認し、損失が集中している条件を探します。たとえば、特定の時間帯に負けている、レンジ相場で負けている、急騰急落後の逆行で負けている、スプレッド拡大時に負けている、といった傾向が見つかれば、その条件をフィルターで除外できます。
次に見るべきは、利益を伸ばし切れているかです。トレンドフォローEAなのに利益確定が浅すぎると、大きなトレンドを取り逃します。一方、利益確定を遠くしすぎると、含み益が消えて損切りになるケースが増えます。このバランスを見るために、固定TPだけでなく、トレーリングストップや移動平均線割れ決済を検証する価値があります。ただし、決済条件を複雑にしすぎると検証が難しくなるため、一つずつ追加して効果を確認します。
改善の基本は、一度に一つの変更だけを加えることです。時間帯フィルター、スプレッドフィルター、上位足フィルター、トレーリングストップを同時に入れると、何が成績改善に効いたのか分からなくなります。EA開発は研究に近い作業です。仮説を立て、変更し、検証し、結果を比較する。この地味な作業を続けられる人ほど、使えるEAに近づけます。
実運用前のチェックリスト
実口座でEAを動かす前には、最低限のチェックリストを用意すべきです。まず、マジックナンバーが他のEAと重複していないか。次に、通貨ペアと時間足が想定通りか。ロット数が口座資金に対して過大ではないか。損切りと利益確定が正しい価格幅で設定されているか。スプレッドが広すぎるときに注文しない設計になっているか。ポジションを複数持たない設計なら、その制御が機能しているか。バックテストとデモ運用で想定外のエラーが出ていないか。
また、VPS環境も重要です。自宅PCでEAを動かす場合、PCの電源、ネット回線、Windowsアップデート、MT4の停止などがリスクになります。EAを継続稼働させるなら、VPSを使う方が安定します。ただし、VPSを使えば勝てるわけではありません。VPSはあくまで稼働環境を安定させる道具です。ロジック、資金管理、監視体制が不十分なままVPSに載せても、損失が自動化されるだけです。
実運用開始時は、必ず小ロットから始めるべきです。バックテストとフォワード検証で問題がなかったとしても、実口座では心理的な負担が違います。小ロットで1か月から3か月程度の実績を確認し、バックテストと大きく乖離していないかを見ます。成績が安定してから段階的にロットを上げる方が、長期的には安全です。
EA運用で失敗しやすい典型例
EA運用でよくある失敗の一つは、短期間の好成績だけを見てロットを上げすぎることです。たまたま相場環境がEAに合っている期間に利益が出ると、運用者はロジックが完成したと錯覚しがちです。しかし、相場環境が変わると連敗が始まります。そのとき、ロットを上げた直後であれば、資金へのダメージは大きくなります。EAは好調期に過信せず、不調期に破綻しない設計が重要です。
二つ目は、負け始めたEAをすぐに改造し続けることです。EAには必ず不調期があります。数回負けただけで条件を変えると、検証の意味がなくなります。事前に想定した最大連敗数や最大ドローダウンの範囲内であれば、ルール通りに運用を継続する必要があります。一方で、想定を超える損失が出た場合は、感情ではなくデータに基づいて停止判断を行います。
三つ目は、バックテストの設定を甘く見ることです。スプレッドを低くしすぎる、品質の低いヒストリカルデータを使う、手数料やスリッページを考慮しない、短期間だけで検証する、といった問題があります。バックテストは現実より有利に見えやすいものです。だからこそ、結果をそのまま信じるのではなく、保守的に評価する必要があります。純益が出ているかよりも、悪条件でも破綻しないかを見るべきです。
MQL4 EA作成を投資戦略として活かす視点
MQL4でEAを作る価値は、自動で売買できることだけではありません。自分の売買ルールを明確化し、過去データで検証し、数字で改善できる点にあります。裁量トレードでは、勝った理由や負けた理由が曖昧になりがちです。しかし、EA化すると条件が固定されるため、結果を客観的に分析できます。これは投資家にとって大きなメリットです。
EAを作る過程では、自分のトレードアイデアが本当に再現性を持つのかが明らかになります。「なんとなく上がりそう」「チャートの形が良い」といった感覚を、条件式に変換できなければ自動売買にはできません。この作業は、裁量トレードの精度向上にも役立ちます。EAを実運用しなくても、売買ルールをコード化するだけで、トレードの曖昧さを減らせます。
また、EAは一つ作って終わりではありません。トレンドフォロー型、レンジ逆張り型、ブレイクアウト型、時間帯特化型、指標回避型など、複数の戦略を小さく作り、それぞれの得意相場を把握していくことで、ポートフォリオ的な運用も可能になります。すべての相場で勝つ万能EAを目指すより、特定の相場で機能するEAを複数持つ方が現実的です。
まとめ
MQL4でEAを作る流れは、売買アイデアを数値条件に落とし込み、コード化し、バックテストで検証し、フォワード検証を経て、小ロットから運用するという段階的なプロセスです。最初から複雑なEAを作る必要はありません。移動平均線を使った単純な順張りEAでも、インジケーター取得、ポジション確認、注文処理、損切り設定、利益確定設定、バックテスト、改善という基本を学べます。
EA開発で重要なのは、勝てる魔法のコードを探すことではありません。曖昧な売買判断を排除し、検証可能なルールを作り、リスクを管理し、相場環境に応じて改善していくことです。バックテストの利益だけを追うと、過去に最適化されただけの脆いEAになりやすくなります。見るべきなのは、最大ドローダウン、取引回数、損益の安定性、パラメータの頑健性、実運用との乖離です。
投資家にとってEA作成は、単なる自動売買ツール作りではなく、売買ルールを客観化する訓練でもあります。自分の戦略をコードにできるようになると、感情に左右されにくくなり、検証と改善を数字で進められるようになります。最初の一歩は、シンプルなEAで構いません。小さく作り、動かし、検証し、負け方を分析し、少しずつ改善する。この積み上げこそが、MQL4を投資戦略に活かす最も現実的な方法です。


コメント