Strasmore Research
学習 Matt Connor著者: Matt Connor

AI取引の実績は検証できますか?

公開されたAI取引実績を検証可能にする六つの証拠とは。読者が求められる記録と、実績が出る前の記録が必要な理由、ライブで一四半期の結果だけでは不十分な理由を解説します。

AI取引の実績が検証可能といえるのは、結果が出る前から存在していた記録を使い、第三者がその実績を再構築できる場合である。オンラインで公開されている情報のうち、この基準を満たすものは非常に少ない。以下は、読者が約二分で確認できるチェックリストである。四項目、すなわちベンチマーク、タイムスタンプ、取引コスト、サンプル期間については、市場データで裏付けている。

AI取引の実績を検証可能にする条件とは?

六つの条件がある。いずれも、主観的な判断ではなく、確認できる事項である。

  1. 結果が判明する前にエントリーが公開されていること。 タイムスタンプは、作成者が後から書き換えられない場所に記録されていなければならない。例えば、その時点でプッシュされたコミットや、証券会社の取引明細である。過去の取引を列挙したファイルは、過去についての主張であって、取引記録そのものではない。
  2. ベンチマークを一つに定め、最初に明示したまま変更しないこと。 「市場を上回った」という表現は、特定の期間における特定のファンドとの比較だと定めるまで意味を持たない。
  3. 報告数値にコストを含めること。 売買手数料、規制関連手数料、空売りポジションの借株料、エントリーと決済の両方で支払うスプレッドを含める。
  4. ランブックを編集履歴のない文書ではなく、バージョン管理されたものにすること。 公開リポジトリが実績の裏付けとなる場合、リンク先はタグ付きリリースまたはコミットハッシュでなければならない。デフォルトブランチへのリンクが示すのは現在の戦略であり、三月に実際に取引した戦略とは限らない。
  5. 損失銘柄を含め、すべてのポジションとすべての口座を示すこと。 稼働している五口座のうち一口座だけを公開するのは、選別である。
  6. 約定が現実的になるだけの開始資金があること。 数百ドルの想定元本なら、実際の注文では表示価格で約定しないポジションも「保有」できてしまう。

この条件の一つが欠けていても、直ちに不正とは限らない。検証できないということであり、読者にとっては、より一般的で、同じように役に立たない状態である。

ベンチマークを事前に定める必要がある理由

結果が出た後に選ぶベンチマークは、金融市場で最も安価な優位性である。2026年上半期の同じ六カ月間について、米国の主要な指数ファンド六本を対象に、価格変化だけを比較した。

クエリ同一期間の米国指数ファンド6本:価格リターン、2026年1月2日〜6月30日
各数値の背後にある正確なSQL
WITH rets AS (
    SELECT ticker,
           round(100 * (toFloat64(argMax(close, window_start))
                        / toFloat64(argMin(close, window_start)) - 1), 2) AS return_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'DIA', 'RSP', 'MDY')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-02')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker
)
SELECT ticker,
       return_pct,
       round(return_pct - min(return_pct) OVER (), 2) AS points_above_worst
FROM rets
ORDER BY return_pct DESC
Run this yourself

IWM21.12%を記録し、DIA8.42%となった。同じ期間で比較すると、6の上位と下位の差は12.7ポイントである。期間終了後に比較対象を選ぶだけで、この差全体を得られる。戦略が何かをする必要はない。ここで示すのは配当を含まない価格リターンであり、もう一つの測定ルールも事前に明示すべきである(月次リターンの測定方法では、トータルリターンの計算を説明している)。

エントリーのタイムスタンプが主張の核心となる理由

値動きの後に現れたエントリーは、チャートの説明にすぎない。一セッション内に市場が動く幅は大きいため、「09:35に投稿」と「15:55に投稿」の違いだけで、主張される優位性の大半が埋もれてしまう。2026年上半期について、各セッションの最初の約定価格から測った値動きは次のとおりである。

クエリ2026年前半、ETの30分刻みで見たSPYの寄り付きからの値動き
各数値の背後にある正確なSQL
WITH minute_px AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           toTimeZone(window_start, 'America/New_York') AS et,
           toFloat64(close) AS px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-02')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
),
opens AS (
    SELECT session_date, argMin(px, et) AS open_px
    FROM minute_px
    GROUP BY session_date
),
buckets AS (
    SELECT session_date,
           toStartOfInterval(et, INTERVAL 30 MINUTE) AS bucket,
           argMax(px, et) AS bucket_px
    FROM minute_px
    GROUP BY session_date, bucket
)
SELECT formatDateTime(b.bucket, '%H:%i') AS et_time,
       count() AS session_count,
       round(quantileDeterministic(0.5)(abs(100 * (b.bucket_px / o.open_px - 1)),
                                        cityHash64(b.session_date)), 3) AS median_abs_move_pct
FROM buckets AS b
INNER JOIN opens AS o ON b.session_date = o.session_date
GROUP BY et_time
ORDER BY et_time
Run this yourself

09:30 ETの区分では、セッション終値までの中央値が、始値から0.216%離れていた。15:30の区分では、中央値が0.415%だった。寄り付き時点でエージェントが知っていた情報では、この値動きのほぼすべてを事前に把握できない。コミット履歴や日付入りの公開フィードが、時系列の前後関係を証明する(AIによる日次市場調査レポートも、同じ条件で成否が決まる)。株式のエクイティカーブを写したスクリーンショットには、その証拠が一切ない。

数値に含めるべきもの

グロスリターンが示すのは、誰も保有できなかったポートフォリオである。すべてのエントリーと決済ではビッド・アスク・スプレッドをまたぐ。これは買いの最良価格と売りの最良価格の差であり、銘柄ごとに同じではない。

クエリ2026年7月15日、正午の1時間:提示スプレッド中央値と$25,000往復取引コスト
各数値の背後にある正確なSQL
SELECT ticker,
       round(quantileDeterministic(0.5)(20000 * (toFloat64(ask_price) - toFloat64(bid_price))
                                        / (toFloat64(ask_price) + toFloat64(bid_price)),
                                        cityHash64(sip_timestamp)), 2) AS median_spread_bps,
       round(25000 * quantileDeterministic(0.5)(2 * (toFloat64(ask_price) - toFloat64(bid_price))
                                                / (toFloat64(ask_price) + toFloat64(bid_price)),
                                                cityHash64(sip_timestamp)), 2) AS round_trip_cost_per_25k_usd
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'MSTR')
  AND sip_timestamp >= toDateTime('2026-07-15 15:00:00')
  AND sip_timestamp < toDateTime('2026-07-15 16:00:00')
  AND bid_price > 1
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY median_spread_bps DESC
Run this yourself

この昼間の一時間では、提示スプレッドの中央値はMSTRに対して10.08ベーシスポイント、SPYに対して0.27だった。ベーシスポイントは、パーセントポイントの百分の一である。25,000ドルのポジションでスプレッドを往復一回分支払うと、この一覧の広い側では$25.2、狭い側では$0.66のコストがかかる。いずれも手数料を含まない。ポートフォリオ全体を週に一回入れ替える場合、このコストを年間約五十回支払うことになる。これを記録から除外すれば、その金額をひそかに自分の収益へ加えていることになる(株式の取引コストでは、残りの費用を説明している)。

ライブ運用の結果が意味を持つまでの期間は?

ライブ取引の四半期は、幅広い分布から一度抽出した結果にすぎない。その分布の幅は測定できる。2015年一月以降、S&P 500連動ファンドとして最大のSPYについて、指定期間のすべての重複ウィンドウをパーセンタイルに分類した。

クエリ2015年以降のSPY保有期間リターン:5パーセンタイル、中央値、95パーセンタイル
各数値の背後にある正確なSQL
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
           toFloat64(argMax(close, window_start)) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2015-01-02')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session_date
),
series AS (
    SELECT groupArray(close_px) AS px
    FROM (SELECT close_px FROM daily ORDER BY session_date)
),
horizons AS (
    SELECT arrayJoin([21, 63, 126, 252]) AS sessions, px
    FROM series
),
windows AS (
    SELECT sessions,
           arrayJoin(arrayMap(i -> (i, 100 * (px[i + sessions] / px[i] - 1)),
                              range(1, length(px) - sessions + 1))) AS w
    FROM horizons
),
measured AS (
    SELECT sessions,
           w.1 AS window_index,
           w.2 AS window_return_pct
    FROM windows
)
SELECT multiIf(sessions = 21, '1 month',
               sessions = 63, '3 months',
               sessions = 126, '6 months',
               '12 months') AS holding_period,
       count() AS window_count,
       round(quantileDeterministic(0.05)(window_return_pct,
                                         cityHash64(window_index * 1000 + sessions)), 1) AS p05_return_pct,
       round(quantileDeterministic(0.50)(window_return_pct,
                                         cityHash64(window_index * 1000 + sessions)), 1) AS median_return_pct,
       round(quantileDeterministic(0.95)(window_return_pct,
                                         cityHash64(window_index * 1000 + sessions)), 1) AS p95_return_pct,
       round(quantileDeterministic(0.95)(window_return_pct,
                                         cityHash64(window_index * 1000 + sessions))
             - quantileDeterministic(0.05)(window_return_pct,
                                           cityHash64(window_index * 1000 + sessions)), 1) AS spread_pct,
       round(stddevSamp(window_return_pct), 1) AS stdev_pct
FROM measured
GROUP BY sessions
ORDER BY sessions
Run this yourself

2826の重複する三カ月ウィンドウでは、保有して何もしなかった場合の中央値は3.9%だった。5パーセンタイルは-8.8%、95パーセンタイルは12.2%で、その幅は21.1ポイントだった。この範囲内の四半期結果は、指数を保有して休暇に出ていた場合とも整合する。エージェントを二十本立ち上げて一四半期運用し、最良の一本だけを公開すれば、表示される数字は構造上、このような分布の上端から選ばれる。

サンプル期間の計算は厳しい。同じ系列の一二カ月リターンの標準偏差は13.6ポイントである。実際の優位性とノイズを区別するには、概ね(2 × 変動幅 ÷ 優位性)²年のライブ実績が必要になる。この変動幅では、年率3ポイントの仮想的な優位性を確認するには数十年が必要であり、10ポイントの優位性でも数カ月ではなく数年を要する。上記のウィンドウは重複しているため、2826は独立したサンプル数ではなく、ウィンドウ数である。

25,000ドルの実資金なら決着するのか?

実資金は、特定の点で証拠の質を高める。ペーパートレードでは、相手方が合意していない価格で約定し、注文が拒否されることもない。25,000ドルを入金した口座なら、ライブの気配値に対して約定し、実際の手数料を支払う。第三者が監査できる明細も残る。ポジションサイズも、非現実的ではなく通常の約定といえる大きさになる。

ただし、サンプルの問題は解消しない。25,000ドルを四カ月運用しても、上記の分布から一度抽出した結果にすぎない。ドローダウン後にライブ口座を閉鎖し、新しい口座で実績を最初から始めることもできる。資金規模は約定を現実のものにする。結果を有益な情報にするのは、時間だけである。

認識すべき四つの失敗パターン

  • 実績に見せかけたバックテスト。 過去データによるシミュレーション結果は、過去についての仮説である。ルックアヘッド・バイアスは、戦略が当時知り得なかった情報をシミュレーションが取り込む仕組みを示している。最も分かりやすい兆候は、コードが存在する何年も前からエクイティカーブが始まっていることである。
  • 舞台に上がるのは生き残った一つだけ。 エージェントを十本立ち上げ、そのうち一つだけを公開する。マルチエージェントAI取引システムでは、十種類のバリエーションを動かすフレームワークが、記事にする価値のある一つを選んでしまうため、意図せずこの状態になりやすい。
  • 再スタート。 ドローダウン、運用停止、新しい口座、そして再開日から始まるカーブ。決着をつける質問は一つである。最初の口座に最初の一ドルを入れた時点からのエクイティカーブを示せるか。
  • 書き換えられたランブック。 取引から記事作成までの間に、プロンプトやポジション上限が編集されている。LLM生成アルファファクターは大量に作成できるため、選別ルールを選別前に公開しなければならない。そうでなければ、実績はたまたま機能したファクターについての物語になる。

FAQ

AI取引の実績は検証できるか?

できる。エントリーが結果を知る前に公開され、ベンチマークが事前に固定され、コストが数値に含まれ、すべての口座が示されている場合である。確認作業は機械的で、数分で終わる。公開されている実績の大半は、最初の条件で失格となる。

AIのライブ取引実績はどれだけの期間が必要か?

公開されている実績のほぼすべてよりも長い期間が必要である。ここで測定したウィンドウでは、指数の一二カ月リターンの標準偏差が13.6ポイントだった。控えめな優位性と偶然を通常の信頼水準で区別するには、最低でも数年、小さな優位性なら数十年が必要になる。

25,000ドルでAIポートフォリオの結果を意味のあるものにできるか?

約定を現実のものにするには十分である。ライブの気配値、実際の手数料、監査可能な明細を使える。しかし、数カ月の結果を統計的に意味のあるものにするには不十分である。これは口座規模ではなく、経過時間の問題である。

バックテストと実績の違いは何か?

バックテストは、すでに存在するデータにルールを適用する。実績は、結果が出る前に公開された意思決定の連続である。次に起きる結果によって反証できるのは後者だけであり、それが証拠となる理由である。

ベンチマークの選択がそれほど重要なのはなぜか?

2026年上半期には、上記の六つの指数ファンドの価格リターンだけで12.7ポイントの差が生じた。期間終了後にベンチマークを選べば、戦略が何もしていなくても、この差全体を取り込める。


このページのすべての数値は、市場データに対する保存済みクエリから取得しており、SQLは各パネルの下に掲載している。同じ期間をStrasmore terminalで指定し、自分の日付に置き換えて確認してほしい。

#ai agents#track record#live trading#backtesting#quant