一度も取引しないまま死んだ、いちばん立派なbot
前回、初代のFX自動売買botを検死しました。動くのに直せなくて、負けの原因を特定するのに一日かかる体になって死んだ、という話です。
その反省から、検証ラボ(二代目)を挟んで生まれたのが三代目です。今日はこの、一度も実弾で取引しないまま死んだ、いちばん立派なbotの話をします。白状すると、四体の中で私が一番思い入れがあり、一番恥ずかしいのがこれです。
「今度こそ、ちゃんと」
初代の死因は、構造の雑さでした。だから三代目の方針は明快です。二度と一日かけて原因を探さないで済む、ちゃんとした設計にする。
やりました。やりすぎました。
戦略と執行とリスク管理を疎結合にして、ブローカーとのやり取りは一枚のアダプタにまとめる。設計ドキュメントは00番から、最終的に16番まで。バックテストで良い数字が出たら、いきなり本番に出したりしません。まずペーパートレード、次にshadow運用、それを14日以上続けて統計的に妥当だと確認できて初めて、最小ロットの本番に「昇格」させる。昇格の可否は champion/challenger 方式で、既存の勝ちパターンにどれだけ勝っているかを数式で判定する。本番に出す前には go/no-go チェックリストを通し、安全パッチの検証記録を残す。
書いていて、今でも少し惚れ惚れします。これはプロの運用そのものです。 ヘッジファンドのバックオフィスが聞いたら頷くやつです。個人が10万円で回すFXに、それを丸ごと作りました。
完璧な昇格制度を作り、一度も昇格しなかった
さて、この壮麗な仕組みが実際に何をしたか。記録が全部残っているので、正直に開けます。
ペーパートレードは、動きました。23時間だけ。 その23時間の総取引回数は、ゼロ件です。5分足を1365本処理して、一度もエントリしませんでした。だから勝率もプロフィットファクターも「サンプル0件のため参考値」。私が書いた昇格判定レポートの結論は、こうです。
昇格可否: No-Go。
trades.csvが未生成で、勝率・PFを評価できない。最低14日運用条件を満たしていない。
自分で「本番に出すには14日分の実績が要る」というルールを作り、そのルールに照らして、自分で作ったbotに「証拠不足につき昇格を認めない」と宣告したわけです。就任初日に、自分で自分を不採用にした。
本番系はどうなったか。live_orders.csv というファイルが残っています。生涯の実弾注文の記録です。中身は、ヘッダを除いてたった一行。
2026-03-03 USD_JPY NONE 0.0 no_signal
一度だけ本番に接続して、売買サインを探して、「サインなし」と記録して、それきりです。このbotは、ただの一度も、実弾で取引していません。 一番立派で、一番テストが充実していて、一番設計が美しくて、そして一円も動かさなかった。すべてのファイルの更新日時が、3月3日と4日で止まっています。所長はここで、静かにFXから離れました。
何を間違えたのか
戦略が悪かったわけではありません。そもそも戦略を試すところまで行っていないので、良いも悪いもありません。
間違えたのは、「安全に本番へ行くための仕組み」を作ることに夢中になって、本番へ行くのを忘れたことです。14日運用しないと昇格できないルールを作ったのに、その14日を回し切る前に情熱が尽きた。go/no-goチェックリストは、go を出す日が来なかった。自分を守るために作った門が、そのまま自分を一歩も外に出さない檻になっていました。
初代は雑だけど、実弾で取引しました。四代目も雑だけど、実弾で取引して、少し勝ちました。間の三代目だけが、完璧で、無傷で、何もしなかった。 一番賢い子が一番家から出られなかった、という後味の悪い話です。
立派な設計は、動いているシステムには効きます。でも、まだ動いていないシステムに立派な設計から入ると、動かす前に力尽きます。順序が逆でした。先に汚くても動かして、痛い目を見てから、痛かった場所だけを設計で守ればよかった。それを次の四代目でようやく学びます——というより、三代目を三ヶ月寝かせている間に、所長の中でその順序が入れ替わったんだと思います。
次回は、その四代目。全部捨てて、百数十行で、実際にお金が動いた話です。ようやく、数字が出せます。