코어 계좌가 자본 59%를 사서 지수를 2.47%p 밑돌았다
FLAT 판정으로 v4 데이트레이딩은 또 0건이었지만 오늘 처음 등장한 core_hold 계좌가 09:30에 069500·379800을 5,906,475원(자본 59.06%) 매수해 종일 보유했고, 실현손익 0원·미실현 −16,426원인 반면 B&H 벤치는 +2.47%여서 당일 알파는 −2.47%p다.
1. 지수를 이겼나 — 졌다
| 창 | bot_pct | bench_index_pct | bench_bh_pct | alpha_pct |
|---|---|---|---|---|
| 20d | −0.7927 (bot_days 9) | +2.3295 (bench_days 1) | +2.4657 (bench_days 1) | −2.4657 (alpha_days 1) |
| 60d | −0.7927 (9) | +2.3295 (1) | +2.4657 (1) | −2.4657 (1) |
이 알파는 20일 누적 알파가 아니다. bot 표본은 9일인데 벤치·알파 표본은 1일이다. 즉 오늘 하루치를 읽는 값이고, 오늘 봇 실현손익이 0%이므로 alpha_pct = −bench_bh_pct 그대로다. 누적 알파는 아직 계측되지 않았다.
exposure_pct_avg = 59.065는 당일 exposure_pct와 소수점까지 같다. 코어 계좌는 오늘 처음 나타났으므로 9일 평균이라면 이 값이 나올 수 없다 — 분모가 1일인 것으로 보이나 원자료에 정의가 없어 확인하지 못했다. 어쨌든 오늘만 보면 노출 59%로 상승장에 참여했으니 수익률 비교는 성립한다.
그리고 그 59%가 무엇을 했는지가 오늘의 핵심이다.
| 항목 | 값 |
|---|---|
장중 벤치 (bench_intraday_pct) | −0.2767% |
코어 미실현 (mtm_pnl_pct) | −0.1643% |
| −0.2767 × 0.5906 | −0.1634% |
소수점 셋째 자리까지 맞는다. 코어는 09:30 진입 이후 장중 지수를 노출 비율만큼 그대로 복제했다. 반면 벤치 B&H(+2.4657%)는 전일 종가 기준이라 시가 갭을 포함한다. 오늘 갭은 대략 +2.47 − (−0.28) ≈ +2.75%p 규모다. 09:30에 사는 구조는 이 갭을 원리상 못 먹는다. 오늘 −2.47%p 알파의 거의 전부가 종목 선택이나 타이밍이 아니라 벤치 시점 정의와 진입 시각의 차이에서 나왔다. 하루 표본이므로 이것을 "벤치가 잘못됐다"로 결론짓지 않고 가설로 넘긴다.
2. 결과 — 청산 0건, 코어 진입 2건
| 항목 | 값 |
|---|---|
| 레짐 | FLAT (09:30:02) · 코스피 +2.333% · 기울기 −0.337%p · 전일 +3.561% |
| 대상 (v4) | 없음 (vehicle: null) |
daily.trades_count / 승 | 0 / 0 |
| 실현 순손익 | 0원 (0.000%) |
| 미실현 | −16,425.97원 (−0.1643%) |
| 노출 | 59.065% (코어 기대 60.0 · 실제 58.909) |
| 누적 수익률 / MDD | −0.9557% / 0.9557% (8/13 −0.793 → 오늘 −0.956) |
| 워치독 / API 오류 | 0 / 0 |
| 관찰 | 정적 25 → 동적 8 (ETF 3종 동적 평가 없음) |
| 지수 | 최저 +0.525%, 최고 +2.824% |
| 아카이브 | 25종목 9,794봉 |
시간 순서
| 시각 | 일 |
|---|---|
| 09:30:02 | FLAT — v4는 대상 미선정 |
| 09:30:13 | core_hold 069500 신호 110,175 → 지정가 110,175 / 21주 (target 2,400,000) |
| 09:30:14 | core_hold 379800 신호 24,915 → 지정가 24,950 / 144주 (target 3,600,000) |
| 09:30:15 | 379800 체결 24,950 (1.5초) |
| 09:31:12 | 069500 체결 110,175 (59초) |
| 이후 | 청산·추가 주문 없음. exit_time 둘 다 null |
사이징은 floor(target / 주문가)와 일치한다 (2,400,000/110,175 = 21.78 → 21 · 3,600,000/24,950 = 144.28 → 144). 두 종목 배분은 24% : 36%이고 합 60%가 core_expected_pct와 같다. 실제 58.909%와의 1.09%p 차이는 floor 절사분이다 — 오차가 아니라 설계상 잔여로 보인다.
주문가 규칙이 어제까지의 관찰과 어긋난다. 8/11~8/12에 5표본 일치했던 "직전가 −1틱 → 격자 내림"은 069500(신호가 = 주문가)에도, 379800(신호가 24,915 → 주문가 24,950, 신호가보다 +0.14% 위)에도 맞지 않는다. 코어 계좌는 확실히 채우려고 위로 얹는 별도 경로일 가능성이 있으나 069500은 동가라 그 설명도 완결되지 않는다. 규칙을 확인하지 못했다.
379800은 watchlist 25종목에 없다. 정적 통과 목록 밖의 종목을 코어가 매수했다. 코어 종목 후보군이 원자료에 없어 무엇으로 선정되는지 확인하지 못했다. 종목명도 원자료에 없다.
지표 두 계열이 어긋난다. cum_return_pct는 8/13 −0.793 → 오늘 −0.9557로 정확히 미실현 −0.1643%p만큼 움직였다(미실현 포함). MDD도 같이 갱신됐다. 반면 rolling.bot_pct는 −0.7927로 어제와 같고(실현만), alpha_pct도 실현 0%를 기준으로 계산됐다. 미실현을 포함하면 당일 알파는 −2.63%p다. 같은 하루가 두 값으로 기록되고 있다. n=1로 확정되는 산수 문제다.
slippage는 두 건 모두 null이다. 체결가 = 주문가이므로 0이어야 할 값이 비어 있다.
3. replay 비교 — 사흘 끊겼던 대조군 7종이 전부 돌았다
| 재생 | 관찰 | 거래 | 결과 |
|---|---|---|---|
| v4 ETF 레짐 (현재 전략) | — | 0 | FLAT — "기대값을 계산할 표본이 없다" |
| v4 트레일링 끔 (대조군) | — | 0 | 현재 전략과 완전 동일 |
| v2 반사실 (구 VWAP 회귀) | 9 | 3 | −174,375원 (−1.74%), 기대값 −1.178%/거래, 승률 0% (n=3) |
| v2 트레일링 끔 | 9 | 3 | v2 반사실과 완전 동일 |
| v2 옛 유니버스 상한 | 1 | 0 | 거래 없음 |
| v2 3단계 지수차단 −1.5 | 9 | 3 | v2 반사실과 완전 동일 |
| v2 4단계 손절·익절·사이즈 | 9 | 3 | −53,703원 (−0.54%), 기대값 −1.415%/거래 |
v2 반사실 내역 (3건 전부 손절)
| 진입 | 종목 | 청산 | 손익 |
|---|---|---|---|
| 09:36 | 000720 현대건설 116,700 | 09:44 115,626 | −1.15% |
| 09:35 | 042660 한화오션 95,600 | 09:45 94,758 | −1.11% |
| 09:45 | 089970 브이엠 66,700 | 09:52 66,001 | −1.28% |
(a) 트레일링 대조군 — 사흘 만에 돌았고, 오늘 차이는 0이다. v2·v4 양쪽 모두 트레일링을 껐을 때 출력이 한 글자도 다르지 않다. 이유는 명확하다: v2 3건 전부 09:52까지 손절로 끝났고 무장선 +3.0%에 닿은 거래가 없다. 8/13에 "차이가 있었을 것이 확실한 날"이라 적은 trail_exit 유형이 오늘은 없었다. 트레일링의 가치는 오늘 표본으로 판정할 수 없다(차이 발생 거래 n=0). 대조군이 살아 있다는 사실만 확인됐다.
(b) 옛 유니버스 상한 — 오늘은 손실 회피 방향이다. 갭 ≤3.0 · 변동폭 ≤2.5로 조이면 관찰이 9 → 1종목(010140 삼성중공업, 변동폭 2.46 · 갭 1.82 · 거래량비 1.29)으로 줄고 거래가 0이 된다. 즉 옛 상한이었다면 오늘 v2 손실 −174,375원은 전액 발생하지 않았다. 8/11~8/13은 "거래 종목이 전부 옛 상한 초과"였고 그때는 이익도 상한 완화 덕이었다. 완화가 손익 양방향을 다 키운다는 정황이 4거래일째 같은 형태로 나온다. 하루짜리 손익으로 상한을 되돌리자고 하지 않는다.
(c) 3단계 −1.5 — 오늘은 판정 불가. 지수 최저 +0.525%로 −1.0에도 닿지 않아 −1.0이든 −1.5든 출력이 같다.
(d) 4단계 세트가 기대값은 나쁜데 자본손실은 3분의 1이다. 거래당 기대값은 −1.178% → −1.415%로 악화(손절이 −1.5로 깊어져 실행가가 −2.17 / −1.94%)인데, 자본 대비 순손익은 −1.74% → −0.54%로 개선됐다. 원인은 두 가지가 섞여 있다: POSITION_FRACTION=0.13으로 줄어든 사이즈, 그리고 세 번째 거래가 다른 종목·다른 청산(272210 time_exit −0.13%)으로 갈린 것. 손절 폭 효과와 사이징 효과가 분리되지 않는다. n=3이므로 결론이 아니다.
v2 재생 손절 실행가가 파라미터보다 계속 깊다. −1.15 / −1.11 / −1.28%(기준 −0.6%), 4단계에서도 −2.17 / −1.94%(기준 −1.5%). 8/11·8/13에 이어 3건 추가로 총 6건, 방향이 한 번도 반대로 나오지 않았다. 이 편차가 남아 있는 한 손절선 관련 재생 손익을 그대로 읽을 수 없다.
유니버스 산출 일치가 끊겼다. v2 관찰 9종목 vs 실전 동적 통과 8종목. 8/10~8/13 4거래일 연속 개수가 맞았는데 오늘 1종목 어긋났다. v2가 거래한 3종목은 모두 통과 목록 안에 있다. 어긋난 1종목이 무엇인지는 재생 출력이 종목 목록을 찍지 않아 확인하지 못했다. 어제 나온 정원초과는 오늘 0건이다(통과 8종 < 정원 10).
4. 조건 C — 0분
blocked_minutes = 0, 임계 −1.0%, 지수 최저 +0.525%.
| 날짜 | blocked | 진입창(271분) 기준 | 지수 최저 |
|---|---|---|---|
| 8/7 | 271분 | 100% | −6.51% |
| 8/10 | 0분 | 0% | −0.987% |
| 8/11 | 4분 | 1.5% | −1.363% |
| 8/12 | 0분 | 0% | +1.164% |
| 8/13 | 0분 | 0% | +2.588% |
| 8/14 | 0분 | 0% | +0.525% |
지수가 −1.0 ~ −1.5 구간에 들어간 날이 9거래일 연속 없다. 3단계 조건은 여전히 미충족이고, 값이 0이라 분모·시각 검증도 또 못 했다. 코어 계좌가 조건 C의 적용 대상인지도 원자료에 없다 — 오늘 코어는 09:30에 무조건 샀고 차단 분이 0이어서 시험되지 않았다.
5. 미해결 결함 — 테이블이 비어 있다
evolution.defects = 빈 배열, defect_counts = {}, hypotheses = 빈 배열, probes_run = 0, stale_days = 3.
지난 사흘 회고 본문에 결함을 10개까지 표로 적었지만 진화 블록으로 넘어간 것이 하나도 없다. 그래서 오늘 파서가 읽을 미해결 결함은 0건이고, age_days도 존재하지 않으며, probe도 한 번 실행되지 않았다. 나이가 늘기만 하는 결함이 문제라고 썼는데, 실제로는 나이가 기록조차 되지 않았다. 이것이 회고 3일치를 버린 원인이다. 오늘부터 진화 블록에 실제로 올린다 — 아래 블록의 결함 4건은 전부 오늘 원자료로 확정되는 것들이다.
6. events
warnings 0건. by_type 총 16건 — bot 4(어제 2 → 오늘 4), universe 3, fill 2, order 2, watchdog 2, archive·gate·report 각 1.
order 2 / fill 2 / cancel 0이 거래 2건(진입만, 미체결 없음)과 정확히 맞는다. 특정 type이 수천 건인 루프 징후 없음. bot이 2 → 4로 늘어난 것은 코어 계좌 추가와 시점이 겹치지만 이벤트 내용이 원자료에 없어 확인하지 못했다. gate 1건은 나흘째 내용이 비어 읽을 수 없다.
7. 내일 확인할 것
- 코어 포지션 2건의 청산 규칙.
exit_reason·exit_time이 null인 채 하루가 끝났다 — 보유 전략이면 청산 조건과 리밸런싱 주기가 무엇인가 signal_context의drawdown_pct0.00 /multiplier1.0 — 낙폭에 따라 배수를 키우는 구조로 읽히나 확인하지 못했다. 배수 상한이 얼마인가- 379800 같은 유니버스 밖 종목이 코어에 몇 개 더 있는가
- 코어 진입 시각이 09:30 고정인가. 고정이면 갭 손실은 매일 구조적으로 발생한다
- v4 FLAT이 4거래일 중 2일이다(GREEN 1 / RED_B 1 / FLAT 2). 표본 4로는 아무 말도 못 한다
조치 — 파라미터는 바꾸지 않는다
오늘 실현 거래는 0건이다. 코어 진입 2건은 아직 청산되지 않아 손익이 확정되지 않았다. v2 재생 3건은 실전과 대조된 적 없는 도구의 출력이다. n<500에서 손절·익절·상한·노출 비중을 건드리지 않는다.
| 단계 | 조건 | 현재 |
|---|---|---|
| 3 조건 C −1.5 | 지수가 −1.0 ~ −1.5 구간에 머문 분에 진입 성립 1회 | 지수 최저 +0.525% — 미충족 (9거래일 연속) |
| 4 손절 −1.5 | 실전 손절 10건 누적 | 6건 (오늘 0건. v2 재생 3건은 실거래가 아니다) |
| 4 익절 +2.5 | 고점 +3.0% 도달 거래 1건 | 0건. v4 목표 +1.0%가 상한을 만든다 |
| 5 거래량비 | 재생이 실전을 재현한 뒤 판정 | 보류 — 오늘 관찰 개수가 9 vs 8로 어긋났다 |
9거래일 정리
| 날짜 | 전략 | 레짐 | 실현 거래 | 승 | 실현 순손익률 | 노출 | 지수 최저 |
|---|---|---|---|---|---|---|---|
| 8/4 | v2 | — | 0 | — | 0% | — | −2.83% |
| 8/5 | v2 | — | 2 | 0 | −0.42% | — | +4.57% |
| 8/6 | v2 | — | 2 | 0 | −0.25% | — | −1.82% |
| 8/7 | v2 | — | 0 | — | 0% | — | −6.51% |
| 8/10 | v2 | — | 2 | 0 | −0.232% | — | −0.987% |
| 8/11 | v4 | RED_B | 0 | — | 0% | — | −1.363% |
| 8/12 | v4 | GREEN | 1 | 1 | +0.118% | — | +1.164% |
| 8/13 | v4 | FLAT | 0 | — | 0% | — | +2.588% |
| 8/14 | v4 + core | FLAT | 0 | — | 0% | 59.06% | +0.525% |
누적 7거래 1승 6패, 실현 −0.793%. 미실현 포함 누적 −0.9557%, MDD 0.9557%.
오늘 얻은 것은 두 가지다. 하나, 재생 대조군 7종이 복구됐다 — 다만 오늘 시장이 트레일링·지수차단 차이를 만들지 않아 정보량은 거의 없었다. 둘, 코어 계좌가 장중 지수를 노출 비율로 정확히 복제한다는 산수 확인(−0.2767 × 0.5906 = −0.1634 ≈ −0.1643). 이 구조에서 알파의 크기를 결정하는 것은 종목 선택이 아니라 진입 시각과 벤치 기준 시점이다. 그것이 설계인지 실수인지는 모른다.
진화 블록
| 종류 | 내용 | 검증 |
|---|---|---|
| 결함 | core_hold가 매수한 379800이 watchlist 25종목에 없어 코어 종목 후보군을 추적할 수 없다 | sql:core_orders |
| 결함 | 코어 지정가가 신호가보다 위로 나갔다 — 379800 신호 24,915 대비 주문 24,950 | sql:core_orders |
| 결함 | cum_return_pct·MDD는 미실현을 포함하는데 rolling.bot_pct·alpha_pct는 실현만 써서 같은 하루가 −0.9557과 −0.7927 두 값으로 기록된다 | sql:exit_expectancy 로 실현 누적을 재집계해 두 계열 중 어느 정의가 맞는지 대조 |
| 결함 | 체결가와 주문가가 같은데 slippage 가 null 로 비어 있다 (2건 모두) | sql:core_orders |
| 결함 | v2 재생 손절 실행가가 파라미터보다 깊다 — −0.6 기준에 −1.11~−1.28, −1.5 기준에 −1.94~−2.17 (누적 6건 전부 한 방향) | 사람이 replay.py 손절 체결가 산출부가 다음 봉 시가를 쓰는지 확인한다 |
| 결함 | 회고 결함이 진화 블록에 오르지 않아 evolution.defects 가 3일간 빈 배열이고 probes_run 이 0이다 | 다음 회고 원자료의 defect_counts 가 비어 있지 않은지 확인한다 |
| 가설 | 09:30 진입 구조는 전일 종가 기준 bench_bh 를 시가 갭만큼 원리상 밑도는가 | 60거래일 이상의 일별 갭 분포와 코어 진입 시각을 대조해 알파 중 갭 기여분을 분리한다 |
| 가설 | 노출 60% 코어가 장중 지수를 그대로 복제한다면 알파의 부호는 갭과 노출로 결정되는가 | 60일 이상 표본에서 mtm_pnl_pct 를 bench_intraday_pct × exposure 로 회귀해 잔차가 0인지 본다 |
| 가설 | v2 4단계 세트에서 기대값 악화와 자본손실 감소가 동시에 나온 것은 손절 폭 때문인가 사이즈 때문인가 | 500거래 이상 백테스트에서 STOP_LOSS_PCT 와 POSITION_FRACTION 을 격자로 분리 측정 |
| 가설 | 트레일링은 무장선 도달 거래에서만 차이를 만드는데 그 빈도가 연간 몇 %인가 | 60거래일 재생에서 mfe 3.0% 이상 도달 거래 비율을 센다 |
| 가설 | 유니버스 관찰 개수가 재생 9 vs 실전 8로 어긋난 원인이 정원 규칙인가 필터 임계인가 | 재생 출력에 관찰 종목 코드를 찍게 한 뒤 20거래일 교집합을 비교 |
| 가설 | v4 FLAT 판정이 09:30 한 번으로 하루를 고정하는데 장중 재판정이 손익을 개선하는가 | 60거래일 재생에서 30분 간격 재판정 대조군을 돌려 기대값을 비교 |