賢いLLMほど、大きく負けた。同じルールで haiku と sonnet にデイトレをさせてみた

日経225のバックテストで、トレードの判断だけをLLMに任せて、モデルを claude-haiku-4.5 から claude-sonnet-5 に替えてみました。勝率はほぼ同じなのに、損失は約3倍。差を生んだのは判断の質ではなくポジションサイズでした。数字は全部、仮想口座の元本比で書きます。

同じ売買ルール・同じ相場・同じ仮想資金で、トレードの判断だけをLLMに任せる実験をしています。判断するモデルを claude-haiku-4.5 から上位の claude-sonnet-5 に替えたら、勝率はほぼ同じ(34% vs 32%)なのに、損失は約3倍になりました。差を生んだのは判断の質ではなく、1回に張る量(ポジションサイズ)。「モデルを賢くすれば取引が上手くなる」という素朴な期待は、少なくともこの設定では成立しなかった、という記録です。

なお、ここに書くのは全部「僕はこう検証した」という記録です。投資の助言をする立場ではないので、何をやるべきかという話は書きません。

もう1つ先に。このブログでは損益を金額で書かないことにしているので、数字は仮想口座の元本に対する割合(%)と値幅(ポイント)で書きます。そのまま書くのは実費(API代)だけです。

結論。勝率は同じで、賭け金が10倍違った

結論から言うと、負けの主因は判断の質ではなく、ゲームの構造と賭け金でした。

この実験の設定は、取引のたびにスプレッド(後述します)という手数料を払い続ける、構造的に分の悪いゲームになっています。そして勝率がモデルの賢さで変わらない以上、大きく張ったほうが正確に大きく負けます。sonnet は haiku より明らかに精緻な分析を書きながら、その確信をサイズに変換して、同じ負けゲームを約10倍のレートでプレイしていました。

claude-haiku-4.5 claude-sonnet-5
取引回数 246 167
勝率 34.1% 32.3%
月間損益(元本比) −10.5% −30.0%
1回に張る量(中央値) 6.5 units 70 units
API費用 $43.46 $37.28

以下、実験の設定から順に書きます。

実験の設定。判断だけをLLMに任せて、残りは全部コードで固定した

やったことは「トレードの判断だけをLLMに任せて、それ以外を全部コードで固定する」です。

背景から。5分足チャート(5分ごとの値動きをローソク1本にまとめたもの)と口座の状態をLLMに見せて、裁量トレードをさせる実験を続けています。まず claude-haiku-4.5 で2026年3月の1ヶ月をバックテスト — 過去の値動きデータの上で売買を再生して成績を測るテスト — したところ、月間で元本の−10.5%という負け越しでした。

ここで自然に浮かぶのが、この問いです。

負けているのはモデルの能力不足のせいか? もっと賢いモデルに替えれば勝てるようになるのか?

仮説は素直に「上位モデルなら改善する。少なくとも悪くはならない」と置きました。チャートの文脈読解も、ルールの遵守も、リスク管理も、上位モデルのほうが得意なはずだという理屈です。つまり暗黙に「負けの主因は判断の質にある」という前提を置いていたことになります(ここが後で崩れます)。

実験環境はこうです。

  • 銘柄は日経225のCFD(JP225_USD)。実測の買値・売値データを1分単位で再生します
  • 期間は2026年3月の22営業日。資金は仮想口座に一定額を入れて、両条件で同じにしました
  • 15分ごとにLLMを1回呼んで、「新規で入る / 決済する / 何もしない」をJSONで返させます(構造化出力といって、決まった形式でしか返事できないようにする仕組みです)
  • 約定は、買いは売り手の提示価格(ask)・売りは買い手の提示価格(bid)。この2つの差がスプレッドで、取引のたびに必ず払う手数料みたいなものです。実験でも毎回ネットで負担します
  • プロンプトは、売買ルール集(どういう場面で入って、どこで切るか。中身は「伸び切ったところの逆張り」と「トレンドに乗る順張り」の2型)+口座状態+直近の5分足24本。両モデルで一言一句同一です(diffで確認済み)

LLMの裁量が及ばない、機械強制のルールも置いています。

  • 損切りの予約注文(SL)を付けない新規注文は拒否
  • 実効レバレッジ — 元本に対して何倍の金額を張っているか — が10倍を超えないよう、量を自動で切り詰め
  • 1日の確定損失が元本の−3%に達したら全ポジションを閉じて、その日は新規停止
  • 相場の状態判定(レンジか、トレンドか、急変か。急変時は取引禁止)は決め打ちのしきい値で機械化

比較した2条件は、haiku 4.5(思考の深さ medium)と sonnet-5(同 high)。差し替えたのはモデルと思考の深さだけで、ルール文言・約定エンジン・強制ルールは全部共通のコードパスです。各回のプロンプト全文と判断は保存して、あとから検証できるようにしました。

結果。取引は3割少ないのに、損失は約3倍

結果は冒頭の表のとおりで、sonnet のほうが取引回数は3割少ないのに、損失は約3倍でした。勝率はほぼ同じです。

取引が少ないのは、慎重だったからではありません。それが分かる数字がもう1つあって、日次−3%ルールで強制停止していた時間帯のスキップ数が、haiku の464回に対して sonnet は1,264回でした。

つまり sonnet は、多くの営業日で午前中に1日の損失枠を使い切って、その日の残りを強制退場で過ごしていました。「慎重だったから取引が少ない」ではなく「早く負けすぎて打ち止めになった」が正しい説明です。

差の正体はポジションサイズだった

1トレードあたりに分解すると、勝ち負けの「形」は同じで、賭け金だけが違いました。

1トレードあたり haiku 4.5 sonnet-5
平均の勝ち(元本比) +0.49% +1.13%
平均の負け(元本比) −0.32% −0.81%
最大の単発損失(元本比) −4.1% −8.8%
期待値(元本比) ≈ −0.04% ≈ −0.19%
張った量(中央値) 6.5 units 70 units

どちらも「勝ち幅は負け幅の約1.4倍、勝率は約3分の1」という同じ形をしています。違うのは1回に張る量で、sonnet は中央値で haiku の約10倍。

期待値というのは、1回の取引あたり平均でどれだけ増減するかの見込みのことです。これがマイナスのゲームでは、張った量にほぼ比例して多く失います。−10.5% と −30.0% の差は、ここから来ていました。

そもそも、このゲームは構造的に分が悪かった

勝率がモデル間でほぼ変わらなかったことは、「15分ごとに5分足24本を見て方向を当てる」というタスク自体に、賢さで拾える予測情報がほとんど無いことを示唆しています。ここは示唆止まりで断定はしませんが、コスト構造のほうは計算だけで言えます。

  • スプレッドは平常時10〜17ポイント(ポイントは指数の値幅の単位です)。損切り・利確の幅は中央値で100ポイント前後なので、入った瞬間に数%〜十数%のハンデを毎回背負う計算になります。ここは統計でも仮説でもなくて、ただの割り算です
  • 方向の予測に優位性が無い — つまり勝ち負けがほぼランダム — なら、期待値は「スプレッド分のマイナス × 張った量」に収束します

つまりこの設定は構造的に負けやすくて、その中での最適行動は「張らない」か「最小で張る」なんですよね。haiku の−10.5%と sonnet の−30%の差は、この構造の中でどれだけ大きく張ったかの差にすぎない、というのが僕の整理です。

なぜ賢いモデルほど大きく張ったのか。ここは僕の見立て

ここからは僕の見立てなので、根拠の強さがここまでの計算と違うことを先に書いておきます。

sonnet の判断ログを読むと、チャート構造の記述は haiku より明らかに精緻で、エントリー根拠の文章は説得力があります。ただ、それが裏目に出たように見えました。

  1. 確信がサイズに変換された。 精緻な分析は「根拠が揃っている」という自己評価を生んで、リスク枠の許す上限近くまで張る判断につながっていました
  2. 分析の精緻さと予測力は別物。過去24本の5分足をどれだけ上手に言語化しても、次の15分の方向についての情報は増えません。sonnet は「読めていないのに読めている感覚」を haiku より強く持った、と解釈しています(人間でも身に覚えがあるやつです)
  3. haiku は能力の限界ゆえに最小サイズに留まることが多く、結果的に、能力の低さがリスク管理として機能していました

人間のトレーダーの世界でも「分析力と収益力は別物で、過信はサイズの張りすぎを生む」という話はよく言われます。そのLLM版を見た気がしています。

この実験から言えないこと

一番効く反論は「その差、ただのばらつきでは?」だと思うので、自分で先に書いておきます。

  • LLMの出力は毎回同じではないので、これは各条件1回ずつ(n=1)の比較です。日ごとの成績のばらつきは実際大きくて、haiku の別の実行では、同じ期間の一部でプラスの週もありました。ただ、月間で−10.5% vs −30.0%、サイズ中央値で約10倍という差は、ばらつきだけで説明するには大きいと思っています。断定まではしません
  • 思考の深さも同時に変えています(haiku=medium、sonnet=high)。ただ、haiku の中で medium と high を比べた限りでは、成績にもAPI費用にも目立つ差は出ませんでした
  • 1ヶ月・1銘柄・15分間隔という、1つの設定だけの話です。時間軸や銘柄が変われば、結論が変わる可能性は普通にあります
  • バックテスト特有の近似(損切り・利確の判定が1分単位、判断が15分に1回だけ)は両条件共通なので比較自体は歪めませんが、絶対値は実運用とは一致しません

次にやること。賢さを「ルールを書き直す側」で使ってみる

次は、モデルの賢さを「ルールを実行する側」ではなく「ルールを書き直す側」で試します。

ライブ運用のほうでは、AIが自分の学びノートを週次で自己改訂するループを回しています。これをバックテストにも組み込んで、人間が固定したルール vs AIが自己改訂するルールを、同じ3月のデータで比べる予定です。実行側では役に立たなかった賢さが、書き直す側でなら効くのか — が次の問いになります。

まとめ。改善の順序は「モデルを上げる」ではなかった

同じルール・同じ相場で、モデルを賢くしたら損失が約3倍になりました。勝率は変わらず、変わったのはポジションサイズ。分の悪いゲームでは、賢い分析は「大きく張る根拠」という形で裏目に出ました。

なので、LLMにトレードをさせる仕組みの改善順序は「モデルを上げる」ではなく、(1) ゲーム自体の期待値をプラス側に寄せる(コスト構造や時間軸を変える)、(2) サイズの決定をLLMの裁量から外して機械式に固定する、の順だと思っています。LLMに任せていいのは方向とタイミングまで、サイズは渡さない。これが今回の答えです。

書き終えて思うのは、モデル比較で勝率と損益だけ見ていたら、たぶん「sonnet は下手」と誤読していたな、ということです。サイズの分布と、日次の強制停止に何回到達したかまで見て、はじめて「賢いのに負けた」の中身が分かりました。

続きの実験も、動いたら書きます。よかったら見て行ってね(^^)