本ページはプロモーションが含まれています

ホーム › EAプログラミング

EAプログラミング

パーフェクトオーダーEAの作り方|MQL4コードとダマシ対策

↻

パーフェクトオーダーEAの作り方|MQL4コードとダマシ対策
トム

トム

現役エンジニア(本業はJavaバックエンド)。以前はMT4のEAを自作してFX自動売買をしていました(現在は引退)。今はポイ活を「時給」で検証・攻略しています。

トレンド判断の定番「パーフェクトオーダー」だけでエントリーするEAを作ると、本当に勝てるのでしょうか。

USDJPYの15分足・1時間足・4時間足で試すと、3つとも最後はテスト開始時の残高を上回りました。ただし途中で残高が大きく減る時期があり、レンジ相場では並び順が崩れるたびに小さな損切りが続くため、そのままでは安定しません。

パーフェクトオーダーの定義から、EAのエントリー・決済ロジック、ダマシを減らすフィルターまでをまとめました。MQL4のソースコードとテスト用EAも載せています。

この記事でわかること

  • パーフェクトオーダーの定義と、3本の移動平均線の並び順の見方
  • EAのエントリー・決済条件とMQL4コード
  • 15分足・1時間足・4時間足のバックテスト結果の違い
  • ADX・上位足など、ダマシを減らすフィルター6種

パーフェクトオーダーとは

パーフェクトオーダーとは、期間の異なる3本の移動平均線が「短期>中期>長期」(下降トレンドでは「短期<中期<長期」)の順に並び、3本とも同じ方向を向いている状態のことです。この並び順を使ってトレンドの方向と強さを判断します。

パーフェクトオーダーの図。短期・中期・長期の移動平均線が上から順に並んだ上昇トレンド

状態並び順(上から)意味
上昇トレンド短期 > 中期 > 長期短期・中期・長期すべてで相場が上向き
下降トレンド長期 > 中期 > 短期短期・中期・長期すべてで相場が下向き
どちらでもない順番がばらばらレンジまたはトレンド転換中。見送り

短期・中期・長期のすべてで相場の方向が一致しているため、トレンドが続きやすいのが特徴です。移動平均線の角度が急なほどトレンドの勢いが強いと判断します。

期間の組み合わせよく使われる場面
5・25・75短期売買。反応は早いがダマシも多い
25・75・200この記事のEAで使用。中長期のトレンドを見る組み合わせ
20・50・100日足のスイング向け

EMA(指数平滑移動平均)は直近の値動きを重く見る平均で、N本のEMAでは最新の足に2÷(N+1)の重みがかかります。重みが半分になるまでの本数(半減期)を計算すると、25EMAは約9本、75EMAは約26本、200EMAは約69本です。短期線ほど早く向きを変えるので、並び順はまず短期線の動きから崩れます。

パーフェクトオーダーではどうトレードする?

一般的なトレード手法は次の4ステップです。EAにする場合は、どのステップまでルール化するか(特に押し目を待つかどうか)で性格が変わります。

パーフェクトオーダーの基本的なトレード

1. 並び順を確認
3本が揃ったらトレンド認定
→
2. 押し目を待つ
短期または中期線へのタッチ
→
3. トレンド方向にエントリー
損切りは直近の高値・安値
→
4. 崩れたら利確
並び順が崩れる、長期線を割る

押し目とは、上昇トレンドの途中で価格が一時的に下がる局面のことです。並び順が保たれたまま短期線や中期線まで価格が戻ったところで買えば、高値づかみを避けながらトレンドに乗れます。下降トレンドでは、同じ考え方で戻り売りを狙います。

併せて読むピラミッティングEAは稼げる?3種の検証結果とナンピンとの違いピラミッティング(ピラミッディング)EAを自作し、順・逆・イコールの3種類をバックテスト。結論は単体では稼げず、トレンド判定の優位性が前提です。ナンピンとの違い、増し玉ルール、反転時の損益試算、MQL4ソースも解説します。

パーフェクトオーダーEAの作り方(MQL4)

パーフェクトオーダーEAは、3本のEMAの並び順でエントリーし、長期線を割ったら決済するだけで作れます。「押し目を待つ」ルールは入れず、並び順が揃ったらすぐに入る最もシンプルな条件にしました。条件が単純なほど、パーフェクトオーダーそのものの実力が成績に出ます。

売買ルール:エントリーと決済の条件

項目条件
通貨ペアUSDJPY
移動平均EMA 25・75・200(終値ベース、1本前の確定足で判定)
エントリーパーフェクトオーダーになり、終値が短期EMAの上(下)にあればすぐ
クローズ200EMAを割ったら
ロット0.1固定

エントリーと決済のMQL4コード

エントリー判定部分のソースコードは次のとおりです。

// EMA(1本前の確定足で判定)
double EMA1 = iMA(NULL, 0, 25,  0, MODE_EMA, PRICE_CLOSE, 1);
double EMA2 = iMA(NULL, 0, 75,  0, MODE_EMA, PRICE_CLOSE, 1);
double EMA3 = iMA(NULL, 0, 200, 0, MODE_EMA, PRICE_CLOSE, 1);

// 上昇のパーフェクトオーダー
if(EMA1 > EMA2 && EMA2 > EMA3 && Close[1] > EMA1){
   OrderSend(Symbol(), OP_BUY, lot, Ask, 3, stopLoss, takeProfit, "BuyOrder", 12345, 0, clrGreen);
}
// 下降のパーフェクトオーダー
else if(EMA1 < EMA2 && EMA2 < EMA3 && Close[1] < EMA1){
   OrderSend(Symbol(), OP_SELL, lot, Bid, 3, stopLoss, takeProfit, "SellOrder", 12345, 0, clrRed);
}
  • iMAの最後の引数を1にして「確定した1本前の足」で判定する。0(現在の足)で判定すると、足の途中で条件が行ったり来たりして無駄なエントリーが増える
  • ポジション保有中は再エントリーしないよう、OrdersTotal()でポジション数を確認する処理を別途入れている
  • OrderSendの5番目の引数(スリッページ)はポイント単位。小数点以下3桁(USDJPYなら0.001円刻み)の業者では、3は0.3pipsしか許容しない。約定しにくいときは30(3pips)程度に広げる
  • MQL4の基本から知りたい場合は自作EAの作り方を参照

決済は、1本前の終値が長期の200EMAを割り込んだら(売りは上抜けたら)ポジションを閉じます。自分のEAのポジションだけを対象にするため、マジックナンバーと通貨ペアで絞り込みます。

// 決済判定(1本前の確定足で判定)
for(int i = OrdersTotal() - 1; i >= 0; i--){
   if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
   if(OrderSymbol() != Symbol() || OrderMagicNumber() != 12345) continue;

   // 買いポジション:終値が200EMAを下回ったら決済
   if(OrderType() == OP_BUY && Close[1] < EMA3){
      if(!OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrYellow))
         Print("決済エラー: ", GetLastError());
   }
   // 売りポジション:終値が200EMAを上回ったら決済
   else if(OrderType() == OP_SELL && Close[1] > EMA3){
      if(!OrderClose(OrderTicket(), OrderLots(), Ask, 3, clrYellow))
         Print("決済エラー: ", GetLastError());
   }
}

ループを後ろから回すのは、決済でポジションの番号が詰まっても取りこぼさないためです。

併せて読むMT4 EAのトレーリングストップ実装|MQL4コード4方式MT4(MQL4)のEAにトレーリングストップを組み込むコードを、固定幅・ATR・高安値・移動平均の4方式で紹介。5桁業者のpips換算、StopLevel、OrderModifyのエラー1対策まで入れた共通関数付きです。

時間足別のバックテスト結果

15分足・1時間足・4時間足の3パターンでバックテストした資産曲線です。

15分足

パーフェクトオーダーEAの15分足バックテスト資産曲線

1時間足

パーフェクトオーダーEAの1時間足バックテスト資産曲線

4時間足

パーフェクトオーダーEAの4時間足バックテスト資産曲線

時間足資産曲線の傾向所感
15分足前半に大きく減り、後半に持ち直して最後はプラス。凹凸が多い取引回数は多いが、レンジでのダマシが目立つ
1時間足前半に大きく減り、後半の急な上昇で持ち直して最後はわずかなプラス3つの中では最もバランスがよい
4時間足前半に減り、後半のトレンドで持ち直して最後はプラス。取引回数が少ない大きなトレンドは取れるが、期間あたりの利益は小さい

4時間足で取引回数が減るのは、長期線の200EMAが見ている期間が時間足によって大きく違うためです。FX市場を週5日・1日24時間(週120時間)として計算すると、200本分の長さは次のとおりです。

時間足200本の長さ目安
15分足50時間約2営業日
1時間足200時間約8営業日(1.7週)
4時間足800時間約33営業日(1.5か月強)

4時間足の200EMAは1か月半ほどの値動きをならした線なので、並び順が崩れにくく、揃うのもまれです。大きなトレンドだけが残る代わりに、エントリーの機会そのものが少なくなります。

「パーフェクトオーダーになったらすぐエントリー」という単純なルールでも、3つの時間足とも最後はプラスで終わりました。並び順だけで、トレンドの方向はかなりの割合でとらえられます。

併せて読むMT4バックテストのやり方【初心者向け】EAの設定と結果の見方MT4でEAをバックテストするやり方を画像付きで解説。ヒストリカルデータの準備、ストラテジーテスターのモデル・スプレッド設定、モデリング品質90%の意味、PF・最大ドローダウンなど結果の見方までわかります。

ただし、このままでは安定したトレードには不十分です。レンジ相場では並び順が頻繁に崩れ、小さな損切りを繰り返します。あくまで「トレンド判定の土台」として使い、相場状況を加味するフィルターが必要です。

ダマシ対策:レンジ相場を避けるフィルター

パーフェクトオーダーEAの弱点はレンジ相場でのダマシです。次のようなフィルターを1つずつ追加して、バックテストで効果を比べてみましょう。

フィルター内容狙い
連続本数パーフェクトオーダーがN本(例:3本)続いてからエントリー揃った直後の反転を避ける
傾き短期EMAの傾き(現在値と数本前の差)が一定以上横ばいの並びを除外
乖離終値と短期EMAの乖離がX pips以内伸びきったところでの高値づかみを防ぐ
ADXADXが25以上のときだけエントリートレンドの強さを確認
上位足上位足(1時間足なら4時間足)もパーフェクトオーダー大きな流れと逆行しない
時間帯ロンドン・NY時間のみ値動きの少ない時間帯を除外

フィルターを増やすほどバックテストの成績は良くなりますが、増やしすぎると過剰最適化になります。追加するのは2〜3個までにし、最適化の落とし穴を避けてください。

併せて読むカーブフィッティングとは?EAの過剰最適化を見抜く方法と回避策8つカーブフィッティング(過剰最適化)とは、最適化のしすぎで過去の相場にだけ合ったEAになることです。起きる仕組みと8つの回避方法、フォワードテストや販売ページで見抜く確認方法を、目安の数値つきで解説します。

テスト用EAのダウンロード

このパーフェクトオーダーEAは下からダウンロードできます。ダウンロード

あくまでテスト用のため動作保証はしていません。本番稼働はさせないでください。

パーフェクトオーダーを使った市販EAはある?

2026年10月時点では、「パーフェクトオーダーをベースにしている」と販売ページで明記している市販EAは見つかりませんでした。ロジックの全体を公開していない市販EAも多く、説明文だけでは中身がパーフェクトオーダーかどうかを見分けられません。

自作せずにパーフェクトオーダー系のEAを試したい場合は、フォワード実績を確認したうえで検討してください。市販EAの選び方は以下の記事で解説しています。

併せて読む初心者でもわかる11のポイントで見る失敗しないMT4 EAの選び方MT4 EAの選び方を11のポイントで徹底解説【2026年版】。PF(プロフィットファクター)・最大ドローダウン・バックテスト期間・フォワードテストなど、失敗しないEA選定に欠かせない判断基準を初心者にもわかりやすく整理しました。

パーフェクトオーダーEAのよくある質問

Q1. パーフェクトオーダーとは何ですか?

A1. 期間の異なる3本の移動平均線が「短期>中期>長期」(下降トレンドでは逆)の順に並び、3本とも同じ方向を向いた状態です。短期・中期・長期のどの目線でもトレンドの方向が一致していると判断できます。

Q2. パーフェクトオーダーEAはどんな条件でエントリー・決済しますか?

A2. この記事のEAは、1本前の確定足で25・75・200EMAが上から順に並び、終値が25EMAより上にあれば買います(売りは逆)。決済は、終値が200EMAを割り込んだとき(売りは上抜けたとき)です。

Q3. パーフェクトオーダーだけのEAで勝てますか?

A3. USDJPYの15分足・1時間足・4時間足のバックテストでは、3つとも最後はプラスで終わりましたが、途中で最終的な利益より大きく残高が減る時期がありました。レンジ相場では小さな損切りが続くため、単体では安定しません。過去の検証結果であり、将来の利益を保証するものではありません。

Q4. パーフェクトオーダーのダマシを減らすにはどうすればいいですか?

A4. 連続本数、短期EMAの傾き、ADX(25以上)、上位足のパーフェクトオーダーなどのフィルターを1つずつ追加し、バックテストで効果を比べます。増やしすぎると過剰最適化になるため、2〜3個までにとどめます。

Q5. パーフェクトオーダーEAに向いている時間足は?

A5. この記事の検証では1時間足が最もバランスのよい結果でした。15分足はダマシが多く、4時間足は200EMAが約1か月半分の値動きをならすため、取引回数が少なくなります。

Q6. 移動平均線はSMAとEMAのどちらを使えばいいですか?

A6. EMAは直近の値動きを重く見るため反応が早く、SMAはゆっくり動くぶんダマシは減りやすい反面、エントリーが遅れます。この記事のEAはEMAを使っています。どちらが合うかは通貨ペアや時間足で変わるため、両方をバックテストで比べてください。

Q7. iMAの最後の引数を1にするのはなぜですか?

A7. 1は「確定した1本前の足」を指します。0(現在の足)で判定すると、足の途中で条件が成立したり外れたりして、無駄なエントリーが増えるためです。

まとめ

  • パーフェクトオーダーは3本の移動平均線の並び順でトレンドを判断するシンプルな手法
  • 「揃ったらすぐエントリー」だけでも15分足・1時間足・4時間足すべてで最後はプラスになった(途中の落ち込みは大きい)
  • ただしレンジでのダマシが多く、単体では安定しない
  • 連続本数・傾き・ADX・上位足などのフィルターを2〜3個試し、過剰最適化に注意して改良する
※本記事は情報提供を目的としたもので、特定のEA・金融商品の売買を推奨するものではありません。FX(外国為替証拠金取引)は元本が保証されておらず、レバレッジにより預けた証拠金を上回る損失が発生する可能性があります。記事内の成績・数値は過去の実績であり、将来の利益を保証するものではありません。投資の最終判断はご自身の責任でお願いします。

QUEST CLEAR!

最後まで読んでくれて、ありがとうございます。
つぎのクエストは、この下から選べます。

トム

この記事を書いた人トム

・現役エンジニア(本業はJavaバックエンド)
・以前はMT4のEAを自作してFX自動売買をしていました(現在は引退)
・今はポイ活を「時給」で検証・攻略しています