AI 트레이딩 성과 기록 검증 방법
공개된 AI 트레이딩 성과 기록을 검증하려면 사전 공개, 타임스탬프, 벤치마크, 거래비용, 버전 관리, 전체 포지션과 충분한 표본을 확인해야 합니다.
AI 트레이딩 성과 기록은 결과가 나오기 전에 존재했던 기록만으로 제3자가 재현할 수 있을 때 검증 가능하다. 온라인에 공개된 자료 중 이 기준을 충족하는 경우는 매우 적다. 다음은 독자가 약 2분 안에 적용할 수 있는 점검표다. 네 가지 항목인 벤치마크, 타임스탬프, 거래비용, 표본 기간에는 시장 데이터가 뒷받침된다.
AI 트레이딩 성과 기록을 검증 가능하게 만드는 요소는 무엇인가?
여섯 가지 요건이 있다. 각각은 주관적 판단이 아니라 직접 확인할 수 있는 항목이다.
- 결과를 알기 전에 거래 진입이 공개돼야 한다. 타임스탬프는 작성자가 나중에 수정할 수 없는 위치에 있어야 한다. 해당 시점에 푸시된 커밋이나 브로커 명세서가 그 예다. 과거 거래를 나열한 파일은 과거에 대한 주장일 뿐, 과거 거래의 기록이 아니다.
- 벤치마크 하나를 시작부터 명시하고 바꾸지 않아야 한다. 특정 기간에 특정 펀드와 비교하지 않는 ‘시장 대비 초과수익’은 의미가 없다.
- 보고 수치에 비용이 포함돼야 한다. 수수료, 규제기관 부과금, 공매도 포지션의 차입 비용, 진입과 청산 과정에서 지불한 스프레드가 모두 포함돼야 한다.
- 운용 지침이 수정본이 아니라 버전으로 관리돼야 한다. 공개 저장소가 기록을 뒷받침한다면 유효한 링크는 태그가 지정된 릴리스나 커밋 해시를 가리켜야 한다. 기본 브랜치 링크는 오늘의 전략을 보여줄 뿐이다. 이는 3월에 거래된 전략과 다를 수 있다.
- 손실 포지션을 포함해 모든 포지션과 모든 계좌를 공개해야 한다. 다섯 개 계좌 중 하나만 공개하고 운영하는 것은 표본 선택이다.
- 체결이 현실적으로 가능한 수준의 충분한 시작 자본이 있어야 한다. 명목가치가 수백 달러에 불과하면 실제 주문이라면 표시된 가격에 체결될 수 없는 포지션도 ‘보유’할 수 있다.
이 중 하나가 빠졌다고 해서 기본적으로 부정직한 것은 아니다. 다만 검증할 수 없으며, 독자에게는 흔하고 똑같이 쓸모없는 기록이다.
벤치마크를 사전에 명시해야 하는 이유
결과가 나온 뒤 선택한 벤치마크는 금융시장에서 가장 손쉬운 초과수익이다. 미국의 대표 지수 펀드 여섯 개를 대상으로 2026년 동일한 6개월 동안 가격 변동만 비교했다.
모든 수치 뒤에 숨겨진 정확한 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 DESCIWM은 21.12%의 수익률을 기록했고, DIA은 8.42%의 수익률을 기록했다. 동일한 기간에 6의 최상위와 최하위 사이에는 12.7포인트의 차이가 났다. 기간이 끝난 뒤 어느 펀드와 비교할지 고르는 것만으로 이 격차 전체를 얻을 수 있다. 전략이 별도로 성과를 낼 필요도 없다. 이는 배당을 제외한 가격 수익률이다. 따라서 측정 규칙도 사전에 밝혀야 한다(월간 수익률을 측정하는 방법에서 총수익률 계산을 설명한다).
진입 타임스탬프가 주장의 전부인 이유
가격이 움직인 뒤 나타난 진입은 차트를 설명하는 것에 불과하다. 한 세션 안에서 시장이 움직이는 폭은 충분히 크다. 따라서 ‘09:35에 게시’됐는지 ‘15:55에 게시’됐는지의 차이가 주장된 초과수익 대부분을 압도할 수 있다. 다음은 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_time09:30 ET 구간에서 세션 종료 가격의 중앙값은 시초 체결가에서 0.216%만큼 떨어져 있었다. 15:30 구간에서는 그 거리가 0.415%였다. 시장 개장 시점에 에이전트가 알고 있던 정보만으로는 이러한 움직임의 대부분을 사전에 알 수 없다. 커밋 이력이나 날짜가 표시된 공개 피드는 거래 순서를 입증한다(AI 일일 시장조사 보고서도 같은 요건에 따라 성패가 갈린다). 주식자산곡선 스크린샷만으로는 이를 입증할 수 없다.
수치에 포함돼야 하는 항목
총수익률만 제시하면 누구도 실제로 보유할 수 없었던 포트폴리오가 된다. 모든 진입과 청산은 매수 최우선 호가와 매도 최우선 호가 사이의 차이인 매수-매도 스프레드를 통과한다. 이 차이는 종목마다 동일하지 않다.
모든 수치 뒤에 숨겨진 정확한 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해당 정오 무렵 1시간 동안 공시 호가 스프레드의 중앙값은 MSTR에 대해 10.08베이시스포인트였고, SPY에 대해서는 0.27였다. 베이시스포인트는 1퍼센트포인트의 100분의 1이다. 25,000달러 포지션을 매수와 매도에서 각각 한 번씩 스프레드를 통과시키면, 수수료를 제외하고 이 목록의 스프레드가 넓은 종목에서는 $25.2, 좁은 종목에서는 $0.66의 비용이 발생한다. 매주 한 번 포트폴리오를 전부 회전시키는 장부라면 이 비용을 연간 약 50회 부담한다. 이를 누락한 기록은 해당 금액을 조용히 자신의 수익으로 계상한 것이다(주식 거래에 드는 비용에서 나머지 비용을 설명한다).
실시간 성과가 의미를 가지려면 얼마나 오래 운용해야 하는가?
실시간 거래를 한 분기만 수행한 결과는 넓은 분포에서 한 번 추출한 표본에 불과하다. 그 분포의 폭은 측정할 수 있다. 2015년 1월 이후 SPY, 즉 S&P 500을 추종하는 최대 규모 펀드의 각 기간별 중첩 3개월 수익률을 백분위로 정렬했다.
모든 수치 뒤에 숨겨진 정확한 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 sessions2826개의 중첩된 3개월 기간에서 매수 후 아무것도 하지 않았을 때의 중앙값 수익률은 3.9%였다. 5백분위수는 -8.8%, 95백분위수는 12.2%로, 범위는 21.1포인트였다. 단일 분기 성과가 이 범위 안에 있다면 지수를 보유하고 휴가를 떠난 결과와도 일치한다. 에이전트 20개를 출시해 한 분기 동안 운용한 뒤 가장 좋은 하나를 공개하면, 공개된 수치는 구조적으로 이와 같은 범위의 상단에서 나온다.
표본 기간에 관한 계산은 엄격하다. 같은 계열의 12개월 수익률 표준편차는 13.6포인트다. 실제 초과수익과 잡음을 구분하려면 대략 (2 × 변동성 ÷ 초과수익)²년의 실시간 성과가 필요하다. 이 정도 변동성에서는 연간 3포인트의 가상 초과수익을 확인하는 데 수십 년이 필요하다. 연간 10포인트의 초과수익도 수개월이 아니라 수년이 필요하다. 위 기간들은 서로 중첩되므로 2826는 독립 표본이 아니라 기간의 개수다.
실제 자금 25,000달러면 결론을 낼 수 있는가?
실제 자금은 한 가지 측면에서 증거의 질을 높인다. 페이퍼 트레이딩은 거래 상대방이 동의하지 않은 가격으로 체결되며 주문이 거절되는 일도 없다. 반면 25,000달러가 입금된 계좌는 실시간 호가를 상대로 체결되고 실제 수수료를 부담한다. 제3자가 감사할 수 있는 명세서가 남으며, 포지션 규모도 체결이 허구가 아니라 현실적인 수준이 된다.
그러나 표본 문제는 해결되지 않는다. 25,000달러를 4개월 동안 운용한 결과도 위 분포에서 한 번 추출한 표본이다. 실시간 계좌를 손실 이후 폐쇄하고 새 계좌를 개설해 기록을 다시 시작할 수도 있다. 자금 규모는 체결을 현실적으로 만든다. 결과를 유의미하게 만드는 것은 오직 시간이다.
확인해야 할 네 가지 실패 유형
- 성과 기록처럼 포장된 백테스트. 과거 데이터에 시뮬레이션 규칙을 적용한 결과는 과거에 대한 가설이다. 룩어헤드 편향은 시뮬레이션이 당시 전략이 알 수 없었던 정보를 흡수하는 방식을 보여준다. 가장 단순한 징후는 코드가 작성되기 수년 전부터 자산곡선이 시작되는 경우다.
- 무대에 오른 생존자만 공개하는 경우. 에이전트 10개를 출시하고 하나만 공개하는 방식이다. 멀티에이전트 AI 트레이딩 시스템에서는 이러한 일이 쉽게 발생한다. 10개 변형을 실행하는 프레임워크가 글로 쓸 가치가 있는 하나를 동시에 선택하기 때문이다.
- 재시작. 손실, 중단, 새 계좌, 그리고 재시작일에 시작되는 자산곡선이 그 징후다. 이를 판단하는 질문은 간단하다. 첫 번째 계좌의 첫 1달러부터 시작한 자산곡선을 보여줄 수 있는가?
- 수정된 운용 지침. 거래가 이뤄진 뒤 보고서를 작성하기 전에 프롬프트와 포지션 한도를 수정하는 경우다. LLM이 생성한 알파 팩터는 수천 개도 만들 수 있다. 따라서 선택 규칙은 선택 전에 공개돼야 한다. 그렇지 않으면 기록은 우연히 성과를 낸 팩터를 골라낸 이야기로 바뀐다.
FAQ
AI 트레이딩 성과 기록을 검증할 수 있는가?
가능하다. 거래 진입이 결과를 알기 전에 공개되고, 벤치마크가 사전에 고정되며, 비용이 수치에 포함되고, 모든 계좌가 공개돼야 한다. 점검은 기계적으로 수행할 수 있으며 몇 분이면 충분하다. 공개된 성과 기록 대부분은 첫 번째 요건에서 탈락한다.
실시간 AI 트레이딩 기록은 얼마나 오래 운용해야 하는가?
공개된 대부분의 기록보다 훨씬 길어야 한다. 여기서 측정한 기간 동안 지수의 12개월 수익률 표준편차는 13.6포인트였다. 따라서 일반적인 신뢰수준에서 작은 초과수익과 운을 구분하려면 최소 수년이 필요하고, 초과수익이 작다면 수십 년이 필요하다.
25,000달러면 AI 포트폴리오 성과를 의미 있게 만들 수 있는가?
체결을 현실적으로 만들기에는 충분하다. 실시간 호가, 실제 수수료, 감사 가능한 명세서가 남기 때문이다. 그러나 수개월 성과를 통계적으로 유의미하게 만들기에는 충분하지 않다. 이는 계좌 규모가 아니라 경과 시간의 문제다.
백테스트와 성과 기록의 차이는 무엇인가?
백테스트는 이미 존재하는 데이터에 규칙을 적용한다. 성과 기록은 결과가 나오기 전에 공개된 의사결정의 연속이다. 이후 실제 결과를 통해 위조 여부를 검증할 수 있는 것은 두 번째뿐이다. 이것이 성과 기록을 증거로 만든다.
벤치마크 선택이 중요한 이유는 무엇인가?
2026년 상반기에 위의 지수 펀드 여섯 개는 가격 변동만으로 12.7포인트의 차이를 두고 마감했다. 기간이 끝난 뒤 선택한 벤치마크는 전략이 아무것도 하지 않아도 이 격차 전체를 초과수익으로 제시할 수 있다.
이 페이지의 모든 수치는 시장 데이터에 대한 저장 쿼리에서 산출됐으며, 각 패널 아래에 SQL이 제시돼 있다. Strasmore 터미널에서 동일한 기간을 원하는 날짜로 설정해 직접 확인해 보기 바란다.