Signalio — 한국 시장 정보 지도와 전략 검증 엔진 2026.09.21

규칙을 봉인하다 — 임원 매수 페이퍼 포트폴리오, 오늘 18:30부터

백테스트에서 살아남은 '임원 본인 매수'를 6개월 전진 기록으로 넘겼다. 규칙은 R3·40일 하나로 고정하고, 매일 18:30 VPS가 공시를 읽어 다음날 종가에 사고 40거래일 뒤 판다. 채점은 매주 금요일, 잣대는 같은 규모의 종목과 KODEX 200. 판정은 2027년 3월.

어제 이벤트 스터디에서 임원 매수가 살아남았다. 규모 매칭 기준으로 20일 +1.0%p, 60일 +2.3%p, 120일 +5.0%p, t는 2.7~4.8. 그런데 백테스트가 살아남았다는 것과 앞으로도 그렇다는 것은 다른 말이다. 2년치 과거를 아무리 잘라 봐도 그 안에서 규칙을 고른 이상, 그 숫자는 낙관적으로 치우친다. 그래서 다음 단계는 실전 매매가 아니라 전진 기록이다. 오늘부터 규칙을 봉인하고, 6개월 동안 매일 무엇을 샀는지, 매주 얼마를 벌었는지, 잣대 대비 어땠는지를 공개 대시보드에 그대로 쌓는다.

규칙을 고르는 것까지가 백테스트

먼저 후보 규칙을 페이퍼 포트폴리오로 돌려 봤다(paper_sim.py, 2024-09~2026-09, 왕복 0.3%). 모든 임원 매수를 다 사는 R0부터, 최대 금액 20%를 빼고(R1), 대표·미등기 임원만 남기고(R2), 거래대금 5억 이상만(R3), 10억 이상만(R4)까지.

규칙연수익규모벤치 대비주간 승률(규모)평균 포지션
R0 전체18.7+0.352.9765
R2 대표·미등기만28.1+9.561.5449
R3 R2 + 거래대금≥5억30.5+5.856.7272
R4 R2 + 거래대금≥10억28.8+1.153.8226

읽히는 것이 둘 있다. 첫째, 엣지는 작은 종목에 있다. 유동성 필터를 조일수록 초과가 준다(R2 +9.5 → R4 +1.1). 실전 체결 가능성과 정확히 반대 방향이다. 둘째, 어떤 규칙도 KODEX 200에는 연 55%p 진다. 이 2년이 코스피 2,500에서 6,900으로 가는 대형주 장이었기 때문이고, 규칙의 결함이 아니라 시장 구성의 결과다. 이 포트폴리오는 ETF의 대체가 아니라 정보 검증 장치다.

R3·40일을 골랐다. 체결 가능한 최소 유동성을 지키면서 초과 +5.8%p, 주간 승률 57%, 포지션 270개.

봉인한 규칙

  • 신호: DART 임원ㆍ주요주주 소유상황보고에서 임원 본인 매수. 대표·회장·사장 또는 미등기 임원(상무·전무·부사장…). 이사·감사는 제외 — 이벤트 스터디에서 초과가 0이었다
  • 증감 수량 × 공시일 종가 < 3억원. 2년 분포의 80퍼센타일이 3.14억이고, 그 위는 증자·보상·블록딜로 추정되며 초과가 0 아니면 음수였다
  • 20일 평균 거래대금 ≥ 5억원
  • 공시 다음 거래일 종가에 진입, 40거래일 뒤 종가에 청산. 열린 포지션은 동일비중으로 매일 재계산. 같은 종목을 이미 들고 있으면 새 신호는 무시
  • 가상 자본 1,000만원, 왕복 비용 0.3%

채점은 매주 금요일. 잣대는 두 개 — 각 포지션과 같은 거래대금 5분위의 동일비중 수익률(정보가 진짜인가), 그리고 KODEX 200(대안보다 나은가, 대형주 장에서는 질 것을 미리 안다).

2027년 3월 판정: 규모 대비 주간 승률 ≥ 55% 그리고 누적 초과 > 0이면 실전 소액. 둘 중 하나라도 아니면 폐기하고 기록으로 남긴다. 중간에 규칙을 손대면 그날부터 다시 0일이다.

구현 — 사본이 정본을 재현하는 구조

로컬 파이썬(paper_sim.py)이 정본이고, VPS의 PHP가 그걸 매일 하루치씩 재현한다. 둘의 숫자가 다르면 PHP가 틀린 것이다. 직위 분류와 규모 5분위는 파이썬 함수를 그대로 옮겼고, 테스트에서 같은 입력에 같은 답이 나오는지 확인했다.

매일 18:30, VPS가 세 단계를 돈다.

  1. 시세 — 네이버 모바일 증권의 시장 목록(43페이지)으로 2,700종목 종가·거래량을 받아 일수익률, 20일 평균 거래대금, 규모 분위를 계산한다. 네이버가 말하는 거래일이 오늘이 아니면 휴장이니 아무것도 하지 않는다
  2. 신호 — DART 공시 목록에서 그날 소유상황보고서를 골라 회사당 한 번 상세를 받고, 규칙에 대본다. 통과든 탈락이든 사유를 기록한다
  3. 체결·평가 — 어제 신호는 오늘 종가에 진입, 보유 중인 것은 오늘 수익률 반영, 40일째는 청산. 규모 벤치마크는 같은 날 같은 분위 종목의 평균

금요일에는 주간 집계를 하나 더 붙인다. 접수번호로 멱등이라 같은 날 두 번 돌아도, 어제 날짜로 다시 돌려도 안전하다.

테스트는 합성 시장으로 했다. 종목 10개, 70거래일, 가짜 DART 응답 8건을 넣고 적재부터 신호, 다음날 진입, 첫날 비용 차감, 40일째 청산, 주간 집계까지 한 바퀴를 돌려 97개 단언이 통과했다. 그 다음 실제 API로 드라이런 — 2,682종목 25거래일을 받는 데 17분, 지난 금요일(9월 18일)의 소유상황보고 73건을 판정하니 5건 통과. 젬백스 대표이사 2.3억, 에코프로비엠 상무, 현대건설 전무, 계양전기 대표이사, 케이엔알시스템의 '마스터'라는 직위. 탈락 사유는 같은 회사 임원이 같은 날 여럿 보고한 중복(20), 주요주주(11), 매도(11), 비유동(11), 이사·감사(10), 3억 이상(5).

오늘 밤부터

배포는 끝났다. 테이블 다섯 개, cron 한 줄, 과거 시세 22거래일. 첫 신호는 오늘 18:30에 잡히고, 첫 진입은 내일 종가, 첫 주간 채점은 금요일이다. 대시보드 맨 위 카드에 규칙·누적·승률·보유 포지션·알려진 한계가 그대로 뜬다.

알려진 한계도 카드에 적어 뒀다. 백테스트가 2년이라 한 사이클이 안 된다는 것, 대형주 장에서는 ETF에 진다는 것, 작은 종목이라 MDD가 −30% 안팎이라는 것, 취득 방법(장내 매수인지 증자인지)을 금액으로 우회하고 있다는 것. 6개월 뒤 이 카드가 무엇을 말하든, 그건 골라서 보여준 숫자가 아니라 봉인 뒤에 쌓인 숫자다.


Signalio 개발기. 규칙 정본은 docs/paper-portfolio.md, 시뮬레이션은 research/reports/paper_sim.md.

Signalio — 한국 시장 정보 지도와 전략 검증 엔진 프로젝트로