AI Trading: 교훈 #129: 심층 연구를 통해 발견된 백테스트 평가 버그

발행: (2026년 1월 11일 오전 08:17 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Context

CEO는 Anthropic의 “Demystifying evals for AI agents” 기사에 대한 심층 연구를 요청하여 해당 평가 프레임워크가 우리 거래 시스템을 개선할 수 있는지 판단하고자 했습니다.

Discovery

기존 인프라와 기사를 비교 분석한 결과, 우리는 실제 금융 책임이 있기 때문에 일반적인 AI 에이전트 평가보다 더 엄격한 평가 인프라를 이미 보유하고 있음을 확인했습니다. 그러나 연구 과정에서 기존 평가 시스템에 중대한 버그가 발견되었습니다:

Bugs Found and Fixed

Bug 1: Slippage Model Disabled

  • Location: scripts/run_backtest_matrix.py
  • Issue: 코드에서는 slippage_model_enabled: True 라고 선언했지만 모든 실행 비용이 0.0 으로 하드코딩되어 있었습니다.
  • Impact: 백테스트에서 수익이 20–50 % 과대평가되었습니다 (slippage_model.py 문서 기준).
  • Fix: 실제 SlippageModel을 백테스트 실행에 통합하여 거래에 슬리피지와 수수료를 적용했습니다.
# scripts/run_backtest_matrix.py
slippage_model_enabled = True

# before: execution_cost = 0.0
# after: execution_cost = SlippageModel.calculate(trade)

Bug 2: Win Rate Without Context (ll_118 violation)

  • Location: scripts/run_backtest_matrix.py 및 출력 JSON 파일들
  • Issue: 승률이 평균 수익과 함께 표시되지 않아 오해를 일으킬 수 있었습니다 (예: “80 % 승률”이지만 평균 수익은 –6.97 %).
  • Impact: 전략 성과에 대한 잘못된 자신감이 생겼습니다.
  • Fix: avg_return_pct 필드와 win_rate_with_context 를 추가하여 두 값을 항상 함께 표시하도록 했습니다.
{
  "win_rate": 0.80,
  "avg_return_pct": -6.97,
  "win_rate_with_context": "80 % win rate (‑6.97 % avg return)"
}

Bug 3: Missing Bidirectional Learning

  • Location: src/analytics/live_vs_backtest_tracker.py
  • Issue: 실시간 슬리피지를 추적했지만 그 관측값을 백테스트 가정에 반영하지 않았습니다.
  • Impact: 실제 증거가 있음에도 불구하고 오래된 슬리피지 가정이 계속 재사용되었습니다.
  • Fix: sync_to_backtest_assumptions() 메서드와 load_live_slippage_assumptions() 를 추가하여 백테스트에 반영했습니다.
# src/analytics/live_vs_backtest_tracker.py
def sync_to_backtest_assumptions():
    live_slippage = load_live_slippage_assumptions()
    backtest_config.update(slippage=live_slippage)

Key Insight

Anthropic 기사에서는 LLM 에이전트(예: Claude Code) 평가에 유용하지만, 거래 시스템에는 적용되지 않습니다.

우리의 거래 시스템은 이미 다음을 포함하고 있습니다:

  • 정량적 지표 (샤프, 승률, 최대 손실)
  • 생존 게이트 검증 (95 % 자본 보전)
  • 19개의 역사적 시나리오, 포함된 충돌 재현
  • 실시간 vs. 백테스트 추적
  • 이상 탐지

연구의 실제 가치는 새로운 평가 프레임워크를 도입하는 것이 아니라 구현 버그를 발견한 데 있습니다.

Prevention

  • 문서가 주장하는 대로 코드가 실제로 구현되어야 합니다 (예: slippage_model_enabled).
  • ll_118 규칙에 따라 승률과 평균 수익을 항상 함께 표시해야 합니다.
  • 생산 환경에서 테스트 환경으로의 양방향 피드백 루프를 구현합니다.
  • 정기적으로 평가 인프라를 감사하여 무음 실패를 찾아냅니다.

Files Changed

  • scripts/run_backtest_matrix.py – 슬리피지 모델 통합, avg_return_pct 추가.
  • src/analytics/live_vs_backtest_tracker.py – 양방향 학습 함수 추가.

Tags

evaluation #backtest #slippage #win-rate #bidirectional-learning #system-audit

이 레슨은 우리 AI Trading repository에서 자동으로 게시되었습니다.

More lessons: rag_knowledge/lessons_learned

Back to Blog

관련 글

더 보기 »

SQLite에서 캐시 효율성

SQLite에서 캐시 효율성 !표지 이미지: A Eficiência do Cache no SQLite https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=aut...

Claw로 휴대폰에서 Claude Code 제어하기

문제: 당신은 Claude Code 세션에 깊이 몰두해 있습니다. 복잡한 작업을 진행 중입니다. 하지만 잠시 떠나야 합니다—커피를 마시거나, 전화를 받거나, 아이를 데려와야 합니다. 무엇을…