EAロジックの作り方|勝率50%から始める戦略設計と改良手順

勝率50%からトレード戦略を改善していくEAロジック作成手順を図解したアイキャッチ画像
EAを自作してみよう
記事内に商品プロモーションを含む場合があります

「EAを作りたいけれど、どんなロジックにすればいいか分からない」
「インジケーターを増やしているうちに、何が効いているのか分からなくなった」
そんな方向けに、この記事ではEAロジックをシンプルな状態から1つずつ改善していく考え方を解説します。

出発点にするのは、勝率50%前後・スプレッドを除けば期待値がほぼゼロになる基準EAです。
そこへテクニカル条件を1つ追加し、バックテスト・最適化・時間足・通貨ペアの違いを確認しながら、どこに優位性があるのかを探していきます。

✅ この記事でわかること
  • EAロジックをシンプルな基準から作る考え方
  • テクニカル条件を1つずつ追加して比較する方法
  • 最適化で「一番良い数字」だけを追わない理由
  • 時間足・通貨ペアも含めてロジックを改善する視点

EAロジック設計は「シンプル」から始める

最初から「勝てる条件」をたくさん組み合わせると、どの条件が成績に効いたのか分かりにくくなります。

そこで、まずはテクニカルな優位性を入れていない基準EAを作ります。考えるのは次の3点だけです。

  1. 売買方向には、あえてテクニカルな根拠を持たせない
  2. 利確幅と損切り幅を同じにする(1ポジション・固定ロット)
  3. 実際の検証ではスプレッドを考慮する

スプレッドを無視すれば、こうした売買は理論上は勝率50%付近・期待値ほぼゼロへ近づきます。実際の取引ではコストがあるため、その分だけマイナス側へ傾きます。

基準EAは「売買判断部分」だけ見れば十分

2020年当時の検証では、時間だけで買い・売りを切り替えるEAを基準にしました。
0分・30分なら買い、それ以外は売りとし、TP・SLは同じ20pipsです。

この記事で重要なのは注文処理そのものではなく、「どこを変えるとロジックが変わるのか」という考え方です。そこで、旧コード全文ではなく売買判断部分だけ掲載します。

// 基準EA:売買判断にはテクニカルな根拠を持たせない
if(Time[0] % 1800 == 0)
{
   orderPtn = 1; // BUY
}
else
{
   orderPtn = 2; // SELL
}

当時、アルパリのヒストリカルデータで確認した結果がこちらです。

勝率50%前後の基準EAをバックテストした結果
テクニカルな優位性を入れていない基準EAのバックテスト例

この状態では勝率は約50%で、PFもほぼ1付近です。
ここを「追加した条件が本当に改善につながったか」を比較するスタート地点にします。

EAにテクニカル分析を1つ追加する

次に、基準EAへテクニカル条件を1つだけ追加します。今回は例としてストキャスティクスを使います。

ストキャスティクスで売買方向を決める

基準EAでは時間だけで売買していましたが、ここをストキャスティクスの値へ置き換えます。

  • 20より下:買い候補
  • 80より上:売り候補
  • 値が中間にある場合:見送り

また、あとで最適化できるように、買い・売りの水準はinputパラメータにしています。

input int E_KAI = 20;
input int E_URI = 80;

// ストキャスティクスの値を取得
double STOC_atai1 = iStochastic(NULL,0,5,3,3,MODE_EMA,0,0,1);
double STOC_atai2 = iStochastic(NULL,0,5,3,3,MODE_EMA,0,0,2);

// 売買判断
if(STOC_atai1 < E_KAI && STOC_atai2 > STOC_atai1)
{
   orderPtn = 1; // BUY
}
else if(STOC_atai1 > E_URI && STOC_atai2 < STOC_atai1)
{
   orderPtn = 2; // SELL
}
else
{
   orderPtn = 0; // 見送り
}

この変更後の当時のバックテスト結果がこちらです。

ストキャスティクス条件を追加したEAのバックテスト結果
基準EAへストキャスティクス条件を追加した検証例

少なくとも、テクニカル条件を入れる前とは結果が変わりました。
ここで大切なのは「この設定が正解」と決めることではなく、追加した条件によって成績がどう動いたかを見ることです。

EAを最適化するときは「答え」より傾向を見る

次に、ストキャスティクスの水準とTP・SLを最適化し、どのあたりで成績が変化するかを確認します。

ストキャスティクスとTP・SLを最適化する設定例
ストキャスティクスの水準とTP・SLを変えて確認した当時の最適化例
最適化で見るのは「一番良い一点」だけではありません

バックテスト上でPFや勝率が最も高い組み合わせが見つかっても、その一点だけを完成形と考えるのは危険です。
数値を少しずらしても極端に崩れないか、期間を変えても同じ傾向が出るかを確認し、広い範囲で安定している条件を探します。

高勝率になる設定の例

当時の検証では、勝率70%超・PF1.10となる設定がありました。

条件は、ストキャスティクス13未満で買い、90超で売り、SL21pips・TP9pipsです。

勝率70%超でPF1.10となったEAのバックテスト結果

プログラム自体は変えず、パラメータだけを変更しています。
この例では、ストキャスティクスを深い位置まで待ち、TPを小さく、SLを大きくしたことで勝率が上がっています。

ただし、勝率が高いこととEA全体の優位性は同じではありません。PF・ドローダウン・取引数・期間ごとの成績もあわせて確認する必要があります。

低勝率でも利幅を大きくする設定の例

反対に、勝率は20%台前半でもPF1.04となる設定もありました。

ストキャスティクス17未満で買い、73超で売り、SL6pips・TP22pipsという設定です。

勝率は低いが利確幅を大きくしたEAのバックテスト結果

この例では勝率は低いものの、利益幅を大きく取る構造になっています。
同じストキャスティクスでも、TP・SLの組み合わせによってEAの性格が大きく変わることが分かります。

直近が良ければ、それだけで採用してよい?

過去全体では利益が出ていても、直近で長く崩れている設定は注意が必要です。
一方で、直近だけ良い設定も、その期間へ偶然合っている可能性があります。
期間を分けて確認し、特定の時期だけに依存していないかを見ることが重要です。

EAロジックのアイデアは「条件追加」だけではない

EAを改善するとき、インジケーターを増やすことだけがアイデアではありません。
同じロジックでも、次の条件を変えると結果が大きく変わることがあります。

見直す項目確認すること
エントリー条件条件を厳しく・緩くしたときの変化
TP・SL高勝率型・損小利大型などEAの性格
時間足同じロジックが別の時間軸でも機能するか
通貨ペア値動きやスプレッドとの相性
取引コストスプレッドが広がっても優位性が残るか

時間足を変えて確認する

同じロジックでも、時間足が変わればシグナルの回数や値動きの特徴も変わります。

5分足の結果

5分足でストキャスティクスEAを検証したバックテスト結果

15分足で使った高勝率側の設定を、そのまま5分足へ適用した例です。
15分足ほど安定した結果にはなりませんでした。

この結果だけで「5分足では使えない」と決めるのではなく、5分足用に検証し直す余地があります。重要なのは、時間足を変えたときに同じ設定をそのまま流用できるとは限らないという点です。

30分足の結果

30分足で最適化したストキャスティクスEAのバックテスト結果

30分足で最適化した当時の例では、PF1.26となる設定が見つかりました。

時間足を大きくすると一般にシグナル回数は減りやすく、逆に短い時間足では増えやすくなります。
「取引回数を増やしたい・減らしたい」という目的も、時間足を検討するきっかけになります。

通貨ペアを変えて確認する

ここまでの検証はドル円を使っていますが、同じテクニカルがユーロドルやポンド円などで同じように機能するとは限りません。

通貨ペアごとに値動きやスプレッドが違うため、別の通貨で試すこと自体がロジック改善のアイデアになります。

スプレッド条件は必ず合わせる

当時のドル円検証ではスプレッド2pointsを使っています。
別の通貨を比較するときは、その通貨で現実的なスプレッドを設定し、取引コストを含めた状態で確認してください。


EAロジック設計に関するよくある質問

EAのロジックは最初から勝てるものを作る必要がありますか?

最初から完成形を狙う必要はありません。まずシンプルな基準EAを作り、条件を1つずつ追加して、何が成績に影響したのか確認する方がロジックを理解しやすくなります。

勝率50%前後のEAを作る意味はありますか?

あります。TP・SLなどの条件を揃えたシンプルなEAを比較基準にすると、あとから追加した条件によって成績がどう変化したか確認しやすくなります。

テクニカル分析は何個まで組み合わせればよいですか?

最初は1つずつ追加するのがおすすめです。複数条件を同時に加えると、どの条件が改善・悪化の原因なのか分かりにくくなります。

カーブフィッティングを避けるにはどうすればよいですか?

最適化で一番良い一点だけを選ばず、パラメータを少し変えても崩れないか、期間を分けても同じ傾向が出るかを確認します。特定期間だけに強く合わせすぎないことが重要です。

EAの最適化では何を見ればよいですか?

PFや勝率の最高値だけでなく、周辺の設定でも成績が大きく崩れないかを見ます。取引数やドローダウン、期間ごとの成績も合わせて確認してください。

まとめ|シンプルに戻して1つずつ改善する

EAロジックを考えるときは、最初から条件を盛り込むよりも、シンプルな基準を作って1つずつ比較する方が、改善点を見つけやすくなります。

今回の流れ
  1. 優位性を入れていない基準EAを作る
  2. テクニカル条件を1つ追加する
  3. バックテストで変化を確認する
  4. 最適化では「一点」ではなく傾向を見る
  5. 時間足・通貨ペア・TP/SLなどを変えて再検証する

設定を変えたあとは、バックテストの数値だけでなく、ビジュアルモードでエントリー・決済位置を確認することも重要です。

EA開発で迷ったときは、「シンプルに戻す → 検証する → 1つだけ改善する」という流れに戻ってみてください。

関連記事

EAロジック・最適化・バックテストをもう少し詳しく確認したい方はこちら。

💡 このサンプルをベースにしたカスタマイズ相談も可能です。
仕様相談・EA作成の詳細はこちら


✅ 今回のロジックをベースにしたEAサンプルも多数公開中

今回紹介したようなEAの実装例・考え方をベースに、
当サイトではさまざまなFX自動売買EAのサンプルコードを公開しています。

ロジックの違いや設計の考え方を比較しながら、
自分に合ったEA構成を探したい方はぜひチェックしてみてください。


📊 EA運用・検証フェーズに進みたい方へ

今回のような仕組みを理解したうえで、
「実際にどのEAが安定しているのか」「検証データではどんな差が出ているのか」
を確認したい方は、以下の記事も参考になります。


⚙️ 同じ条件でバックテストしたい方へ(検証環境)

当サイトのバックテストは、同一の検証環境で比較できるように統一しています。
EAの再現テストやパラメータ検証を行う場合は、
検証環境の作り方もあわせて確認しておくと理解が深まります。


EA開発初心者向けに、今後も実践的に使えるMQL4関数や実装例を紹介していきます。
気になる機能やロジックがあれば、用途別に整理した関連記事もぜひあわせてご覧ください。

コメント

  1. イノウエさんのアイコン イノウエ より:

    1分間でどれだけ上下しているのかを探す、EAがないか探しておりましたら、こちらのサイトに行き着きました。
    プログラミングが得意ではないですが、拝見させていただいて、EAを選ぶのに参考になりました。

    • イノウエさんのアイコン イノウエ より:

      ✕1分間でどれだけ上下しているのかを探す、EAがないか探して

      ○1分間で相場がどれだけ上下?しているのをカウントする、EAがないか探しております。

      わかりにくかったので訂正します。これでも伝わらないかもしれません。すみません。

      希望としては公開はしてほしくはありません。

      • りょうさんのアイコン りょう より:

        『1分間で相場がどれだけ上下?しているのをカウントする』というのは出来高の事ですか?1分足が形成される間に105.410→105.411→105.412→105.411→105.411→105.410→105.409・・・というように値動きが何回起きたかを確認したい場合、MT4のインディケータ(標準搭載)でボリューム→Volumesを1分足チャート上に表示すると1分間に何回値動きがあったかを表示してくれますよ。ただ、それを用いてトレードするEAとなると私はまだ作った事がない&オススメの販売EAもわからないのでお力になれません!

  2. イノウエさんのアイコン イノウエ より:

    ありがとうございます。
    書いたのが、どのページが忘れてしまって遅れてすみません。
    ちょっと違います。
    始まり→ 上1回→ 上1回→ 下1回→ 同じ1回→下1回 →下1回
    105.410→105.411→105.412→105.411→105.411→105.410→105.409・

    その1分足の結果
    上2回 下3回 同じ1回(カウントなし)
    というのを ローソク足の上下に数値で表せないかということです。
    すっと観ていて、パターンがあるのではないかと。
    それで、検証したら面白いのではないかと

    • りょうさんのアイコン りょう より:

      なるほど、上下をカウントして表示するといった感じでしたか!
      1分前のデータがカウントできないので現在(MT4とインジを起動してから)からのカウントしか出来ないですけど、作ろうと思えば作れそうです。プライスアクション系のインジケータになりそうですね。ただ、ブローカーによって数値がかなりブレる気もします!

タイトルとURLをコピーしました