S316 — 에이전트 walk-forward 백테스트 (코드 X)
작성: 2026-05-26 (Tue) 01:20
기간: 2026-02-20 ~ 2026-05-22 (63 거래일)
선행: S316 코드 백테스트 (v1~v5) 모두 결함 → PM 지시 "코드 X, 에이전트가 글로벌 판단"
1. 핵심 수치
| 지표 |
값 |
| Final NAV (norm 1.0 시작) |
1.4187 |
| Total Return |
+41.87% |
| KOSPI |
+35.11% |
| α vs KOSPI |
+6.77pp |
| Trading days |
63 |
| 총 거래 |
424건 (ENTRY 161, EXIT 156, REBAL 107) |
비교 (S316 시리즈 NAV 변화)
| 버전 |
방식 |
NAV |
α vs KOSPI |
| S315 |
시총 100 + 4축 AND OF |
-10.76% |
-45.87pp |
| v1 (컷오프) |
강한 테마 top3 × leader top3 |
+2.45% |
-32.66pp |
| v2 (OF 정정) |
동일 + 동력 확인 |
+58.10% |
+22.99pp |
| v3 (매출/차트) |
동일 + 매출/차트 추가 |
+47.40% |
+12.29pp |
| v4 (univ 200) |
동일 + 거래대금 universe |
+47.40% |
+12.29pp |
| v5 (통합점수) |
6축 percentile 가중 합 |
+17.15% |
-17.96pp |
| v6 (에이전트) |
글로벌 에이전트 일별 판단 |
+41.87% |
+6.77pp |
2. 시스템 구조
데이터 패키지 (매일 빌드)
- universe: 거래대금 20d 상위 200종 (PM 22:48 정정)
- 200종 × 6축 (chart/state/OF/RS/매출 YoY/퀀트 EA)
- 정렬: chart_score 내림차순
- 패키지당 약 28KB / 7K 토큰
에이전트 판단 (매일 1회 호출)
- general-purpose 에이전트
- 입력: 200종 × 6축 패키지 + 보유 상태 (직전일까지 누적)
- 출력: 픽 1~5종 + 비중(합 1.0) + 사유 + 청산 이유 (JSON)
- 호출당 약 30~45초 / 47K 토큰
거래 실행 (harness)
- 오늘 picks에 없는 보유 종목 → 청산
- 보유 종목 비중 변경 → 리밸런싱 (>5% deviation)
- 신규 종목 → 진입
- 종가 매매, 슬리피지/수수료 0
PM 결정 기준 (에이전트에 매번 전달)
- 오른 종목 더 오를: IMBALANCE_UP + exh_up=0 + cvd≥0 + buy>sell
- 쉬는 종목 다시 오를: BALANCE + theme_rs60>0
- 가장 강한 테마의 가장 강한 종목
- 매수 우위 (buy_pres > sell_pres)
- chart≤-0.3 / IMBALANCE_DOWN / of_avoid=1 회피
3. 진행 (10 batch)
| Batch |
일자 |
누적 % |
| Batch 1 (순차) |
2/20, 2/23, 2/24, 2/25, 2/26, 2/27, 3/3 |
11% |
| Batch 2~10 (5일 병렬) |
3/4 ~ 5/22 |
100% |
총 63회 에이전트 호출, 약 38분 + 3M 토큰
4. 산출
코드
scripts/backtest/e4_agent_pack_builder.py — 일별 데이터 패키지 빌더
scripts/backtest/e4_agent_harness.py — 패키지 빌드 + 거래 실행 + NAV 집계
scripts/backtest/e4_state_context.py — 보유상태 컨텍스트 빌더
데이터
data/backtest/e4_portfolio/agent_packs/pack_YYYYMMDD.txt (63개)
data/backtest/e4_portfolio/agent_picks/picks_YYYYMMDD.json (63개)
data/backtest/e4_portfolio/portfolio_nav_agent.parquet
data/backtest/e4_portfolio/trade_log_agent.json (424건)
data/backtest/e4_portfolio/summary_agent.json
5. 핵심 관찰
v5 (코드 통합점수) → v6 (에이전트) 알파 회복 +24.72pp
- v5는 통합 점수 풀은 잘 뽑았으나 진입 score 공식이 풀 점수와 불일치 → 1종 몰빵
- v6 에이전트는 픽 수·비중·청산 모두 시점별 판단 → 다양화 자동
거래 회전 잦음 (424건 / 63일 = 6.7건/일)
- PM의 strict 기준(buy>sell, cvd≥0 AND)을 매일 적용해 시장 약화 시 빈번한 전체 회전 발생
- 슬리피지·수수료 0 가정의 한계 (실거래에선 알파 축소)
보유 종목 시퀀스 변화
- 초기: 현대건설/SK하이닉스/삼성전자/한화시스템/로보티즈 (원전·CXL·우주항공 라인업)
- 중반: 두산에너빌리티/HD현대중공업/LIG넥스원 (전력설비/방위)
- 후반: 두산밥캣/한화에어로/삼성증권/KT&G (방어 + 강한 OF)
- 매일 다른 강한 테마의 강한 종목 추적이 자동 회전 만듦
6. 결함 / 한계
- 표본 1구간 (63일) — 알파 +6.77pp의 통계적 유의성 입증 X
- 강상승장 한정 — KOSPI 자체 +35% 강한 구간. 약상승/하락장 미검증
- 거래 비용 0 — 실거래 슬리피지 + 수수료 적용 시 알파 축소 가능 (대략 -3~5pp 추정)
- 에이전트 응답 비결정성 — 같은 입력 다른 응답 가능. 재실행 재현성 한계
- 5일 batch 병렬 호출 — batch 내 5일은 batch 시작 시점 보유 가정, 일별 누적 정확도 일부 손해
7. 다음 단계 (PM 결정)
- 기간 확장 — 다른 구간 (약상승장/하락장) 같은 방식 walk-forward
- 거래 비용 적용 — 슬리피지 0.1% + 수수료 0.015% 가정 후 NAV 재계산
- 에이전트 응답 안정성 검증 — 동일 일자 N회 재호출 후 픽 일관성 측정
- 코드 백테스트 v6 (에이전트 룰 모사) — 에이전트 결정 패턴을 룰화해 다시 코드로