【要約】売買戦略を7つ実装して比べた ― そして順位が全部入れ替わった [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、複数の自動売買戦略を比較検証する際、シミュレーションのロジックミスによって誤った結論を導き出すリスクに直面した。具体的には、以下の問題が発生した。
- ・戦略ごとに異なるはずの取引回数が、全て「7件」で一致するという不自然な現象が発生した。
- ・資金管理変数
cash_used_todayが、売却による資金回復を考慮せず「当日の累計使用額」を保持していた。 - ・その結果、資金不足による取引拒否が頻発し、戦略の本来の性能が測定不能となっていた。
// Approach
開発者は、損益の数値そのものではなく、取引回数の不自然な一致という「データの振る舞い」に着目して原因を特定した。その後、以下の手順で修正を行った。
- ・資金管理の定義を、当日の累計使用額から、現在拘束されている額を示す
cash_committedへ変更した。 - ・売却によって解放された資金が、即座に次の買付に利用できるロジックへと修正した。
- ・修正後、前半・後半の期間で成績を比較し、ランダムなエントリーと比較する厳格な評価プロセスを再実行した。
// Result
ロジックの修正により、戦略の評価が劇的に改善し、本来の優位性が明らかになった。得られた成果は以下の通りである。
- ・移動平均クロス(5/20)において、取引数が28件から81件へ増加し、損益が大幅に改善した。
- ・最下位だった「順張り」戦略が、修正後はランダムを上回る上位の成績を示した。
- ・バグに基づいた誤った戦略の削除を回避し、正しい比較土俵を再構築できた。
Senior Engineer Insight
> バックテストはエラーを吐かずに「もっともらしい誤報」を出す。数値の妥当性を疑うには、損益だけでなく取引回数などのメタデータに目を向けるべきだ。本件のように、ロジックの欠陥が戦略の評価を根底から覆す。実戦投入前には、統計的有意性とコストモデルの精度を極めて厳格に検証せよ。