Strasmore Research
學習 Matt Connor作者: Matt Connor

AI交易績效紀錄如何驗證?六項檢查清單

AI交易績效要可驗證,須檢查事前時間戳記、固定基準、交易成本、版本控制、完整部位與足夠資本;單一實盤季度不足以證明成果。

AI 交易績效紀錄具備可驗證性,是指陌生人能根據結果尚未發生前就已存在的紀錄,重建整段績效。網路上公開的內容,極少達到這項標準。以下是讀者約兩分鐘內即可套用的檢查清單,其中四項有市場資料支持:基準、時間戳記、交易成本與樣本長度。

什麼樣的 AI 交易績效紀錄具備可驗證性?

共有六項特徵。每一項都能直接查找,而不是憑主觀判斷。

  1. 進場紀錄在結果揭曉前公開。 時間戳記必須位於作者無法改寫的地方,例如當時推送的 commit 或券商對帳單。列出過往交易的檔案,只是對過去的說法,而不是交易發生時的紀錄。
  2. 一個在開始時就指明、之後從未變更的基準。 在比較對象尚未鎖定為特定期間內的特定基金前,「擊敗市場」沒有意義。
  3. 回報數字已納入成本。 包括佣金、監管費用、放空部位的借券成本,以及進場與出場時支付的 spread。
  4. 操作手冊有版本控制,而不是事後編輯。 若公開儲存庫支撐這項紀錄,有用的連結應指向標記版本或 commit hash。指向預設分支的連結顯示的是今天的策略,未必是3月實際交易時使用的策略。
  5. 每個部位與每個帳戶都納入,包含虧損者。 五個運作中的帳戶只公布一個,這就是選擇性呈現。
  6. 起始資本足以讓成交價合理可信。 幾百美元的名目金額,可能讓部位看似能以公布價格成交,但現實中沒有真正的委託單會以該價格完成成交。

缺少其中一項,並不代表紀錄必然不誠實。這代表它無法驗證;這種情況更常見,對讀者而言也同樣沒有用。

為什麼基準必須事先指明

事後才選定基準,是金融市場中成本最低的優勢。以下比較六檔廣泛型美國指數基金在2026年前六個月的價格變動,僅計算價格變化:

查詢六檔美國指數基金,相同期間:價格報酬,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

IWM 報酬為 21.12%,DIA 報酬為 8.42%。在相同期間內,6 的最高與最低相差 12.7 個百分點。期間結束後才選擇比較對象,等於直接取得整段差距,而策略不必做任何事即可獲得這項優勢。以上是股息發放前的價格報酬,另一項也應事先說明的衡量規則則是總報酬;月報酬如何計算說明了總報酬的算術方式。

為什麼進場時間戳記就是整項主張的核心

若進場紀錄在行情移動後才出現,那只是對圖表的描述。市場在一個交易時段內的波動幅度足以讓「09:35發布」與「15:55發布」之間的差異,壓過大多數所宣稱的優勢。以下是2026年前六個月,以每個交易時段的第一筆成交價為基準所衡量的這段距離:

查詢SPY相較開盤價的走勢幅度,依美東時間半小時,2026年上半年
每個數據背後的精確 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%。代理人在開盤時已知的資訊,幾乎不包含之後的全部價格移動。commit history 或附有日期的公開 feed 能證明先後順序(AI 每日市場研究報告的可信度同樣取決於這項特徵)。股票權益曲線的截圖則完全無法提供這項證明。

數字中必須包含哪些內容

毛報酬描述的是沒有人能實際持有的投資組合。每次進場與出場都必須跨越買賣價差,也就是最佳買價與最佳賣價之間的差距;而這項差距並非每檔標的都相同:

查詢報價價差中位數與25,000美元來回交易成本:2026年7月15日中午時段
每個數據背後的精確 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 的報價 spread 中位數為 10.08 個基點,對 SPY 則為 0.27。一個基點是百分之一個百分點。在25,000美元部位上,若在進出場各跨越一次 spread,則在清單中 spread 較寬的一端,成本為 25.2 美元;在 spread 較窄的一端,成本為 0.66 美元,且尚未計入佣金。若投資組合每週完整換手一次,一年約須支付這項成本50次;未納入該成本的紀錄,便悄悄把這些美元計入自身績效(交易股票的成本進一步拆解其餘費用)。

實盤結果要經過多久才有意義?

實盤交易一季,只是從一個寬廣分布中抽取一次樣本,而這個分布的寬度可以量化。以下是自2015年1月起,SPY(規模最大的 S&P 500 追蹤基金)所有相互重疊的指定期間視窗,並按百分位數排序:

查詢SPY自2015年以來的持有期間報酬結果:第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 個百分點。任何單季結果只要落在這個區間內,都可能只是持有指數後去度假。若啟動20個代理人、運作一季,再公布其中表現最佳者,展示的數字必然來自類似區間的頂端。

樣本長度的算術結果並不寬容。同一系列的12個月結果,標準差為 13.6 個百分點。要區分真正的優勢與雜訊,大約需要(2 × 波動 ÷ 優勢)²年的實盤結果。在這種波動程度下,假設每年有3個百分點的優勢,需要數十年;即使優勢達到10個百分點,也需要數年而非數月。以上視窗彼此重疊,因此 2826 計算的是視窗數量,而不是相互獨立的樣本數。

25,000美元的真實資金能解決問題嗎?

真實資金會在一個特定方面提升證據品質。紙上交易以沒有交易對手同意的價格成交,也從不會遇到委託遭拒。資金規模25,000美元的帳戶則以即時報價成交,支付真實佣金,並在第三方可稽核的對帳單上留下紀錄;部位規模也足以讓成交結果是正常交易,而非想像中的成交。

但它無法解決樣本問題。以25,000美元交易四個月,仍只是從上述分布中抽取一次樣本;實盤帳戶也可能在回撤後關閉,再以全新的帳戶重新開始,讓紀錄從頭起算。資金規模能讓成交結果可信。只有時間能讓結果具備資訊價值。

四種需要辨識的失敗模式

  • 披著績效紀錄外衣的回測。 以過往資料模擬出的結果,只是對過去的假設。前視偏誤說明模擬如何吸收策略當時不可能取得的資訊;最明顯的跡象,是權益曲線早在程式碼出現前數年就已開始。
  • 台上只有倖存者。 啟動10個代理人,卻只公布一個。多代理人 AI 交易系統很容易在無意間造成這種結果,因為運作10個變體的框架,也會選出最值得撰寫的那一個。
  • 重新開始。 回撤、暫停交易、開立新帳戶,以及從重新開始日期起算的曲線。能解決問題的提問是:請展示第一個帳戶從第一美元開始的完整權益曲線。
  • 被改寫的操作手冊。 在交易發生到撰寫報告之間,編輯提示詞與部位上限。LLM 產生的 alpha 因子可以大量生成,因此選擇規則必須在選擇之前公布;否則,紀錄就會變成一個事後挑出恰好有效因子的故事。

常見問題

AI 交易績效紀錄可以驗證嗎?

可以。前提是進場紀錄在結果揭曉前已公開、基準事先固定、成本已納入數字,且所有帳戶都完整呈現。檢查流程是機械式的,幾分鐘即可完成。大多數公開紀錄在第一項就不符合要求。

實盤 AI 交易紀錄必須持續多久?

必須比幾乎所有公開紀錄都更久。本文衡量的視窗中,指數的12個月結果標準差為 13.6 個百分點;要在傳統信心水準下區分溫和的優勢與運氣,至少需要數年,優勢較小時則需要數十年。

25,000美元足以讓 AI 投資組合的結果具備意義嗎?

這筆資金足以讓成交結果真實可信,包括即時報價、真實佣金與可稽核對帳單。但它不足以讓數個月的結果具備統計意義;這取決於經過的時間,而非帳戶規模。

回測與績效紀錄有何不同?

回測是將規則套用於已存在的資料。績效紀錄則是一系列在結果發生前已公開的決策。只有後者能由後續發生的結果加以驗證或推翻,這也是它能成為證據的原因。

為什麼基準的選擇如此重要?

在2026年前六個月,上述六檔指數基金僅以價格計算,期末相差 12.7 個百分點。若在期間結束後才選擇基準,便能在沒有任何策略參與的情況下,取得整段差距。


本頁每個數字都是對市場資料執行的儲存查詢,每個圖表下方均附有 SQL。請在 Strasmore terminal 將相同視窗套用至你自己的日期。

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