HERMES v3: 잘 되는 전략을 찾기 전에, 잘못된 결과를 막는 중

HERMES v3: 잘 되는 전략을 찾기 전에, 잘못된 결과를 막는 중

어제는 쥬가 시장의 날씨를 읽기 시작했다는 이야기를 썼다. 오늘은 그 다음 이야기다.

신호가 다섯 개 생기고, 시장 상태를 나누고, 전수 스캔까지 빨라졌다고 해서 바로 매매를 재개하면 안 된다. 과거 그래프에서 그럴듯해 보인다는 것과 실제 돈을 걸어도 견딜 수 있다는 것은 완전히 다른 문제다.

그래서 지금 HERMES v3는 잘 되는 전략을 찾는 시간보다, 잘못된 결과가 좋아 보이는 경로를 먼저 막는 시간을 보내고 있다.

이 글은 2026-08-03 21:10 KST의 코드 스냅샷을 기준으로 썼다. 계좌, 실제 보유 종목, 주문 정보는 넣지 않았다.

신호 다섯 개를 시험 장치에 넣고 닫힌 시장 게이트를 점검하는 쥬와 부엉이

오늘의 핵심: 쥬는 예측자가 아니라 반증 담당자가 됐다

자동매매를 만들다 보면 “이 규칙이 과거에 얼마나 벌었나”를 빨리 보고 싶어진다. 그런데 그 전에 확인할 것이 있다.

  • 그 당시에는 정말 알 수 있었던 정보만 썼는가
  • 신호가 나온 날 종가로 사는 식의 편한 가정을 몰래 넣지 않았는가
  • 수수료, 세금, 체결 손실을 빼도 결과가 남는가
  • 여러 규칙을 돌려 보고 가장 좋은 것만 골라 자랑하지는 않았는가
  • 데이터가 없는 종목을 조용히 정상 종목처럼 처리하지는 않았는가

이번 구현은 이 질문들에 시스템이 직접 답하거나, 아직 답할 수 없다고 남기도록 만드는 쪽이다. 좋은 결론보다 나쁜 결론을 먼저 믿지 못하게 하는 작업이다.

1. 백테스트에는 ‘다음 장 시작’만 있다

이번에 만든 백테스트 흐름은 신호가 만들어진 바로 그 가격에 체결되는 길을 열지 않는다.

하루가 끝난 뒤에 신호를 계산하고, 실제로는 다음 거래 세션의 시가에 진입하는 것으로만 재생한다. 사람이 장 마감 뒤 차트를 보고 “그날 종가에 샀다”고 말하는 식의 편한 가정을 막기 위해서다.

또 과거를 한 줄로 길게 읽고 성적을 내는 대신, 학습 구간과 검증 구간 사이에 비워 두는 구간을 둔다. 이름은 purge와 embargo인데, 쉽게 말하면 바로 옆 구간의 정보가 서로 묻어 들어가지 않게 거리를 두는 안전띠다.

신호가 생긴 뒤 다음 세션에서만 재생되고, 비용과 검증 문을 지나도 주문은 아직 잠겨 있는 흐름

이 문을 통과하려면 적어도 다음 조건을 만족해야 한다.

  • 최종 검증 구간의 표본이 100개 이상일 것
  • 비용을 뺀 뒤에도 기대값이 양수일 것
  • Profit Factor가 1.2보다 클 것
  • 학습과 검증 사이의 안전 구간을 각각 둘 것
  • 몇 가지 조합을 시험했는지 함께 남길 것

한 가지라도 모자라면 신호는 shadow, 즉 관찰만 하는 상태다. 통과 신호가 하나도 없을 수 있다는 것도 실패가 아니라 측정 결과로 취급한다. 지금은 아직 실제 신호 전체를 과거 구간에 돌려 성과 숫자를 내지 않았다.

2. ‘신호 다섯 개’는 이제 각자 시험 문장을 갖는다

어제 소개한 다섯 신호는 이제 이름만 있는 규칙이 아니다. 각각 어떤 조건에서 발생하고, 얼마 동안 들고 보며, 어떤 비용을 포함해 시험하는지 사전등록된 가설과 연결했다.

사전등록은 시험을 다 돌린 뒤 잘 나온 결과에 맞춰 설명을 바꾸지 못하게 하는 장치다. 신호 규칙의 지문을 가설에 같이 남겨 두었기 때문에, 임계값을 하나만 바꿔도 같은 실험이라고 주장할 수 없다.

다중검정도 한 단계 보강했다. 보유 기간만 달리하면 사실상 같은 종목 묶음을 여러 번 보는 일이 생긴다. 이번에는 보유 기간뿐 아니라 그날 발동한 신호 중 전부를 볼지, 강한 절반만 볼지도 미리 격자로 고정했다. 여러 번 시험한 만큼 결과를 더 엄격하게 읽기 위한 준비다.

중요한 점은 여전히 같다. 등록과 재생기가 준비됐다는 뜻이지, 좋은 성과가 나왔다는 뜻은 아니다.

3. 비용은 예쁘게 추정하지 않고, 모르는 곳을 남긴다

수익률은 비용을 빼기 전에는 거의 이야기할 가치가 없다. 이번에는 한국 주식의 연도별 증권거래세, 미국 주식 수수료와 매도 수수료, Binance 수수료와 펀딩을 비용 모델에 넣었다.

슬리피지도 가능한 곳에서만 보수적으로 잡았다. 과거 주문 로그 전체를 무조건 믿지 않고, 실제로 체결된 보호 청산 기록을 중심으로 비용을 추정했다. 특히 한국 주식은 적은 표본에서 p90을 쓰는 쪽으로 기울였다.

반대로 아직 모르는 것도 분명하다. 미국 주식 슬리피지는 실측 표본이 없어 가정치다. 선물 체결 수수료도 더 정확한 기록 경로가 필요하다. 이런 구멍이 남아 있는 동안에는 그럴듯한 성과 숫자를 앞에 내세우지 않기로 했다.

4. 데이터가 없으면 ‘반대 근거 없음’이라고 말하지 않는다

오늘 개인적으로 가장 마음에 드는 수정은 no_bars다.

거래정지나 상장폐지처럼 가격 바가 하나도 없는 보유 종목은 예전 흐름에서 규칙이 발동하지 않은 것처럼 보일 여지가 있었다. 하지만 바가 없다는 것은 “좋은 신호도 나쁜 신호도 없었다”가 아니라 평가 자체가 불가능했다는 뜻이다.

이제 스캔 결과는 그런 종목에 대해 “바 없음 - 평가 자체가 불가능했다”고 남긴다. 판단하지 못한 이유도 반대 근거의 하나로 취급한다. 쥬가 침묵한 것을 낙관으로 번역하지 않게 된 셈이다.

국내 시장 입력도 필요한 창만 읽도록 바꿨다. 928MB짜리 전체 창고를 매번 통째로 올리던 방식에서, 최근 수급과 펀더멘털, 90일 리서치 창만 먼저 꺼내 읽는다. 고정 시각 기준 입력 적재는 세 번 측정에서 35.51/32.62/19.65초에서 0.71/1.06/0.95초로 바뀌었지만, 이것은 매매 성과가 아니라 같은 데이터를 읽는 준비 시간이 줄었다는 기록일 뿐이다.

5. 리서치도 새 값을 덮어쓰지 않고 나란히 둔다

리서치 문서의 팩트 추출도 2단계를 준비했다. 첫 추출 결과를 지우고 새 모델 결과로 덮어쓰는 대신, 같은 문서에 기존 값과 새 추출 값을 따로 보관한다. 서로 다르면 비교표만 만들고 자동으로 “새 것이 맞다”고 고르지 않는다.

전량 실행 대상도 6,271건으로 고정해 두었다. 새 문서가 들어왔다고 실행 범위가 조용히 늘어나지 않도록 한 것이다. 문서당 최대 한 번만 호출하고, 중간에 끊긴 건은 다시 호출하지 않고 중단 상태로 닫는다.

아직 이 6,271건 전량 실행은 하지 않았다. 5건짜리 분리 환경에서만 재개와 저장 규칙을 검증했고, 운영 리서치 DB에는 쓰지 않았다는 사실까지 확인했다. 새 모델이 원본을 덮어쓰며 과거 판단을 바꾸는 일은 아직 없다.

지금 위치를 한 장으로 정리하면

구간 현재 상태 아직 닫혀 있는 것
시장 스캔 3개 시장 전수 스캔, 신호 5종과 레짐 계산 구현 신호가 주문 자격을 얻는 일
백테스트 다음 세션 체결, 안전 구간, 비용·다중검정 게이트 구현 실제 신호 전체의 성과 평가
파생 데이터 펀딩·미결제약정·베이시스 피처를 Binance 스캔에 연결 현물 짝이 없는 심볼의 베이시스 커버리지 보강
리서치 2단 버전 분리, 불일치 기록, 재개 원장 구현 6,271건 전량 실행과 알파 채택
주문 없음 백테스트 게이트 통과 전까지 계속 없음

그러니까 현재의 HERMES v3는 꽤 많은 것을 계산할 수 있지만, 아직 어떤 종목도 사라고 말할 권한은 없다. 그 권한을 늦게 주는 것이 이번 구조의 목적에 가깝다.

오늘의 쥬는 철문 앞에서 멈춘다

그림 속 쥬가 신호 타일을 유리 상자에 넣고 있는 이유도 같다. 신호가 생겼다는 사실만으로 시장 쪽 철문을 열 수는 없다. 부엉이가 옆에서 체크리스트를 들고 있는 동안에는 더더욱 그렇다.

다음은 시장별로 다섯 신호를 실제 워크포워드 재생에 넣고, 비용을 뺀 결과와 시도 수를 함께 읽는 일이다. 그 결과가 비어 있거나 기준에 못 미치면 쥬는 계속 관찰자로 남는다.

조금 느려 보이지만, 이번 v3에서 가장 중요하게 두는 것은 “무엇을 샀나”보다 왜 아직 사면 안 되는가를 설명할 수 있는가다.

게시 전 고정 스냅샷의 구현 기록에서 전체 테스트 1,637 passed, 의존성 경계 검사 5 kept / 0 broken, Ruff 정적 검사와 포맷 검사를 통과한 상태를 확인했다. 이 검증은 코드의 규칙을 확인하는 것이며, 미래 수익을 보장하지 않는다.

이 글은 개발 기록이며 투자 권유가 아니다. HERMES v3는 아직 주문을 실행하지 않으며, 실제 투자 판단은 별도로 해야 한다.

HERMES v3: 잘 되는 전략을 찾기 전에, 잘못된 결과를 막는 중

https://poul.kr/2026/08/03/20260803-hermes-v3-testing-gates/

Author

PouL

Posted on

2026-08-03

Updated on

2026-08-03

Licensed under

댓글