99.99%のドローダウンがトレーディングボット開発について教えてくれたこと
私が初めて実運用に投入したトレーディングボットは、ほぼすべてを失った。勝率25%、最大ドローダウン99.99%。市場が無慈悲だったから破綻したのではない。ほとんどの人が最初のボットを作るのと同じやり方で——自分の思い込みで雑につなぎ合わせたプロトタイプとして——作ったから破綻したのだ。
これは、その次のシステムで私がなぜすべての手動ルールを削除したのか、そしてその決断が、自動化された戦略の中で人間の判断が本当に置かれるべき場所について何を教えてくれたのか、という話だ。
実データではなく説明用。崩落は一度の悪い取引ではなかった——小さく、確信に満ち、間違った判断が数千回だった。
心地よい間違い
始めたばかりの頃、ハードコードされたルールは「コントロールしている感覚」を与えてくれる。損切りは-3%。利確はどこかで見た切りのいい数字。ポジションサイズはブログで読んだ式。ルールは一つひとつ単体で見れば慎重に思える。だがそれらが組み合わさると、これから直面する状況を一度も見たことのない脆い機械になる。
私の最初のシステムはこうしたルールだらけだった。しかも計算を、使い捨てスクリプトのようにCPU上のループで回していた。きれいで友好的なデータでバックテストしている間は、その何もかもが問題にならなかった。しかし現実の条件——手数料、スリッページ、清算の可能性——が現れた瞬間、すべてが問題になった。紙の上では規律正しく見える-3%のハード損切りは、いざとなればあらゆるノイズに反応して投げ売りし、どんな仮説にも息をつかせない機械になる。ドローダウンは一度の破滅的な取引ではなかった。小さく、確信に満ち、間違った判断が数千回だったのだ。
居心地の悪い教訓
教訓は「損切り値をもっとうまく調整しろ」ではなかった。私自身がボトルネックだったということだ。ハードコードされた閾値の一つひとつは、私の推測をシステムに凍結して埋め込み、未来にそれへ従うよう強制したものだった。
そこで次のシステムでは、ルールについてのルールを定めた。実際に学習する領域の中には、手動ルールを一切置かない。 損切りも、利確も、ポジションサイジングも、レバレッジも。戦略がどう行動するかに影響する判断であれば、モデルは行動の結果から自ら学習しなければならない——私の直感から受け継ぐのではなく。(エクスポージャー上限やキルスイッチといったシステムレベルの安全装置は別レイヤーとして残る。消えるのは、私が取引を手で書き下すことだ。)
極端に聞こえるし、実際に極端だ。だが同時にこれは、初心者がよく陥る失敗のいくつかを静かに減らす規律を強制する:
- プロトタイプ禁止。 プロトタイプとは「後で直す」という約束であり、その「後で」こそ99.99%のドローダウンが棲む場所だ。すべてを最初から本番品質で書く。
- マジックナンバー禁止。 学習されない値は、コードに埋もれた意味不明の数字としてではなく、私が見て、バージョン管理し、根拠を説明できる設定(config)ファイルの中に置く。
- バックテストは痛みを伴うべき。 手数料・スリッページ・清算をすべて反映する。実口座が失うのと同じように損をできないバックテストは、ただの心地よいシミュレーションにすぎない。
人間がなお担うべき場所
手動ルールを取り除いても、人間が消えるわけではない。場所が移るだけだ。私はもはや、ある瞬間にモデルが何をするかを決めない。代わりに、何が「良い」結果なのか——すなわち目的関数、学習する条件、尊重すべきコスト——を決める。その目的を設計することこそ、この営み全体で最も人間的な部分であり、それを誤ることは単一の悪い取引よりはるかに危険だ。モデルはあなたが意図したことではなく、あなたが要求したことを正確に最適化するからだ。
私が毎回選ぶのはこの取引だ。未来のあらゆる状態に対する判断を自分の手で書き下せるという思い込みを捨て、その労力をシステムが学習する世界を定義することに注ぐ。
まとめ
99.99%のドローダウンは高価な教師だが、明快な教師でもある。あのボットはルールがなかったから失敗したのではない。私のルール——硬直し、現実に対して検証されておらず、学習を可能にする代わりに学習を置き換えてしまったルール——を持っていたから失敗したのだ。
最初のシステムを作っているなら、削除できる最も有用なものはあなた自身の確信だ。
これは強化学習トレーディングシステムを作る匿名連載の第1回です。シグナルではなく手法と失敗についての記事であり、投資助言ではなく、戦略の詳細は一切公開しません。