テクニカルEA化

EAのエントリー回数に1日の上限を設けるべきか

EAをリアルに投入したら、1日に30回エントリーしている。 しかもそのうち20回は利益1 USD以下で、手数料とスプレッドでほぼ相殺。EAの実質的な利益に貢献していない取引が大量にある。 1日あたりのエントリー回数上限(MaxDailyTrades)は、以下のメリットがある: 1. 無駄な取引の排除: 期待値の低いエントリーを減らせる 2. 手数料の節約:

Read this for この手法を、EAの条件として分解する。

テクニカルは入口だけではなく、見送り条件、方向判定、撤退条件に分けると検証しやすくなります。

Category テクニカルEA化

EA logic

EAのエントリー回数に1日の上限を設けるべきか

EAをリアルに投入したら、1日に30回エントリーしている。

しかもそのうち20回は利益1 USD以下で、手数料とスプレッドでほぼ相殺。EAの実質的な利益に貢献していない取引が大量にある。

結論

1日あたりのエントリー回数上限(MaxDailyTrades)は、以下のメリットがある:

  1. 無駄な取引の排除: 期待値の低いエントリーを減らせる
  2. 手数料の節約: スプレッド + 手数料が取引ごとに発生する
  3. 暴走防止: ロジックのバグで無限ループ的にエントリーするのを防ぐ
  4. DD抑制: 1日に集中して負ける連敗を制限できる

設定の目安:

なぜEA運用で重要か

エントリー回数が多いほどPFが上がる——とは限らない。取引回数が多いのは「期待値の低い取引も拾っている」可能性がある。

取引回数を制限することで「期待値の高い取引だけを残す」効果が得られる場合がある。

仕組み・条件

MQL5での実装例

input int MaxDailyTrades = 10; // 1日のエントリー上限

int CountTodayTrades()
{
    int count = 0;
    datetime today = StringToTime(TimeToString(TimeCurrent(), TIME_DATE));
    
    for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
    {
        ulong ticket = HistoryDealGetTicket(i);
        if(ticket == 0) continue;
        
        datetime deal_time = (datetime)HistoryDealGetInteger(ticket, DEAL_TIME);
        if(deal_time = MaxDailyTrades)
{
    // 本日のエントリー上限に達したため見送り
    return;
}

上限の決め方

  1. バックテストの1日あたりの平均取引回数を確認する
  2. 上限なしのPFと、上限ありのPFを比較する
  3. 上限を段階的に変えて(5, 10, 15, 20)PFの変化を確認する
  4. 「上限を入れてもPFが変わらない or 改善する」値を採用する

バックテストやリアル運用で壊れるポイント

どう確認するか

  1. バックテストで1日あたりの取引回数分布を確認する
  2. 取引回数と損益の相関を確認する(取引が多い日ほど損益が良いのか?)
  3. 上限を段階的に変えてPFの変化を確認する
  4. 上限は時間帯フィルターと組み合わせて使う

自分の検証スタンス

デイトレード型EAには1日5回、スキャルピングEAには1日15回の上限を設けている。

上限の数字自体は最適化しない。「明らかに多すぎる取引を止める」のが目的であり、上限をPF最大化のために調整すると過剰最適化になる。

関連して読む

Technical to EA この手法を、EAの条件として分解する。

テクニカルは入口だけではなく、見送り条件、方向判定、撤退条件に分けると検証しやすくなります。

参照した公式情報

免責

本記事は個人の検証メモであり、投資助言ではありません。バックテスト結果は将来の成績を保証しません。海外FXや自動売買には、法規制・レバレッジ・スプレッド拡大・約定遅延・スリッページなどのリスクがあります。条件は変わるため、最新情報は各公式ページで確認してください。