
AI가 혼자서 자동 매매 시스템을 만들고, 운용하며, 매일 기사까지 쓰는 실험을 공개했다
요약
Claude Code를 활용해 설계부터 매매, 기사 작성까지 수행하는 무인 자동 매매 시스템 구축 실험을 소개합니다. 초기 백테스트의 데이터 리크(Data Leak) 문제를 AI가 스스로 찾아내 해결하며, 구조적 설계를 통해 오류를 방지하는 과정을 다룹니다.
핵심 포인트
- Claude Code를 이용한 자동 매매 시스템의 설계 및 운용 실험
- AI가 스스로 코드의 데이터 리크(Data Leak) 오류를 탐지하고 수정
- 실수를 방지하기 위해 주의가 아닌 구조적(Time Shift) 설계 도입
- 검증 프로세스(5-Check)를 통한 데이터 신뢰성 확보
이 글을 3줄로 요약하면
- AI (Claude Code)에게 자동 매매 시스템을 만들게 했더니, **백테스트 (Backtest)에서 연율 +360%**라는 꿈 같은 숫자가 나왔다
- 실제로 돌려봤더니 마이너스였다. 원인은 AI가 스스로 하루 만에 찾아낸 (데이터 리크 (Data Leak)) 문제였다 - 거기서부터 다시 만들어, 설계·매매·기사 작성·사이트 공개·주간 자기 개선까지 무인으로 돌아가게 된 이야기
공개처 (매일 아침 자동 업데이트됩니다): https://takeo628-hub.github.io/autoquant-lab/
우선, 성대하게 실패한 이야기부터
처음에 만들게 한 것은, LightGBM으로 주간 가격 변동을 예측하는 구성이었습니다. 백테스트 결과는 다음과 같습니다.

연율 +360%, 승률 70.9%, 최대 낙폭 (Maximum Drawdown) 1.21%. 완전히 거짓된 숫자였습니다.
동일한 전략을 가상 매매로 2.5개월·119 트레이드 실행한 결과가 오른쪽입니다. 승률 34.5%, 평균 이익 1,352엔에 대해 평균 손실 2,216엔. 1 트레이드당 기대값은 마이너스 985엔이었습니다.
원인은 AI가 스스로 특정했다
새로운 세션에서 "왜 실운용에서 마이너스인지 조사해줘"라고 던졌더니, AI는 학습 스크립트와 백테스트 스크립트의 날짜 상수를 대조해 보고 다음과 같이 보고해 왔습니다.
LGB 학습 기간 : 2024-04-01 〜 2026-05-31
백테스트 : 2025-06-01 〜 2026-05-29 ← 학습 기간에 완전히 포함되어 있음
모델은 정답을 암기한 상태로 테스트를 받고 있었던 것입니다. 이른바 데이터 리크 (Data Leak)입니다. 인간이 몇 달 동안 깨닫지 못한 것을 AI는 단 1세션 만에 찾아냈습니다. "AI가 작성한 코드의 버그를 AI가 찾아내는 것"은 실제로 작동합니다.
다시 만든 아키텍처 (Architecture)
Windows PC 1대와 작업 스케줄러(Task Scheduler)만으로 돌아갑니다. 클라우드 비용은 0원입니다.
포인트는 4가지가 있습니다.
1. 룩어헤드 (Look-ahead)를 '규율'이 아닌 '구조'로 방지
"미래의 정보를 사용하지 않도록 주의한다"는 반드시 깨지기 마련입니다. 그래서 타임 시프트 (Time Shift, 시그널 → 익일 집행)를 엔진 내의 단 한 곳에 집약했습니다.
def run_backtest(opens, closes, decision_weights, ...):
# THE shift: decisions on close t -> held from open t+1
weights = decision_weights.shift(1)
전략 코드가 어떻게 작성되든, 당일의 정보로 당일의 체결을 만드는 것은 물리적으로 불가능합니다. 주의하는 것은 재발합니다. 구조로 만들면 재발하지 않습니다.
2. 숫자를 표시하기 전에 자동 검증 (5-Check)
과거에 "자금 제약이 없는 단순 합산"으로 성적이 몇 배로 부풀려진 사고가 있었기에, 결과 표시 전에 기계적 체크를 거치는 메커니즘을 만들었습니다.
| 체크 | 내용 |
|---|---|
| 1 | 매일의 투자액이 잔액을 초과하지 않는가 |
| ... | 이 과정을 통과하지 못한 숫자는 사이트에도 리포트에도 올릴 수 없습니다. |
3. 개선은 「선언 → 게이트 (Gate)」 방식
백테스트 숫자는 결과를 보면서 파라미터 (Parameter)를 조정하면 얼마든지 올릴 수 있습니다. 그것은 미래의 기대값을 낮추면서 표시상의 숫자만 올리는 행위입니다. 그래서 개선 프로토콜을 Markdown으로 고정했습니다.
- 개선안은 구현 전에 문서로 선언한다 (나중에 후보를 추가하지 않는다) - 채택 조건은 "훈련 기간(
2019)에서 개선" 및 "검증 기간(2020)에서 악화되지 않음"의 양립뿐 - 금지 사항을 명기 (백테스트를 보고 난 뒤의 조정, 기각된 안의 재테스트, 게이트 기준의 사후 완화)
지금까지 선언한 후보는 16개로, 채택 4 · 기각 12. 기각률 75%가 건전성의 증거라고 생각합니다. 참고로 이 기각 안에는 제가 "효과가 있을 것 같다"고 생각해서 제안한 것도 여러 개 포함되어 있습니다.
4. AI 스스로가 주간 단위로 자신을 개선
claude -p (헤드리스 모드 (Headless Mode))를 작업 스케줄러에서 실행하고 있습니다.
call claude -p "IMPROVEMENT_PROTOCOL.md 를 읽고 주간 개선 루프를 1사이클 실행해줘.
(1) 감사 결과를 확인하고 RED라면 복구를 최우선으로 (2) 실적과 기대의 괴리를 확인
(3) 백로그 (Backlog)를 1건만 게이트와 함께 검증 (4) 결과를 문서와 메모리에 반영.
...
일요일 아침, 자는 동안 코드 리뷰와 개선 검증, 문서 업데이트가 완료되어 있습니다. **프로토콜의 Markdown이 실질적인 'AI의 헌법'**으로서 기능하며, 이것이 폭주를 방지하고 있습니다.
검증하며 흥미로웠던 점
주식 수익률은 '밤'에 만들어지고 있다
데이트레이딩 (Day Trading)을 검토했을 때, 일간 수익률을 '주간(시가→종가)'과 '야간(종가→다음 날 시가)'으로 나누어 보았습니다.

Nikkei Leveraged ETF를 주간에만 보유하면 14년 동안 자산이 절반으로 줄어들지만, 야간에만 보유하면 약 31배가 됩니다. 데이트레이딩으로 밤의 리스크를 피하는 것은, 수익의 발생원 그 자체를 포기하는 것이기도 하다는 것을 알 수 있습니다.
이 검증의 부산물로, 데이트레이딩의 대표적인 기법 7종 × 6개 종목 = 48개 패턴을 사전 선언 방식으로 전수 검증했는데, 합격한 것은 단 1개뿐이었습니다. 미국 주식은 수수료(왕복 0.28~1.0%)가 주간의 작은 에지 (Edge)를 통째로 잡아먹어 전멸했습니다.
백테스트 (Backtest) 숫자는 '점'이 아니라 '분포'로 봐야 한다
현재 구성은 15.6년의 백테스트 결과 연율 30% 전후입니다. 이 숫자를 의심하기 위해, 일간 수익률을 21일 블록으로 재배열하여 '있을 법한 다른 역사'를 1,000가지 만들었습니다.

동일한 전략과 동일한 시장이라도 순서가 다르다는 이유만으로 연율은 +18.8% ~ +46.8%로 흩어집니다. 더욱 중요한 것은 최대 낙폭 (Maximum Drawdown)인데, 실측치인 -29.7%에 대해 **비관적 5% 분위수는 -56.5%**였습니다. 즉, 실제 결과는 운이 좋은 쪽의 추첨 결과인 셈입니다.
AI에게 맡겨보니 실제로 어땠는가
좋았던 점
- 자신의 코드 버그를 찾아낼 수 있다. 데이터 누수 (Data Leak) 식별은 인간의 눈보다 빨랐습니다.
- 지루한 전수 검증을 싫어하지 않는다. 48개 패턴 검증이나 16개의 개선 후보 게이트 (Gate)를 요령 피우지 않고 전부 수행합니다.
- 기록을 남기는 데 능숙하다. 기각 이유까지 문서화되므로, 반년 뒤에 같은 실수를 반복하지 않습니다.
위험했던 점
- 내버려 두면 숫자를 좋게 만들려고 한다. 첫 세션에서 +360%가 나왔을 때, AI도 저도 의심하지 않았습니다. 금지 사항 리스트를 명문화하기 전까지 이 유혹은 사라지지 않았습니다.
- '완료했다'라고 보고한다. 실제로는 GitHub Pages의 서브 패스 (Sub-path) 설정을 잘못하여 모든 링크가 404가 되거나, 캐시 설계를 잘못하여 업데이트가 반영되지 않는 등의 사고가 발생했습니다. 검증까지 포함하여 지시를 내릴 필요가 있습니다.
가장 효과적이었던 것은 "백테스트를 보고 나서 파라미터 (Parameter)를 건드려서는 안 된다"라는 문장을 프로토콜에 쓰고, 매 세션마다 이를 읽게 하는 것이었습니다. AI의 능력보다, AI에게 부여하는 규율의 설계가 성과를 좌우하고 있습니다.
요약
AI에게 전부 시켜보며 깨달은 것은, AI가 약한 부분은 구현이 아니라 자신을 의심하는 것이라는 점입니다. 반대로 말하면, 의심하는 절차를 외부에서 부여하면 (선언 → 게이트 → 검증), 구현부터 운용, 기록까지 한꺼번에 맡길 수 있습니다.
매일의 실제 실적(패배한 날을 포함하여 전부)은 사이트 측에 공개하고 있습니다. 검증 절차나 코드의 상세 내용은 이 Zenn에서 계속 써 내려가겠습니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기