📝 한 줄 요약 (바쁘면 이것만)
1주차 글 마지막에 저는 **"신호검색 스킬을 여러 개 만들어 각각 데이터로 검증하고, 겹치는 부분을 쪼개고 합쳐 우산 스킬로 재합성하겠다"**고 썼습니다. 그 약속을 이행했습니다. 성격이 다른 신호 4종을 만들고, 해외시장 라이브 데이터 평가점 26,400개로 나란히 쟀습니다. 결과는 1개 채택, 2개 보류, 1개 배제 — 4개를 다 합치지 않았습니다. 그리고 이 글의 진짜 이야기는 첫 측정에서 승률 **71%**로 보였던 신호가, 표본을 44배로 늘리자 **60%**로 내려앉은 장면입니다.
🎯 이런 분께 추천해요
AI가 만들어준 지표·룰·프롬프트가 "잘 맞는 것 같다"까지는 왔는데 그다음을 못 정하신 분
스킬이 여러 개로 늘었을 때 뭘 남기고 뭘 버릴지 기준이 필요한 분
승률·정확도 같은 숫자를 봤는데 그게 믿을 만한 숫자인지 판단이 안 서는 분
자동매매·신호검색을 해외/24시간 시장으로 넓히고 계신 분
😫 문제 상황 (Before)
1주차에 만든 건 통합형 신호검색 스킬 1개였습니다. RCI 저점집결·MACD 골든크로스·EMA 정배열을 한 번에 판정해서 "신호 있음/없음"을 뱉는 구조였죠. 첫 라이브 스캔에서 신호 0건이 나왔고, 저는 그걸 "조건이 원래 드문 거니 정직한 결과"라고 썼습니 다.
그건 맞는 말이었지만, 동시에 아무것도 증명하지 않은 말이었습니다.
신호가 0건인지 8건인지는 알 수 있어도, 그 신호가 뜬 자리에 실제로 들어갔으면 돈을 벌었는지는 여전히 몰랐거든요. 게다가 조건 세 개를 "or"로 묶어놨으니, 신호가 떴을 때 그게 셋 중 누구 덕인지도 분리가 안 됐습니다.
그래서 2주차 목표를 이렇게 잡았습니다.
하나를 성격별로 쪼갠다 → 각각 따로 잰다 → 통과한 것만 다시 합친다
🛠️ 사용한 도구
Claude 기반 로컬 AI 에이전트 (터미널·파일 작업 가능)
MetaTrader 5 데모계좌 (모의) + 자체 수집 스크립트
Python (지표 계산, 부트스트랩 신뢰구간 — 외부 라이브러리 없이 표준 라이브러리만)
🔧 작업 과정
1막 — 하나를 넷으로 쪼갰다
성격이 서로 겹치지 않도록 네 갈래로 나눴습니다.
이름
성격
한 줄로 말하면
A. 역추세
떨어질 만큼 떨어졌다
RCI 4선이 바닥 부근에 동시 집결
B. 추세추종
올라가기 시작했다
MACD 골든크로스 + 이동평균 정배열
C. 평균회귀
밖으로 튀었다 돌아왔다
볼린저 하단 이탈 후 복귀 + 과매도
D. 돌파
박스를 뚫었다
20봉 신고가 돌파 + 변동성 확장
A와 B는 기존 엔진에 이미 있던 함수라 새 코드 0줄, C와 D는 새로 짰습니다.
여기서 제약을 하나 걸었습니다: 판정 규칙을 결과 보기 전에 확정한다.
성능을 재는 방식은 이렇게 정했습니다. 신호가 뜬 시점에 들어가서 5봉 뒤 승률을 보되, "아무 때나 그냥 들어갔을 때의 승률"(기준선)과 비교합니다. 그리고 그 차이에 신뢰구간을 붙 여서:
신뢰구간 하한이 0보다 크면 → 채택
신뢰구간 상한이 0보다 작으면 → 배제
0을 걸치면 → 보류 (계산은 하되 "신호"라고 부르지 않음)
이걸 먼저 못 박은 이유는 단순합니다. 결과를 본 뒤에 기준을 정하면, 사람은 반드시 자기가 만든 것에 유리한 기준을 고르거든요.
2막 — 첫 측정: 승률 71%가 나왔다
기존 수집 설정 그대로 돌렸습니다. 8개 시계열 × 320봉 = 평가점 600개.
detector
5봉 뒤 승률
발생 건수
A. 역추세
71.4%
7건
C. 평균회귀
72.7%
11건
B. 추세추종
36.4%
11건
D. 돌파
37.5%
8건
기준선이 50.5%였으니 A와 C는 20%p 넘게 앞선 셈입니다. 솔직히 여기서 멈추고 싶었습니다. "A와 C 채택, B와 D 폐기" — 깔끔하잖아요.
그런데 오른쪽 열을 보세요. 7건. 11건.
동전을 7번 던져서 앞면이 5번 나오면 71%입니다. 그걸 두고 "이 동전은 앞면이 잘 나온다"고 말하지는 않죠. 1주차 글에서 제가 "느낌상 잘 맞는다가 아니라 숫자로 잰다"고 써놓고, 정확히 그 함정 앞에 서 있었습니다.
3막 — 막힘 1: 데이터를 늘리려는데 EA가 말을 안 듣는다
표본을 늘리려면 수집기가 더 많은 봉을, 더 많은 타임프레임으로 내보내야 했습니다. 수집 스크립트의 설정값 두 줄만 고치면 되는 일이었죠.
고치고, 1주차에 정리해둔 절차("터미널을 재시작하면 전체 재컴파일된다")대로 재시작했습니다. 그런데 출력 파일은 계속 옛날 봉 수 그대로였습니다.
원인을 캐보니 이랬습니다. 컴파일 결과물이 이미 존재하면 터미널은 재컴파일을 건너뜁니다. 1주차에 정리한 절차는 "처음 만든 파일" 기준이었고, "이미 있는 파일을 수정한 경우"는 다루지 않았던 겁니다. 제가 쓴 문서가 제 발목을 잡은 셈이죠.
우회는 단순했습니다 — 컴파일 결과물을 백업 위치로 치우고(지우지 않고) 재시작. 90초 뒤 새 결과물이 생겼고, 16개 시계열 전부 2,000봉으로 확장됐습니다.
평가점이 600개 → 26,400개(44배) 가 됐습니다.
4막 — 다시 재보니 71%가 60%였다
detector
320봉 기준
2,000봉 기준
최종 판정
A. 역추세
71.4% (7건)
60.1% (569건)
✅ 채택
C. 평균회귀
72.7% (11건)
53.0% (447건)
⚠️ 보류
B. 추세추종
36.4% (11건)
54.1% (468건)
⚠️ 보류
D. 돌파
37.5% (8건)
48.3% (754건)
⚠️→❌
작은 표본은 항상 더 좋아 보입니다.