Strasmore Research
Обучение Matt ConnorАвтор: Matt Connor

Как проверить торговую статистику ИИ-алгоритмов

Узнайте, какие шесть критериев позволяют подтвердить подлинность отчетов об эффективности ИИ. Разбираем, почему один квартал торгов не доказывает надежность торговой стратегии.

Результаты торговли ИИ-алгоритмов можно считать верифицируемыми, если сторонний наблюдатель способен восстановить их на основе данных, существовавших до того, как стали известны исходы сделок. Лишь малая часть опубликованных в сети отчетов соответствует этому критерию. Ниже приведен контрольный список, который читатель может применить примерно за две минуты; четыре пункта из него опираются на рыночные данные: бенчмарк, временные метки, торговые издержки и длительность выборки.

Что делает отчет о торговле ИИ верифицируемым?

Шесть характеристик. Каждую из них можно проверить объективно, это не вопрос субъективной оценки.

  1. Публикация заявок до того, как стал известен результат. Временная метка должна находиться там, где автор не может её изменить, например, в коммите, отправленном в репозиторий в момент совершения сделки, или в брокерском отчете. Файл со списком прошлых сделок — это лишь заявление о прошлом, а не запись о нем.
  2. Один бенчмарк, выбранный в начале и неизменный. Фраза «обыграть рынок» ничего не значит, пока сравнение не привязано к конкретному фонду за конкретный период.
  3. Издержки включены в отчетные показатели. Комиссии, регуляторные сборы, стоимость заимствования для коротких позиций и спред, уплаченный при входе и выходе.
  4. Версионированный, а не редактируемый журнал операций (runbook). Если отчет подкреплен публичным репозиторием, полезная ссылка должна вести на тегированный релиз или хеш коммита. Ссылка на ветку по умолчанию показывает текущую стратегию, которая может отличаться от той, что торговала в марте.
  5. Все позиции и все счета, включая убыточные. Публикация одного успешного счета из пяти запущенных — это предвзятый отбор.
  6. Стартовый капитал, достаточный для реалистичного исполнения. Несколько сотен долларов номинала могут «удерживать» позиции, которые в реальности не были бы исполнены по указанной цене.

Отсутствие одного из этих пунктов не означает нечестность по умолчанию. Это означает неверифицируемость, что встречается чаще и столь же бесполезно для читателя.

Почему бенчмарк должен быть выбран заранее

Бенчмарк, выбранный после получения результатов, — самый дешевый способ создать «преимущество» в финансах. Шесть широких индексных фондов США, те же шесть месяцев 2026 года, только изменение цены:

ЗапросШесть индексных фондов США, единый период: ценовая доходность, 2 января – 30 июня 2026 г.
Точный 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%, а DIA8.42%, что дает разницу в 12.7 пунктов между лучшим и худшим результатом в 6 за идентичный период. Выбор того, с чем сравнивать результаты уже после закрытия периода, дает преимущество в размере всей этой разницы, при этом стратегия не должна делать ничего, чтобы его получить. Это ценовая доходность без учета дивидендов — второе правило измерения, которое стоит зафиксировать заранее (как измеряется месячная доходность описывает арифметику совокупной доходности).

Почему временная метка заявки — это суть всего утверждения

Заявка, появившаяся после движения цены, — это лишь описание графика. Расстояние, которое рынок проходит за одну сессию, настолько велико, что разница между «опубликовано в 09:35» и «опубликовано в 15:55» перекрывает большинство заявленных преимуществ. Вот это расстояние, измеренное от первого принта каждой сессии за первую половину 2026 года:

ЗапросДинамика SPY относительно цены открытия по 30-минутным интервалам (ET), первое полугодие 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 по восточному времени медианная сессия завершилась на расстоянии 0.216% от цены открытия. В интервале 15:30 медианное расстояние составило 0.415%. Все, что агент знал на открытии, исключает почти весь этот путь. История коммитов или датированная публичная лента служат доказательством последовательности (ежедневные рыночные отчеты ИИ зависят от этого свойства). Скриншот кривой доходности не доказывает ничего.

Что должно быть включено в расчеты

Валовая доходность описывает портфель, которым никто не мог владеть. Каждый вход и выход предполагает уплату спреда bid-ask — разницы между лучшей ценой покупки и продажи, и этот разрыв неодинаков для разных инструментов:

ЗапросМедианный котируемый спред и стоимость сделки на $25 000: полуденные часы, 15 июля 2026 г.
Точный 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

За тот час в середине дня медианный котируемый спред составил 10.08 базисных пунктов по MSTR против 0.27 по SPY. Базисный пункт — это одна сотая процентного пункта. Для позиции в 25 000 долларов пересечение этого спреда в обе стороны стоит 25.2 на широком конце списка и 0.66 на узком, до учета комиссий. Портфель, который полностью обновляется раз в неделю, платит эту «пошлину» около пятидесяти раз в год, и отчет, который ее игнорирует, молча приписал эти доллары себе (во что обходится торговля акциями содержит разбор остальных расходов).

Сколько времени должны длиться реальные результаты?

Квартал реальной торговли — это одна выборка из широкого распределения, и эту ширину можно измерить. Все перекрывающиеся окна заданной длины с января 2015 года для 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 пунктов. Любой квартальный результат внутри этого диапазона соответствует владению индексом и бездействию. Запустите двадцать агентов, прогоните их квартал, опубликуйте лучшего — и полученная цифра по определению окажется в верхней части такого диапазона.

Арифметика длины выборки неумолима. Двенадцатимесячные результаты в той же серии имеют стандартное отклонение в 13.6 пунктов. Чтобы отличить реальное преимущество от шума, требуется примерно (2 × вариация ÷ преимущество)² лет реальных результатов. При таком уровне вариации гипотетическое преимущество в 3 пункта в год требует многих десятилетий, и даже преимущество в 10 пунктов требует лет, а не месяцев. Указанные выше окна перекрываются, поэтому 2826 учитывает окна, а не независимые выборки.

Достаточно ли 25 000 долларов реальных денег?

Реальные деньги повышают качество доказательств в одном конкретном аспекте. Бумажная торговля исполняется по ценам, на которые не соглашался ни один контрагент, и там никогда не отклоняются ордера. Счет с 25 000 долларов исполняется по реальным котировкам и платит реальные комиссии, отраженные в отчетах, которые может проверить третья сторона, а размеры позиций достаточно велики, чтобы исполнение было обычным, а не воображаемым.

Это не решает проблему выборки. Двадцать пять тысяч долларов, которыми торговали четыре месяца, — это все еще одна выборка из распределения выше, а реальный счет можно закрыть после просадки и открыть заново, начав историю с чистого листа. Размер делает исполнение честным. Только время делает результаты информативными.

Четыре типа ошибок, которые нужно распознавать

  • Бэктест, выдаваемый за реальный отчет. Моделируемые результаты на прошлых данных — это гипотезы о прошлом. Ошибка заглядывания в будущее показывает, как симуляция поглощает информацию, которой стратегия не могла обладать в то время; самый явный признак — кривая доходности, начинающаяся за годы до написания кода.
  • На сцене только выживший. Запущено десять агентов, опубликован один. Многоагентные системы ИИ-торговли позволяют сделать это случайно, так как фреймворк, запускающий десять вариантов, сам выбирает тот, о котором стоит написать.
  • Перезапуск. Просадка, пауза, новый счет, кривая, начинающаяся с даты перезапуска. Вопрос, который все проясняет: покажите кривую доходности с первого доллара первого счета.
  • Переписанный журнал операций. Промпты и лимиты позиций, измененные между сделкой и написанием отчета. Альфа-факторы, сгенерированные LLM, можно создавать тысячами, поэтому правило отбора должно быть опубликовано до отбора, иначе отчет превращается в историю о том, какие факторы «случайно» сработали.

Часто задаваемые вопросы

Можно ли верифицировать отчет о торговле ИИ?

Да, если заявки были опубликованы до того, как стали известны их исходы, бенчмарк был зафиксирован заранее, издержки включены в цифры, и показаны все счета. Проверка механическая и занимает минуты. Большинство опубликованных отчетов проваливаются на первом же пункте.

Как долго должен вестись реальный отчет о торговле ИИ?

Дольше, чем почти любой опубликованный отчет. Двенадцатимесячные результаты для индекса имели стандартное отклонение в 13.6 пунктов за измеренные здесь периоды, поэтому отделение скромного преимущества от удачи при стандартном уровне доверия занимает как минимум годы, а для небольшого преимущества — десятилетия.

Достаточно ли 25 000 долларов, чтобы результаты ИИ-портфеля стали значимыми?

Этого достаточно, чтобы сделать исполнение реальным: живые котировки, реальные комиссии, проверяемые отчеты. Этого недостаточно, чтобы сделать результаты за несколько месяцев статистически значимыми, так как это вопрос прошедшего времени, а не размера счета.

В чем разница между бэктестом и отчетом о торговле?

Бэктест применяет правила к данным, которые уже существуют. Отчет о торговле — это серия решений, опубликованных до их исходов. Только второе может быть опровергнуто тем, что произойдет дальше, что и делает его доказательством.

Почему выбор бенчмарка так важен?

За первую половину 2026 года шесть индексных фондов выше разошлись на 12.7 пунктов только по цене. Бенчмарк, выбранный после закрытия периода, может обеспечить всю эту разницу без участия какой-либо стратегии.


Каждая цифра на этой странице — это сохраненный запрос к рыночным данным, SQL-код находится под каждой панелью. Примените те же окна к своим датам в терминале Strasmore.

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