【ITニュース解説】A/B Testing Trading Rules: The 52 Rejected Trades That Changed My Mind
2026年10月28日に「Dev.to」が公開したITニュース「A/B Testing Trading Rules: The 52 Rejected Trades That Changed My Mind」について初心者にもわかりやすく解説しています。
ITニュース概要
A/Bテストでシステム改善を評価する際、全体のパフォーマンスだけでなく、各ルールで「差分」として生じる処理に着目すべきだ。記事では、厳格なルールが排除した52件のトレードが実は利益を生んでおり、それが「ノイズ」ではなく価値だったと判明した。差分を分析し、本当の効果を見極めることが重要だ。
ITニュース解説
システム開発において、ある機能やアルゴリズムの変更が本当に良い影響を与えるのかを検証することは非常に重要だ。特に、金融市場で自動的に取引を行うシステム、いわゆるアルゴリズムトレーディングでは、わずかな取引ルールの変更が大きな損益の差を生むため、その検証方法は厳密でなければならない。この記事では、トレーディング戦略における「フィルター」、つまり取引を行うための条件やルールの厳しさを評価するために、「A/Bテスト」の考え方を取り入れた具体的な分析手法について解説する。
多くの開発者は、新しいフィルターを導入したり、既存のフィルターの厳しさを調整したりした際、その変更がもたらす最終的な損益の推移を示す「エクイティカーブ」(資産曲線グラフ)を比較しがちだ。例えば、より厳格なフィルターを適用した戦略のエクイティカーブが、緩和されたフィルターのものよりも滑らかで利益が大きい場合、厳格なフィルターが良いと判断されることが多い。しかし、エクイティカーブは全てのトレードの結果を合計したものであり、フィルターが具体的にどのようなトレードを改善し、あるいは悪化させたのか、その詳細な影響を直接的に教えてはくれない。厳格なフィルターがエクイティカーブを改善したように見えても、それが本当に悪いトレードだけを除去した結果なのか、それとも、たまたまその期間に損を出しただけで本来は利益を生むはずだったトレードまで除去してしまった「オーバーフィッティング」(特定のデータに過度に適応し、汎用性を失うこと)の結果なのかは、エクイティカーブだけでは区別できない。また、トレードのタイミングが変わったことで、あたかも良い効果が出たように見せかけている可能性もある。これらの理由から、最終的なエクイティカーブだけを見て判断するのは非常に危険であり、フィルターの真の効果を見抜くためには、より深い分析が必要になる。
そこで提案されるのが、「差分分析」という方法だ。これは、2つの異なるフィルター(例えば「厳格なルール」と「緩和されたルール」)を比較する際に、それぞれのフィルターがどのようなトレードを実行し、どのようなトレードを拒否したのかを詳細に分析する手法だ。具体的には、同じ期間、同じデータに対して、厳格なルールと緩和されたルールの両方で戦略を実行し、それぞれのルールが生成したトレードのリストを作成する。次に、この2つのリストを比較し、以下の3つのグループに分類する。一つ目は、両方のルールが実行した「共有トレード」で、これらはどちらのフィルターを選んでも結果は同じだったため、フィルターの優劣を判断する上では意味を持たない。二つ目は、厳格なルールは拒否したが、緩和されたルールは実行した「拒否されただけのトレード」だ。このグループは、厳格なフィルターが「削除した」部分であり、もしこのトレード群が利益を生んでいたとしたら、厳格なフィルターはむしろ価値を損なっていることになる。三つ目は、緩和されたルールは拒否したが、厳格なルールは実行した「受け入れられただけのトレード」で、もしこのトレード群が利益を生んでいたとしたら、厳格なフィルターは新しい価値を生み出していることになる。差分分析の肝は、特に「拒否されただけのトレード」と「受け入れられただけのトレード」といった、片方のルールだけが実行した(または拒否した)トレード群に注目し、それらの統計を単独で評価することにある。
この差分分析を行うためには、まず比較対象となる両方の戦略が、全く同じ条件でトレード結果を記録している必要がある。例えば、トレードデータは銘柄、エントリー時刻、決済時刻、方向(買いか売りか)、エントリー価格、決済価格、数量、そして実現した損益など、一貫した形式で保存されるべきだ。Pythonのdataclassesを使ったTradeクラスの定義は、このような構造化されたデータを扱うための一般的な手法である。次に、各トレードを一意に識別するための「トレードキー」を作成する。通常、銘柄名、エントリー時刻、方向の組み合わせで十分だが、同じ銘柄に同じタイミングで複数回エントリーするような複雑な戦略の場合は、エントリー順序を示す番号などを追加する必要がある。これらの準備が整ったら、厳格なルールと緩和されたルールそれぞれで、同じデータ、同じ期間を用いてバックテストを実行し、トレードのリストを得る。そして、それぞれのトレードリストをトレードキーをキーとした辞書に変換することで、簡単にトレードの比較ができるようになる。辞書を使って、厳格なルールに存在しないが緩和されたルールには存在するトレードを「拒否されただけのトレード」リストとして抽出し、その逆のトレードを「受け入れられただけのトレード」リストとして抽出する。両方に存在するトレードは「共有トレード」リストとなる。この抽出作業の後、「共有トレード」の損益が両方のルールで全く同じであるか、また「共有トレード」と「拒否されただけのトレード」の合計トレード数が緩和されたルール全体のトレード数と一致するか、といった「健全性チェック」を行うことは非常に重要だ。これらが一致しない場合、バックテストの実行条件に何らかの差異があり、比較そのものが意味をなさなくなるためだ。
「拒否されただけのトレード」のリストが得られたら、それをあたかも独立した戦略であるかのように統計的に評価する。評価する主要な指標には、トレード数、勝率(利益を出したトレードの割合)、平均勝利額と平均損失額、そして特に重要な「期待値」と「プロフィットファクター」がある。「期待値」とは、1回のトレードあたりの平均的な損益のことで、この値がプラスであれば、長期的に見てそのトレード群は利益を生む傾向にあることを示す。「プロフィットファクター」は、総利益を総損失で割った値で、1より大きければ利益が損失を上回っていることを意味し、戦略の収益性を示す重要な指標となる。記事の例では、厳格なルールが拒否した52のトレードが、勝率48.1%、期待値+0.131U、プロフィットファクター1.50という結果になった。勝率が50%を切ると一見悪そうに見えるが、平均勝利額が平均損失額の約1.7倍もあったため、結果的に期待値はプラスとなり、プロフィットファクターも1.50と健全な値を示していた。この結果は、厳格なフィルターが「悪いトレード」を除去しているのではなく、むしろ「利益を生むはずだった良いトレード」を除去していることを明確に示していた。フィルターの判断の真の効果は、これらの詳細な統計指標を総合的に評価することで初めて明らかになる。
差分分析で得られた統計結果を解釈する際には、いくつかの注意点がある。まず、「拒否されただけのトレード」群が負の期待値を示し、勝率が普通であれば、そのフィルターは意図通り「損失を減らす」効果を発揮していると言える。期待値がゼロに近い場合、フィルターは「ノイズ」を除去している可能性が高い。この場合、フィルターを維持するかどうかは、ドローダウン(最大損失幅)の軽減や運用コスト削減などの他のメリットがあるかに依存する。しかし、もしそのトレード群が正の期待値を示している場合、フィルターは「利益を削除している」と判断される。この場合は、その厳格なフィルターを再検討するか、別の正当な理由がない限りは除去すべきだ。また、分析結果が少数の「幸運なトレード」や特定の「銘柄」に偏っていないかを確認することも非常に重要だ。「集中度レポート」を使って、上位数個のトレードが全体の損益の大部分を占めていないかをチェックする。もし上位のトレードを除外すると期待値が急落するようであれば、その結果は安定したものではなく、偶然の産物である可能性が高い。同様に、「シンボル別内訳」で、特定の銘柄が「拒否されただけのトレード」のほとんどを占め、その銘柄だけで全体の利益を稼いでいないかを確認する。もしそうであれば、そのフィルターの効果は特定の銘柄にしか適用できないと結論付けるべきで、汎用的な改善とは言えない。さらに、サンプルサイズが小さい場合(例えば52トレード程度)、その結果の安定性を確認するために、トレード群を時間で二分割し、それぞれの期間で期待値が維持されるかをチェックすることも有効だ。もし前半で大きく稼ぎ、後半では利益がほとんどない、あるいは損失を出しているようであれば、その結果は安定した戦略特性とは言えない。
差分分析は、どのルールが「正しい」のかを直接的に教えてくれるわけではないが、それぞれのルールが「実際に何をしているのか」を極めて明確にする。この記事の例では、厳格なフィルターはノイズを除去するどころか、プロフィットファクター1.50という健全な利益を生む可能性のあるトレード群を削除していたことが判明した。これは、厳格なルールが過度にフィルターをかけていたことを意味する。この手法は、トレーディングにおけるエントリー条件、エグジット条件、ポジションサイズ決定など、様々な意思決定の比較に応用できる。最終的なエクイティカーブは全ての要素をまとめてしまうため、フィルターの真の効果は隠れてしまう。差分分析こそが、フィルターがもたらす実際の変化を可視化するための唯一の確実な方法と言える。