月曜日、私たちのAIリサーチエージェントは、Sharpe比4.1の暗号資産先物戦略を見つけました。木曜日には、実験回数を数え、同じ検証期間に対する調整をやめさせた結果、数値は0.8になりました。戦略が変わったのではありません。探索で何が得られたのか、その見積もりが変わったのです。
エージェントが数分でコードを書き、バックテストを実行し、スコアを確認して再挑戦できる状況では、「慎重に最適化する」という助言は簡単でも、実践するのは困難です。そこで、小規模なリサーチ日誌として記録しました。何が問題になったか、順に紹介します。
月曜日:範囲を限定した問いを与える
流動性の高い無期限先物市場で、シンプルな時間足トレンド戦略を試すようエージェントに依頼しました。短期移動平均が長期移動平均を上抜けたらエントリーし、固定のボラティリティ目標に合わせてポジションサイズを決め、反対シグナルで手仕舞う戦略です。対象銘柄、期間、手数料体系、ファンディング履歴、約定の前提、探索を許可するパラメーター範囲を指定しました。
対象期間は2021年から2025年まで。2021~2023年を開発用、2024年を検証用とし、2025年は最終ホールドアウトとして封印しました。この分割はジョブ設定に記録し、エージェントが開発結果と検証スコアを参照できる一方、ホールドアウトのリターンは取得できないようにしました。
最初の失敗は、探索予算をリサーチ結果として記録しないまま、1つのジョブで300通りのパラメーターの組み合わせを許したことです。エージェントが返したのは、短期移動平均9時間、長期移動平均73時間、ボラティリティ目標0.8%の設定でした。検証時のSharpeは4.1。多数の設定を試したことは把握していましたが、その事実を忘れられない形にはできていませんでした。
火曜日:再実行すると勝者が入れ替わる
クリーンな環境で同じジョブを再実行しました。最上位の設定は変わり、Sharpeは2.7まで下がりました。初回はマーケットデータのキャッシュが更新済みのファンディング系列を返していたのに対し、再実行では固定したスナップショットを使用していました。どちらのジョブも同じ期間を使うとうたっていましたが、再現可能なデータバージョンを使っていたのは片方だけでした。
スコアの比較をやめ、実験全体を記録し始めました。コードのリビジョン、データのスナップショット、手数料、ファンディング、約定設定、パラメーター値、エージェントが実行した全試行です。記録を見ると、4.1は謎めいた市場の優位性ではありませんでした。同じ検証年を使った300回の探索で選ばれた、1つの設定のスコアだったのです。
水曜日:ホールドアウトを開く前に探索を凍結する
データスナップショットを固定し、事前に宣言した小規模なグリッドで実験を再実行しました。組み合わせは24通りです。エージェントには2021~2023年の開発期間で順位付けをさせました。選定のために2024年を1度だけ見せ、その後、採用設定とコードを固定しました。
選んだ戦略の検証時Sharpeは0.8でした。封印していた2025年のホールドアウトでは、taker手数料、ファンディング、調査を通じて一貫して適用した1本分の約定遅延を反映した後で、スコアは0.3でした。これは有益な結果です。ただし、実口座で利益が出る証拠ではありません。
今週の余談を1つ。移動平均のコードを書くよりも、「1回の試行」の定義に合意するほうに時間がかかりました。パラメーターの組み合わせを変えた場合は1回と数え、シグナルやポジションサイズのルールを変えた実行も数えました。データスナップショットや約定の前提を変えた場合は、順位が同じように変わりうるため、別の実行記録を残しました。
木曜日:次回は省くこと
最初の自由度の高いジョブは省きます。リサーチエージェントには探索予算と試行内容の記録が必要です。各結果をもとに次の試行を決められる場合は、特に重要です。ホールドアウトも、気軽に結果をのぞかれないよう保護する必要があります。誰かが結果を読んで戦略を変えた時点で、その期間は新たな検証セットになってしまいます。
小規模な探索なら、実験台帳は簡潔で明示的なもので十分です。
| 記録項目 | 重要な理由 |
|---|---|
| コードとデータのバージョン | 再実行で同じ入力とロジックを使える |
| 試した全バリエーション | 探索全体を踏まえて勝者を評価できる |
| 開発・検証・ホールドアウトの役割 | 最終スコアをひそかに調整へ再利用しないため |
| 手数料、ファンディング、約定の前提 | 報告結果が検証可能なシミュレーションを示すため |
ホールドアウトを開いた後は、新しいリサーチ課題を立てて開発に戻り、以前の結果は過去の証拠として保存します。すでに見た期間に対して、同じ戦略を磨き続けてはいけません。
エージェントは役割を果たしました。素早く探索し、調べる価値のある設定を見つけたのです。私たちの役割は、その探索を追跡できるようにし、手つかずのテストを守り、スコアを履歴のある測定値として扱うことでした。興味深かったのは4.1でも0.3でもありません。最初の数字がどう作られたのかを、正確に把握できたことです。
← 記事一覧


