전략 원장

검토한 전략 전부 — 채택도 기각도, 시행 횟수와 내가 틀린 것까지 적는다. 숫자는 모두 비용 차감 후이고, 인샘플과 전방을 구분해 표기한다.

⚠️ 이 문서의 성과 수치는 대부분 인샘플이며 투자 권유가 아니다. 전방(페이퍼) 판정 전에는 어떤 항목도 “검증됨”이 아니다.

전략 원장 — 검토한 전부 · 구현 경로 · 현재 상태

2026-08-07. 재검토 ⑲까지 완료 — ①⑤(미래참조 제거) · ⑨⑪(모멘텀·판정 규칙) · ⑫⑭(돌파 재판정·정합·포트폴리오) · ⑮⑯(펀딩·HA·TTM 기각) · ⑰~⑱(귀무분포 교정) · ⑲(결합). 이 문서의 규칙: "이 전략은 엣지가 없다"라고 쓰지 않는다. "이 구현·이 조건·이 표본에서 기준선을 못 넘었다" 로만 쓰고 검정 범위를 함께 적는다.


0. 이 원장이 존재하는 이유

이 저장소는 전략을 30개 가까이 시험하고 대부분 기각했다. 그런데 재검토에서 드러난 것:

기각의 진짜 원인사례
★검정력 부족 — 관문이 달성 불가능전 계열. 아래 §0.1 참조. 가장 큰 원인이었다
미래참조 기준선에 짐돌파 3회 기각 — 대조군 채널이 29개 중 28개 스크립트에서 누수
표준과 다른 구현CVD 22단계 — 1h 집계를 단독 트리거로 사용(표준은 풋프린트 해상도의 확인자)
다른 전략을 같은 이름으로 시험횡단면 모멘텀 — 롱온리·200봉 보유로 시험(학술 구성은 롱숏·7일 보유)
측정 지표가 틀림전 계열 — 평균 R 로 판정. 계좌는 복리라 기하 성장률이 맞다
사이징 미검토전 계열 — base_rate 10% 가 풀 켈리(파산확률 43%)인 걸 몰랐다

즉 "전략이 없다"가 아니라 "제대로 시험한 적이 없다"가 더 정확했다.


0.1 ★가장 큰 원인 — 내 관문이 달성 불가능했다 (⑩ 검정력 감사)

기각의 근거로 매번 "블록 z < 2"를 댔는데, 그 검정이 진짜 엣지를 얼마나 잡아내는지 한 번도 재지 않았다. 재보니:

진짜 엣지(연)반분할 통과율전 표본
+0%2.8%2.8%
+10%3.8%8.0%
+20%14.0%14.5%
+30%16.5%31.0%
+50%39.2%65.0%
+80%76.5%96.2%

진짜로 연 20% 버는 전략을 줘도 86% 확률로 "미달"이라 쓴다. z≥2 에 필요한 최소 엣지가 반분할 +41.1% · 전 표본 +29.1% 였다.

산수로도 같다. 차이 계열 Sharpe ≈ 0.5 → t=2 를 찍으려면 (2/0.5)² = 16년. 우리는 7년. 관측 z(1.22, 0.67, 0.67)는 진짜 Sharpe 0.6 엣지가 7년에서 내는 바로 그 값이다.

고친 방법 (⑪ · 바를 낮춘 게 아니다)

  1. 공짜 검정력 회수 — 위약을 M=64회 뽑아 평균. 위약 1회 추출은 자기 잡음을 차이 계열에 √2 얹는다. 평균하면 사라진다. 정보를 더 쓴 것이지 기준을 푼 게 아니다.
  2. 남은 불확실성을 기각이 아니라 베팅 크기로f = f_kelly × (2P − 1). p<0.05 못 넘으면 0을 건다는 규칙은 "영원히 안 건다"와 같다.
  3. 모든 판정 앞에 영점 조정 — 무엣지 계열을 '전략' 자리에 넣어 P 평균 0.5 확인. ★실제로 1차 시도(위약 풀 평균 기준)가 여기서 깨져 폐기됐다(평균 P 0.676).

새 판정 규칙 (전 전략 동일 적용 · 이후 변경 금지)


1. 현재 순위 — 검정을 통과한 순서

★현황 한 눈에 (2026-08-07 갱신) · 가동 중 페이퍼 트랙 3개 — T1 폭 돌파(×0.37) · T2 횡단면 모멘텀(×0.59) · T3 비유동성(×0.66) T3 는 코드 배포 완료, 가동 스위치 QC_ILLIQ_LIVE=1사용자 등록 대기. T2 는 ㊳-b 잠복버그 수정분이 다음 배포 때 반영된다. · 목표: 2개월 버킷 승률 70% / 인샘플 3트랙 합산 50.0% (㊲) — 아직 못 연다 · 확정된 병목: IC(신호의 질). 양(量)은 네 축에서 전부 닫혔다 — 지표(㉒) · TF(㉘) · 수익원(㊲) · 종목(㊴). 규칙 20 참조. · 열린 방향: ㊵ ch.19 Amihud 첫 증거(Sharpe 1.15배·전방 대기) · 진입 규칙(㉖은 청산만 쟀다) · ch.17 SADF · 페어/공적분. ch.5 FFD 는 ㊶에서 닫혔다(랭킹 점수로는 0.15배). · ★방향 결정 대기: AFML 신호 절반(ch.5·17·18)은 ML 피처 전제다. 규칙 기반을 유지하며 직접 랭킹 가능한 측정량만 찾을지, ML 경로(CPCV·표본고유성 이미 구현됨)로 복귀할지 — 사람이 정한다. · 미결 후보: L3 자본항복 되돌림(㉟ 게이트 미달·사이징 재선언 필요) · 페어/공적분(rank68 탈락 사유 소멸, 미검정) · T3 점수 Amihud 교체(전방 판정 후)

★2026-08-07 갱신 — §0.1 의 검정력 감사로 판정 규칙이 바뀌었고, 아래는 새 규칙 기준이다.

순위전략상태핵심 수치 (새 규칙)
1폭 조건부 롱 돌파페이퍼 배포배포 규칙 그대로 · 군집/기하 보존 위약에서 4분할 전부 통과 — 전체 P 0.980 · 전방 시간 P 0.990(초과 +0.332R) · 종목 0.950/0.945 · 영점 정확 · ⑬ 라이브↔검정 정합 불일치 0건
2횡단면 모멘텀 (롱숏 중립)★조건부 채택(미배선)⑪ OOS 3/3 분할 net·gross 모두 위약 초과(+13.0/+24.0/+14.7%p) · P 0.965 · Sharpe 0.59 · 낙폭 34.3%
3Triple RSI + 50 EMA검증 상태 유지귀무모형 통과(버킷승 100%ile) + PIT 확인. 개별 DSR 0.147
펀딩 캐리 (무기한 횡단면)기각(⑮)B 홀수 분할에서 net +3.07% 인데 gross −10.27% — net 우위가 신호가 아니라 회전율 차이. gross 게이트가 잡음
하이킨아시기각(⑯ 첫 검정)2,797건 · 초과 −0.001R · P 0.281. 무작위 진입과 구별 안 됨
TTM 스퀴즈기각(⑯ 첫 검정)1,426건 · 초과 −0.003R · P 0.141 · 3/3 분할 음수
채널 평균회귀반대(재확인)⑫ 새 규칙에서도 3/3 분할 음수 · 전체 −0.095R · P 0.000 → 기각 유지

★판정 통계 자체를 세 번 고쳤다 (⑯·⑰·⑱)

문제발견 경위수정
시간블록 부트스트랩이 표준오차 과소평가하이킨아시 영점 P≥0.975 20%(기대 2.5%)경험 치환분포로 교체 → 영점 0.500/15.6%/3.1%
★흩뿌린 위약이 전략의 시간 군집을 재현 못 함두 추정기 z 불일치(2.53 vs 9.23)순환 시간 이동 위약 — 귀무 폭 1.87배 넓어짐
★위약 기하가 전략과 달랐다전략 손절 중앙 1.87ATR(돌파선 기준)인데 위약은 일률 1ATR위약이 그 신호의 실제 sd/ATR 배수를 쓰게 함 — 바뀌는 건 진입 시점뿐

세 번째를 고치자 전방 시간 분할이 가장 약함(0.685)에서 가장 강함(0.990)으로 뒤집혔다. 위약이 전략보다 좁은 손절을 쓰면 노이즈에 더 자주 털려 진입 시점 효과와 기하 효과가 섞인다.

교훈: 영점 통과가 "귀무분포가 옳다"를 뜻하지 않는다. 영점은 위약 vs 위약만 비교하므로 양쪽이 똑같이 틀린 구조를 가지면 통과한다. 귀무는 전략의 시간 구조까지 닮아야 한다. ⇒ 흩뿌린 위약으로 낸 z 는 약 1.87 로 나눠 읽는다(배포 규칙에서 실측한 값).

★결합해도 안 풀린다 — 이번 재검토의 마지막 결론 (⑲)

남은 둘은 성격이 정반대라(롱온리 방향성 vs 롱숏 중립) 상관이 낮을 것으로 봤고, 맞았다:

일수익 상관 ρ = +0.0132   (둘 다 움직인 날만 +0.0510)   유효 베팅수 1.97 / 2.00

그런데 위험을 맞추면 결합 이득이 사라진다. 1차 계산에서 50/50 혼합 최악버킷이 −10.60% → −7.94% 로 좋아 보였는데, 무상관 계열을 섞으면 변동성이 √2 로 준다(20%→14.2%). 같은 연 변동성 20% 로 되맞추니:

구성연수익Sharpe낙폭버킷승최악버킷하위3평균
돌파 단독+20.71%1.0423.3%9/21−11.69%−9.14%
혼합 모멘텀25/돌파75+21.78%1.0923.4%11/21−10.79%−9.92%
혼합 50/50+19.48%0.9721.7%10/21−11.12%−9.35%
혼합 모멘텀75/돌파25+13.15%0.6621.1%10/21−9.63%−8.29%
모멘텀 단독+7.02%0.3519.8%11/21−10.60%−8.57%

50/50 vs 단독 최고: 최악버킷·하위3평균·버킷승률 셋 다 악화. 앞서 본 개선은 전부 변동성 축소였다. ★최적 w 를 고르지 않는다 — 5개 가중을 전부 신고하는 것이 사전선언이다.

★가장 중요한 사실: 버킷 승률이 어느 조합에서도 43~52% 다. 궁극 목표(모든 2개월 버킷 (+))와 거리가 멀고, 결합으로 해결되는 문제가 아니다. 이게 이 재검토가 남긴 가장 정직한 미해결 과제다.

★국면 분해 (⑳) — 고변동성에서 엣지가 사라진다. 단 최근 감쇠와는 별개

국면별 수익이 아니라 초과분을 쟀다(같은 국면에서 무작위 진입도 지면 그건 베타지 결함이 아니다). 위약은 ⑱ 순환 이동을 옮겨진 자리의 국면으로 다시 담았다.

국면 변수하위 초과중간상위패턴
① BTC/SMA200+0.109+0.154+0.376 (P .995)추세 강할수록 ↑
② BTC 30일 수익률+0.005+0.066+0.187같은 방향
③ 종목 60일 변동성+0.379+0.135−0.029변동성 높을수록 ↓
④ BTC 60일 변동성+0.441+0.300−0.156 (P .070)★가장 뚜렷한 음수
⑤ 횡단면 분산+0.271+0.252+0.065같은 방향
⑥ 종목 펀딩+0.266+0.057같은 방향

6개 중 5개가 단조이고 전부 같은 이야기 — 변동성이 높으면 초과가 0/음수로 간다. ④ 상위는 위약 분포 하위 7% 로 무작위보다 유의하게 나쁘다. 버킷 수준도 같은 방향: 음수 버킷 평균 BTC변동성 56.9% vs 양수 43.9%.

★교락 검사. 고변동성 거래 비율: 2021 100% · 2022 76% · 2023 6% · 2024 37% · 2025 4% · 2026 0% 고변동성은 2021~22 에 몰려 있다. 즉 최근 감쇠는 유리한 국면(저변동성)에서 일어났다. 감쇠를 국면 탓으로 설명할 수 없고 알파 소멸 쪽에 더 가깝다. ← 이 추론은 ㉑에서 틀린 것으로 판명됐다(아래 참조).

★알파 소멸 가설은 기각된다 (㉑) — 위 추론의 정정

소멸 검정의 귀무는 "엣지가 없다"가 아니라 "엣지가 일정하다" 다. 그 아래에서는 초과분이 시간에 대해 교환 가능하므로 시간 라벨 셔플이 정확한 귀무분포다(치환 5,000회). 초과분 = R_i − (그 시기 위약 평균, 180일 구간) — 이래야 시장 기여가 빠진다.

검정관측귀무평균귀무SDP(소멸)
A 전반−후반 초과차−0.1057−0.00090.09710.858
B 회귀 기울기(R/년)+0.0049+0.00050.03570.549
C 스피어만 ρ+0.0700+0.00040.03400.979

셋 다 소멸의 반대 방향이다. 그리고 검정력을 먼저 쟀다(⑩의 교훈): −0.05R/년 → C 검출률 100% · −0.10 → 100% · 1종 오류 5~6% 정상. 연 −0.05R 짜리 소멸도 100% 잡는 검정이 P=0.979 를 냈다 ⇒ "못 가린다"가 아니라 소멸이 없다고 말할 수 있는 드문 경우다.

★그럼 ⑭의 '4년 단조 하락'은 무엇이었나. ⑭는 계좌 원R 을 연도별로 봤고 거기엔 시장 기여가 그대로 들어 있다. ㉑은 같은 시기 위약을 뺀 초과분을 본다. 초과분에는 하락 추세가 없다. ⇒ ⑭의 하락은 엣지 소멸이 아니라 시장이 이 거래 형태에 불리해진 것. 같은 데이터라도 무엇을 빼고 보느냐가 결론을 바꾼다.

부수 발견 — 버킷 일관성의 구조적 원인: 버킷당 거래 수가 1~99 로 100배 차이 난다. 2개월 수익이 안정될 수 없는 구조이며, 이는 엣지 문제와 별개의 원인이다.

★규율: 이 분해는 진단이지 필터가 아니다. 여기 나온 국면에 필터를 얹고 그 결과를 성과로 보고하는 것은 CLAUDE.md §9 금지. 필터는 별도 OOS/전방으로만 검증한다.

★★버킷 문제의 진짜 원인이 확정됐다 (㉒·㉓) — 이 재검토의 최종 결론

㉒는 "신호 빈도 1~99건" 을 무죄로 판정했다. 미래참조를 허용한 이상적 균등화(그 버킷에 몇 건이 올지 미리 알고 1/n 스케일)조차 버킷 승률을 못 올렸다(62% → 62%). 거래수와 버킷 부호의 상관은 +0.001, 심지어 비단조다(적음 89% · 중간 38% · 많음 56%).

대신 원인이 정확히 잡혔다:

거래당 평균R +0.3311 · SD 1.4878 · Sharpe/거래 0.2225
버킷당 평균 34건 → 독립이면 이론 버킷승률 90%
★버킷 합계 분산 팽창 = 11.99배  ⇒ 유효 독립 베팅 = 34/11.99 = 2.8건
  유효 2.8건 기준 이론 승률 65%  ← 실측 62% 와 일치(모형이 설명한다)
같은 날 두 거래 부호 일치율 65% (독립이면 ~52%)

25종목 롱온리는 같은 베팅을 25번 하는 것에 가깝다. 버킷 승률 90% 를 원하면 유효 33건 이 필요한데 지금 2.8건 — 12배 부족하다.

㉓ 시장중립 헤지도 막혔다 — 엣지가 노출과 한몸이다

남은 길이었던 베타 헤지를 검정했다(BTC 숏 / 바스켓 숏 × h ∈ {0,.25,.5,.75,1} · 헤지 비용 차감 · 총 위험 동일화). 유효 베팅은 실제로 늘었다(4.3 → 6.3). 그런데:

h00.250.50.751.0
연R+41.88+37.61+30.01+18.10+1.99
Sharpe0.450.400.320.190.02
버킷승률36%36%33%31%29%
유효베팅4.35.56.36.25.3

버킷 승률 ≈ Φ(√유효베팅 × 거래Sharpe) 라 Sharpe 붕괴가 베팅 증가를 압도한다.

베타를 가정하지 않고 추정해 분해하니:

BTC 기준   베타 1.032 · R² 64.7% · 총손익 +289.0 = 시장분 +276.6(96%) + 알파 +12.4(4%)
바스켓 기준 베타 0.798 · R² 87.9% · 총손익 +289.0 = 시장분 +401.5 + 알파 −112.5(−39%)

★"알파 4%"를 "실력 없음"으로 읽으면 안 된다. 회귀의 시장분은 보유 기간의 실현 시장수익을 쓰므로 전략의 시장 타이밍 실력이 그 안에 들어간다(⑱의 초과 +0.198R 이 그것이다).

정확한 진술: 이 전략의 엣지는 시장 타이밍이고, 그건 시장 노출과 분리할 수 없다. 헤지는 노출을 지우면서 작동하던 바로 그것을 함께 지운다. ⇒ 단일 시장 타이밍 신호로는 유효 베팅을 늘릴 수 없다. 롱일 때 롱인 이유가 하나뿐이라서다. 2개월 버킷 일관성은 이 전략 하나로는 구조적으로 도달 불가능하다. 남은 길은 사이징·빈도·헤지가 아니라 진짜로 다른 수익원뿐이다.

㉔·㉕ 캐시앤캐리 — 구조는 맞았으나 수익원이 말랐다

㉒·㉓이 사이징·빈도·헤지를 전부 막은 뒤 찾은 "수익원이 가격이 아닌" 유일한 검정 가능 후보. 현물 일봉을 REST 로 받아 24/25 종목 확보(2023-11~, 999일). ⑮의 무기한 횡단면과 다른 물건이다.

구조는 실측으로 확인됐다: 두 다리 잔차 표준편차 0.12% vs 원자산 일변동성 4.86% → 가격 위험 97.5% 제거. 베타와 무관하다는 전제는 맞다.

netgross회전Sharpe버킷승20252026
T0 일간+2.35%+8.01%0.192.699/17−1.05%−8.72%
T1 주간+6.07%+7.62%0.058.1114/17+3.05%−1.12%
T2 격주+6.42%+7.39%0.038.5814/17+3.42%−0.44%
T3 히스테리시스+4.65%+7.95%0.115.9512/17+1.17%−3.55%
T4 회전 0+2.30%+2.33%0.003.5012/17+0.89%−0.13%

★기각 사유 — gross 가 단조로 말라간다. T2 gross: 2023 +16.57% → 2024 +12.77% → 2025 +4.51% → 2026 +1.07% (3년 −93%) 2026 은 gross +1.07% 인데 비용이 1.51% 라 남은 캐리가 비용을 못 덮는다. 사전선언 게이트 "2025·2026 둘 다 양수"를 어느 팔도 못 넘었다. ★−0.44% 는 사실상 0 이지만 사전선언은 "양수"였다. 여기서 "0 근처면 통과"로 바꾸면 결과를 보고 관문을 옮기는 짓이다. 그러지 않았다.

★돌파의 감쇠(㉑에서 기각)와 성격이 다르다. 돌파는 초과분에 추세가 없었다. 캐리는 수익원 자체(펀딩)가 관측 가능하게 마른다 — 통계 문제가 아니라 시장 구조 변화다. 꼬리는 나쁘지 않았다(왜도 +1.27 양수 · 최대낙폭 0.64% · 일승률 73%) — '동전 줍기' 아님.

★★재사용 자산 — 회전 감축 기법 (㉕에서 유효성 입증)

캐리류는 신호가 있어도 회전 비용이 그걸 먹는다. ㉕에서 이 문제를 실제로 풀었다:

일간 재선택  net +2.35% · 회전 0.19 · 비용 6.15%(2025)
격주 재선택  net +6.42% · 회전 0.03 · 비용 1.09%(2025)   ← 2025 가 −1.05% → +3.42% 로 뒤집힘

· 재선택 주기를 늘리는 것이 가장 효과가 컸다(히스테리시스보다 단순하고 강했다). · 순서 규율: 회전 감축이 올릴 수 있는 최대치는 정확히 비용만큼 = gross 가 천장이다. 천장을 먼저 재고, 최근 구간 천장이 음수면 팔을 돌리지 않는다. · 신호 대비 회전이 큰 계열(캐리·횡단면·펀딩류)에 그대로 재사용한다.

㉘ 단기 TF 로 확인을 앞당길 수 있는가 — 없다 (2026-08-07)

"일봉이라 월 4건이니 4h·1h·30m 도 돌리면 확인이 빠르지 않나"는 타당한 제안이었다. ★먼저 정정: 나는 "CLAUDE.md 에 1d 로 못박혀 있다"고 답했는데 틀렸다. 그 TF 스윕 (2026-07-17 · commit ca6d84f)은 채널/Triple RSI 것이고, 폭 돌파는 2026-08-06 생성으로 다른 TF 에서 시험된 적이 없다. 열려 있는 질문이 맞았다. 그래서 쟀다.

1h 봉 6종목을 기준으로 상위 TF 를 집계 — 종목·기간 완전 동일, TF 만 다름(유일하게 깨끗한 비교):

TF거래월거래평균R거래당 Sharpe분산팽창유효/월2σ 확인
1h12,054153.4−0.020−0.01417.520.4불가
4h3,08139.8+0.054+0.03756.16.636년
12h1,04814.1+0.134+0.09206.42.218년
1d5598.6+0.149+0.10266.61.324년

거래는 17.9배 늘지만 거래당 Sharpe 가 그보다 빨리 죽는다(+0.103 → −0.014). 1h 는 평균R 이 음수라 확인이 불가능한 게 아니라 엣지 자체가 없다.잘게 쪼개도 확인이 빨라지지 않는다. 백필 프로젝트를 할 근거가 없다.

★내 1차 자동 판정이 자기 데이터와 모순됐다("유효 거래 15.7배 → 백필할 값어치 있다"). 판정 기준을 '유효 거래 수'로 잡은 게 잘못이고, 옳은 기준은 2σ 확인 소요 기간이다. 거래 수만 보면 늘 "잘게 쪼개는 게 좋다"가 나온다 — 엣지 감소를 못 보기 때문이다.

한계: 6종목 · 폭 게이트 제외(6종목으로는 폭이 성립 안 함) · 인샘플. 따라서 이건 배포 전략의 성과가 아니라 TF 축척 성질의 측정이다. 또한 REST 는 1000봉 상한이라 4h=91일 · 1h=23일치만 검정 가능하다 — 백필 없이는 애초에 불가.

㉙ 단기 TF 배포 시도 — 12h 는 검정 불가 · 4h 는 검정했고 미달 (2026-08-07)

배포하려면 1d 가 받은 잣대(⑱ 군집/기하 보존 위약 · 4분할 · 영점)를 똑같이 받아야 한다. "1d 가 통과했으니 되겠지"는 근거가 아니다. 그래서 걸었다.

4h — 표본이 나와 판정됐고, 떨어졌다:

분할거래실제R위약R초과P부호
전체108+0.097+0.242−0.1450.240X
A 시간 후반53+0.321+0.314+0.0080.510OK
B 짝수70+0.149+0.345−0.1960.255X
B 홀수38표본 부족

영점은 평균 P 0.500 · P≥0.975 2.5% 로 교과서적으로 정확했다 — 검정은 멀쩡했고 전략이 떨어졌다. 전체 초과가 음수(−0.145) — 군집·기하를 맞춘 무작위 진입보다 나쁘다. ★단 표본이 얇다(108건 · 167일 · B 홀수는 판정 불가). "유의하게 나쁘다"가 아니라 "엣지의 증거가 없고 점추정은 음수" 가 정확한 표현이다. ㉘이 독립적으로 4h 를 최악 (2σ 36년, 1d 24년보다 오래)으로 꼽은 것과 같은 방향이다 — 두 줄기가 일치한다.

12h — 데이터가 없어 검정 자체가 불가능:

㉙-a 12h 상세

㉘에서 12h 의 2σ 소요가 18년으로 1d(24년)보다 짧아 "12h 도 돌리자"는 요구가 나왔다. 배포하려면 1d 가 받은 잣대(⑱ 군집/기하 보존 위약 · 4분할 · 영점)를 똑같이 받아야 한다. 검정 안 된 변형 배포가 이 저장소의 단골 실패이기 때문이다. 그래서 먼저 걸었다 — 못 걸었다.

규칙결과
B1 봉 등가룩백 55봉 · SMA200봉 · 지평 200봉신호 61건 → 표본 부족(<100), 판정 안 함
B2 시간 등가룩백 110봉 · SMA400봉 · 지평 400봉경계 산출조차 불가(폭 유효 100봉)

원인은 데이터다. REST 12h 상한 1000봉 = 500일(1d 검정 2,519일의 20%). 워밍업(SMA)+룩백+지평이 표본을 거의 다 먹는다:

B1: 200+55+200 = 455봉 소모 → 남는 544봉에서 폭 mid 게이트까지 걸면 신호 61건
B2: 400+110+400 = 910봉 소모 → 남는 89봉. 경계(200개 필요)도 못 만든다

12h 를 검정하려면 백필이 선행돼야 한다(25종목 × 5,000봉). 4h 는 더 심하다 — REST 1000봉 = 167일뿐이고, 시간 등가(B2 330/1200/1200)는 신호 0건이었다. 그런데 ㉘이 이미 말했다: 12h 의 이점(18년 vs 24년)은 표본 노이즈 범위이고 둘 다 실용적이지 않다. 백필 비용 대비 얻는 게 없다.12h·4h 모두 배포하지 않는다. 1d 유지.

단기 TF 정리 (㉘+㉙ 종합)

TF㉘ 2σ 소요㉙ 배포 규칙 판정결론
1h불가(평균R 음수)엣지 없음
4h36년(최악)미달(전체 초과 −0.145)기각
12h18년검정 불가(신호 61건)백필 필요, 이점 미미
1d24년통과(⑱ 4분할)유지
두 독립적 잣대(정보 축척 · 배포 규칙 판정)가 같은 결론을 낸다.

★"1d 가 통과했으니 12h 도 되겠지"는 근거가 아니다 — 그래서 걸어 봤고, 걸 수 없음을 확인했다.

★★전방 관측 체크리스트 — 두 트랙 가동 중(2026-08-06 시작). 잊지 말 것

#확인 항목왜 중요한가언제
1두 트랙의 실현 상관 ρ⑲의 ρ=+0.0132 는 백테스트 값이다. 유효 베팅 2.8→5.6 (버킷 65%→70%)의 유일한 전제가 이것이고, 전방에서 깨지면 재설정한 목표 자체가 무너진다일수익 60일 쌓이면 1차, 이후 매월
2순노셔널 0 유지(모멘텀)달러 중립이 깨지면 베타가 새어 들어와 상관이 올라간다매주
3리밸런스 7일 주기 준수주기가 밀리면 검정한 규칙이 아니다매주
4돌파 신호 발생 시 정상 진입월 4건이라 첫 진입까지 시간이 걸린다 — 침묵을 고장과 구별해야 한다신호 발생 시
52개월 버킷 판정궁극목표 지표. 모멘텀이 먼저 판정 가능(일수익이 매일 쌓임)버킷 마감마다

1번이 압도적으로 중요하다. 나머지는 작동 점검이고, 1번은 전략 설계의 전제 검증이다. ρ 가 0.3 을 넘으면 유효 베팅이 5.6 → 4.3 으로 떨어져 이론 버킷이 70% → 68% 가 된다. 0.6 을 넘으면 결합의 의미가 거의 사라진다(2/(1+0.6) = 3.5 → 유효 베팅 3.5).

전방 관측 시작   2026-08-06
1차 상관 점검    일수익 60일 확보 시점(≈ 2026-10 초)
버킷 첫 판정     2026-09-01 (2026년 4번째 2개월 버킷 마감)

★2026-08-07 갱신 — 세 트랙이 됐다(T3 비유동성 추가, ㊳). 위 표에 아래를 더한다. 가동 스위치는 QC_ILLIQ_LIVE=1(선택: QC_ILLIQ_STATE · QC_ILLIQ_HALT).

#확인 항목왜 중요한가언제
6T3 가 실제로 도는가/paper-illiquidity/summarydays>0 · 롱5/숏5 · 순노셔널 0앞서 배포 코드만 고장나 조용히 안 도는 사고가 있었다(⑳-전). 첫날 확인이 전부다배포 다음날
7세 트랙 상관 행렬(1번의 확장)㊲의 백테스트 상관(+0.115/−0.034/+0.028)이 전방에서 유지되는가. T3 의 존재 이유가 이것뿐이다1번과 같은 시점
8T3 의 실현 비용 vs 가정우리는 K=96(rank67 실측 최악)을 가정했다. 페이퍼는 체결을 안 하므로 이 항목은 페이퍼로 검증되지 않는다 — 실계좌 전 별도 확인이 필요하다는 사실을 기록해 둔다실계좌 검토 시
9T3 리밸런스 7일 주기 · no_names 스킵 발생 여부㊳에서 잡은 버그 2개가 정확히 이 자리에서 났다매주
10꼬리 개선이 실제로 나타나는가㊲ 기준 T3 의 값어치는 승률이 아니라 최악 버킷이다(−9.62→−7.30%). 승률로 판정하면 오독한다버킷 마감마다

㉚ 옛 문서 재검토 — CONFLUENCE_RESEARCH · STRATEGY_HANDOFF (2026-08-07)

두 문서에 원장이 놓친 것이 있었다. 전수 대조했다.

★대전제 하나를 먼저 못박는다. STRATEGY_HANDOFF(2026-07-17)가 기술하는 A안 시스템의 성적(버킷 29/39·Sharpe 1.23·+519%)과 채택/기각 판정은 ⑩이 무효화한 방법론으로 나왔다: · 대조군 채널이 미래참조(29개 중 28개 스크립트) — 돌파 3회 기각이 가짜 기준선에 진 것 · 판정 관문이 z≥2 — 연 41% 미만은 원리적으로 통과 불가(진짜 +20% 엣지의 검정력 14%) · 위약이 시간 군집·기하를 안 맞춤(⑰⑱: 귀무 폭 1.87배 차이) ⇒ 그 문서의 성적을 인용하지 않는다. 전략 아이디어만 꺼내 쓰고 판정은 새로 받는다.

A. 원장에 아예 없던 것 (실제 누락)

전략/기법옛 문서 주장새 규칙 상태쓸 만한가
베어숏북(곰장 전용 숏)확정하락+매크로곰+초입(age≤12)에서만 숏. "늦은 숏=바닥 숏"미검정 — 재검토 ⑨~㉙에 한 번도 안 올라옴후보. 롱온리(㉒ 유효베팅 2.8)의 정반대 노출이라 상관이 낮을 여지. 단 ㉓에서 "같은 시장 헤지"는 막혔으므로 독립 신호로서만 의미
ADX/DMI 레짐 스위칭trend_up/down/range/neutral 4국면 → 전략 매칭미검정(⑳은 BTC/SMA200·변동성으로 쟀지 ADX 로는 안 잼)보류. ⑳이 이미 "국면은 최근 감쇠를 설명 못 한다"를 보였다
매크로 곰 게이트(종가<EMA200 & EMA200 기울기↓)롱 전면 금지미검정⑳의 ①BTC/SMA200 분위와 같은 축. 상위분위 초과 +0.376 이었으므로 방향은 일치

B. 방법론 — ★내가 이번 세션에 독립적으로 재발견한 것

CONFLUENCE §2.1: "상관된 지표를 여러 개 고르면 전부 같은 걸 재게 되어 confluence 착시" = ㉒의 유효 독립 베팅(분산 팽창 12배 → 34건이 유효 2.8건)과 같은 원리다. 문서는 "지표 상관"에서, 나는 "포지션 상관"에서 도달했다. 서로 다른 두 경로가 만난다 — 이건 우연이 아니라 원리가 맞다는 방증이다. 다만 정량화는 ㉒ 쪽이 낫다(배수로 잰다).

아이디어상태판단
trigger 1 + guard 多(Freqtrade)이미 부분 적용됨폭 돌파가 정확히 이 구조다 — trigger=돈치안 돌파, guard=폭 mid 분위. 이름만 안 붙였을 뿐. 추가 guard 를 얹는 건 금지(㉖: 필터 추가는 과적합)
진입 AND / 청산 OR 비대칭미검정㉖에서 청산 격자 18칸 Sharpe 가 평평했다(1.12배 천장). 청산을 민감하게 해도 거래당 Sharpe 를 못 올린다는 실측이 있으므로 우선순위 낮음
top-down 다중 TF(1d 방향 → 4h 진입)미검정㉘·㉙이 4h 단독을 기각했지 top-down 을 기각한 건 아니다. 유일하게 살아 있는 TF 아이디어. 단 정렬 누수 위험이 크고 데이터(4h 167일)가 모자란다
거래량 = 필수 차원(공리)문서와 실측이 충돌문서는 공리로 두지만 실측은 5각도 전부 기각(거래량 게이트 H+ 6종·CVD 22단계·프로파일). 공리가 아니라 기각된 가설이다. 문서 쪽을 정정해야 한다
매물대 = 청산/veto 전용시도됨·실패V3 에서 진입도 청산도 A안을 못 이겼다(HVN 청산 순기여 −4.97x). 문서의 계획은 이미 실행됐고 죽었다

C. 이미 원장에 있고 상태가 바뀐 것

Triple RSI+50EMA(유지) · BB+CCI(기각) · 돈치안(무조건 탈락→폭 조건부 채택) · 펀딩 조기청산(채택) · 추세 품질 ADX 상승(채택) · MACD/스토캐스틱(미구현·상관 이유로 제외) → 변동 없음. 단 위 대전제대로 채택 3건의 근거도 옛 방법론이라 재판정 대상이다.

㉛~㉟ /docs 전수 재발굴 — 살아 있는 후보 하나를 건졌다 (2026-08-07)

★내 잘못을 먼저 적는다. 앞선 세션에서 "docs 전부 탐색했다"고 보고했지만 실제로는 이미 읽은 것만 정리했다. 그래서 ㉚에서 뒤늦게 새 내용이 나왔고, 사용자가 정당하게 지적했다. 이번엔 88개 .md기계적으로 열거해 전략·지표 용어를 추출하고 원장과 대조했다. 이 절이 그 전수 기록이다 — 다시 뒤질 필요 없다.

㉛ 베어숏북 첫 검정 — 0/4 미달, 그런데 미달의 모양이 단서였다

㉚에서 "재검토 ⑨~㉙이 전부 롱이었다"를 확인하고 숏을 처음 검정했다. 설계에서 하나를 뺐다 — 내 ㉚ 제안의 "하락 초입 age≤12봉"은 CLAUDE.md §9 금지 항목 (시간 기반 숏 게이트)이라 그대로 넣으면 부검된 실수의 반복이다.

변형신호평균R(펀딩 후)전체 Pz판정
S0 게이트 없음1,860−0.0930.075−1.37미달
S1 매크로 곰1,126−0.2230.005−2.75미달
S2 곰+폭 중간363−0.0850.305−0.48미달
S3 곰+폭 하위737−0.2910.000−3.32미달

무엣지가 아니라 위약보다 유의하게 나빴다. 같은 신호·같은 기하·같은 시각 분포의 무작위 진입보다 나쁘다는 건 그 시점에 정보가 있고 부호가 반대라는 뜻이다.

㉜ 부호를 뒤집었다 — L3 통과 (곰장 자본항복 되돌림)

바꾼 것은 방향 한 비트와 펀딩 부호뿐. 신호·손절거리·위약 규약은 ㉛과 한 글자도 같다.

변형거래평균R(펀딩 후)전체 PzA 시간후반 z판정
L0 게이트 없음1,860+0.0340.410−0.16−0.80미달
L1 매크로 곰1,126+0.1880.9651.942.14통과
L2 곰+폭 중간363+0.0150.420−0.28−0.47미달
L3 곰+폭 하위737+0.2861.0002.803.45통과

영점 전부 정상(평균 P 0.500 · P≥0.975 2.5%). 누적 시행 8(㉛ 4 + ㉜ 4). 기제: 매크로 곰 + 폭 하위(=유니버스 대부분이 SMA200 아래) + 55일 신저가 = 자본항복. 거기서 산다. 배포 돌파(폭 중간=소진 회피)와 같은 원리의 반대편이다. 그리고 [[breakout-no-edge]]("되돌림만 엣지")와도 어긋나지 않는다 — 이건 돌파가 아니라 회귀다.

㉞ 강건성 — 통과가 무엇으로 만들어졌는지 (전부 통과)

검사결과판정
A 연도2021 +2.00 · 2022 +0.19 · 2023 +1.33 · 2024 +1.10 · 2025 −0.02 → 4/5 양수OK
B 잭나이프종목 하나씩 제거 시 [+0.2635, +0.3072] — 범위가 매우 좁다 · 종목별 20/25 양수OK
C 군집분산팽창 14.63배 → 유효 독립 50.4건 · 유효 t 1.37OK(≥20)
D 꼬리상위 5건이 총합의 4.8% · 승률 43.1% · 중앙값 −1.00R(RR2 구조상 정상)OK
E 생존편향 대리진입 후 200봉 내 −50% 추가 하락 39.9% — 그런데도 평균 +0.29R편향만은 아니다
F 배포와 겹침L3 발화 136일 · 폭중간 발화 89일 · 교집합 0일구조적 배타

생존 편향은 이 검사로 제거되지 않는다. 상폐 종목은 애초에 표본에 없고, "바닥에서 산다"는 이 편향의 최대 수혜자다. E 의 39.9% 는 하한이다. 전방만이 가른다.

㉟ 보완성 — ★사전선언 게이트 미달. 배포하지 않는다

사전 기준: 합산의 음수 버킷이 줄고 그리고 최악 버킷이 덜 나빠져야 보완재.

지표돌파 단독L3 단독합산사전기준
음수 버킷10/282/287/28✅ 개선
최악 버킷−30.3R−61.5R−61.5R악화
버킷 승률57.1%39.3%75.0%(기준 아님)
버킷 상관 ρ+0.107사실상 독립

돌파가 음(−)인 10버킷 중 5개를 L3 이 덮었다(그 구간 L3 +183.2R vs 돌파 −110.2R). 그런데 L3 자신의 최악 버킷 2022-H3(5~6월, LUNA·3AC 붕괴) −61.5R 이 합산 최악을 만든다. 그때 돌파는 신호가 0 이라 상쇄가 없다.

게이트는 내가 사전에 선언했고 실패했다. 기준을 고쳐 통과시키지 않는다. 버킷 승률 57%→75% 는 크지만 그건 내가 선언한 기준이 아니다. 다음 단계는 "사이징으로 2022-H3 을 눌러본다"가 되겠지만, 그건 새 사전선언이 필요한 새 질문 이며 과거 표를 초록칠하는 방식으로 하면 안 된다(CLAUDE.md §9).

현재 상태: L3 = 검정 통과 · 배포 보류. 다음은 전방(페이퍼) 관측 대상 후보이지 지금 자본을 붙일 물건이 아니다.

㉝ 횡단면 부활 4종 — X3 비유동성 프리미엄 통과 (시행 N=4, 스윕 없음)

rank68 이 "6종목뿐"·"베타 노출"로 탈락시킨 계열들을 달러중립 형태로 되살렸다. 껍데기는 배포 모멘텀과 동일(상·하위 20% · hold 7 · 같은 비용·펀딩). 바뀌는 건 줄세우는 점수 하나. 위약은 횡단면에 맞게 같은 날 안에서 종목 라벨만 셔플(수익분포·기하·회전·펀딩 보존).

신호연 gross연 netSharpe버킷최악전체 P판정
X1 단기반전(−7일수익)−29.76%−32.75%−0.9816/42−38.2%0.005미달
X2 저변동성(−30일σ)−11.09%−11.90%−0.3019/42−51.5%0.255미달
X3 비유동성(−log ADV)+23.37%+23.13%0.8924/42−12.1%0.980통과
X4 저베타(−60일β)+3.64%+3.11%0.0922/42−28.6%0.745미달

영점 4건 전부 정상. X1 은 유의하게 음수 — 즉 7일 연속(반전이 아니라 모멘텀) 쪽에 부호가 있다. 배포 모멘텀이 skip=1 로 이 구간을 피하는 것이 옳았다는 확인이지 새 수익원이 아니다.

㊱ X3 비용 스트레스 — 통과. 가장 의심스러운 자리를 먼저 쳤다

X3 은 정의상 가장 안 팔리는 종목을 산다. 그런데 ㉝의 비용은 전 종목 일률 8bp 였다. rank67 실측은 "알트 스프레드가 BTC 의 41~96배". 종목별 비용(로그 ADV 보간)으로 다시 물렸다.

최저유동 비용배수 K×1×10×41×96×200손익분기
연 net+23.13%+22.32%+20.59%+18.25%+14.59%×728

손익분기 728배 — 실측 최악(96배)의 7.6배 여유. 이유도 설명된다: 연 회전 6.22배뿐 (ADV 순위가 느리게 움직여 거의 안 갈아탄다). ㉕의 "회전 감축이 자산" 원리와 같은 자리다. ㉝에서 에러로 못 돌린 상관 관문도 여기서 갚았다 — 배포 모멘텀과 ρ = −0.130(독립).

㊲ 세 트랙 합산 — ★목표 70% 에 못 미친다. 50.0% 다

동일비중 1/3(사이징 최적화 금지). T3 는 보수적으로 K=96 비용을 물렸다.

계열버킷 승률음수 버킷최악하위3 평균
T1 돌파 단독38.1%26/42−11.23%−8.24%
T2 모멘텀 단독52.4%20/42−19.12%−15.68%
T3 비유동 단독50.0%21/42−12.17%−11.18%
T1+T2 (현 배포)52.4%20/42−9.62%−8.83%
★T1+T2+T350.0%21/42−7.30%−6.38%

상관: T1–T2 +0.115 · T1–T3 −0.034 · T2–T3 +0.028 — 셋 다 사실상 독립.

정직한 읽기 세 가지.

  1. 내 사전 게이트는 T1 단독 대비였고 통과했다(38.1%→50.0%). 그러나 실제 의사결정 기준은 현 배포 T1+T2 이고, 거기 대비하면 승률은 52.4%→50.0% 로 오히려 내려간다. 개선된 것은 꼬리뿐이다(최악 −9.62→−7.30%, 하위3 −8.83→−6.38%).
  2. ㉖의 투영이 빗나갔다. "수익원 1개 추가 ≈ 70%"는 추가되는 수익원의 거래당 Sharpe 가 비슷하다고 가정했다. 실제로 무상관 계열을 섞으면 버킷 분산은 줄지만 평균은 안 오른다 — Φ(평균/σ) 에서 분모만 건드린 것이라, 평균이 작으면 승률이 크게 안 오른다. ⇒ 남은 레버는 "수익원 수"가 아니라 "버킷 평균 수익"이다. 이건 ㉖이 천장(1.12배)을 확인한 그 레버와 같다. 즉 현재 우리가 아는 방법으로는 70% 경로가 열려 있지 않다.
  3. T1 단독 38.1% 는 ㉟의 "57.1%"와 모순이 아니다 — ㉟은 거래가 있던 28버킷의 R 합 기준, 여기는 전체 42버킷 기준이라 무거래 버킷(15개)이 0% = 비승리로 잡힌다. 목표가 "버킷마다 자본 (+)"이므로 후자가 맞는 셈법이다.

현재 상태: X3 = 검정·비용 스트레스 통과 · 배포는 사용자 판단. 붙이면 꼬리가 얇아지고 승률은 제자리다. 인샘플이며 T3 는 이 표본에서 골라졌다 — 가설이지 성과가 아니다.

㊳ X3 배포 — 정합 검사가 버그 두 개를 또 잡았다 (2026-08-07)

사용자 지시로 X3 를 세 번째 페이퍼 트랙으로 붙였다. 배포 전 필수 관문(원장 규칙 10·11)에서:

검사사전 기준결과
A 추출 정합㊱ net 계열과 완전 일치일치(+18.2535% 소수점까지)
B 후행 창 비용연 net 차이 3%p 미만−0.01%p (㊱의 전표본 중앙 ADV 는 미래참조 → 배포는 후행 30일)
C 위상 민감도7위상 전부 양수7/7 · 범위 [+17.09%, +21.83%]
D 엔진 재생상관>0.999 · 연평균차<0.001%p사전 기준 미달(0.9932) — 아래 참조
E D 잔차 진단(추가 진단)규약 맞춘 뒤 1.000000 — 잔차는 전부 회계 칸 차이

★잡은 버그 2개 (둘 다 배포됐으면 검정과 다른 물건이 굴러갔다):

  1. 리밸런스 위상 표류 — 조건에 or not weights 가 있어, 초기에 이름이 모자란 동안 매일 재시도하다가 이름이 처음 생긴 날에 위상이 박혔다. 엔진 167, 174, 223… vs 검정 70, 77, …, 168, 175…하루 어긋났고, C 가 잰 위상 감도(연 17.1~21.8%)만큼 성과가 통째로 달라진다. → 첫 회만 sentinel 로 열고 이후는 주기로만 판단.
  2. 이름 부족 시 행동 불일치 — 리밸런스일에 유효 종목 < 10 이면 검정(㉝ rank_w)은 평평하게 가는데 엔진은 옛 비중을 그대로 들고 있었다(174→223 구멍). 검정된 적 없는 전략이다. → 같이 평평하게 간다. 고친 뒤 연 평균차 4.02%p → 0.0000%p.

D 는 사전 기준을 못 넘었다. 그 사실을 지우지 않는다. 기준을 낮추는 대신 잔차의 정체를 밝혔다 — 엔진은 비용을 거래한 날에, 참조는 그 비용이 여는 수익과 같은 칸에 단다. 참조의 비용만 한 칸 옮겨 규약을 맞추자 상관 1.000000. 행동은 동일하고, 엔진 쪽이 물리적으로 옳다(비용은 거래한 날 낸다). 그래서 배포를 허용했다.

앞선 두 트랙에 같은 잠복 위험이 있다. momentum_paper 도 조건에 or not weights 를 두고, no_names 에서 옛 비중을 유지한다. ㉗ 정합은 통과했으므로 우리 표본에서는 발동하지 않았다 — 그러나 유니버스가 얇아지는 날 발동할 수 있다. 라이브 트랙을 사용자 확인 없이 손대지 않았다. 정정 여부는 사용자 판단 대기.

배포물: strategies/xsec_illiquidity.py · live/illiquidity_paper.py · live/illiquidity_runner.py(자정+240s) · /paper-illiquidity/{summary,positions,equity} · 유닛테스트 18건. 사이징 ×0.66(㉝ 전방 분할 P 0.830 → 2P−1) · 비용 K=96(rank67 실측 최악). 가동 스위치는 QC_ILLIQ_LIVE=1 — 사용자가 등록해야 돈다.

㊳-b 모멘텀 트랙 소급 수정 (2026-08-07) — 잠복 버그 제거

㊳에서 비유동성 트랙에 있던 두 결함이 momentum_paper 에도 있음을 확인하고 소급 적용했다 (규칙 14: 추정기를 바꾸면 이미 판정한 것에 전부 적용한다). 검정 쪽(xsec_momentum_oos.daily_returns:73)은 이름이 모자라면 w = zeros평평하게 간다 — 엔진만 옛 비중을 들고 있었다. 우리 표본에서는 발동하지 않았지만 유니버스가 얇아지면 발동한다. 수정 후 ㉗ 정합 재확인: 상관 0.999951 · 연 평균차 0.0063%p · 자카드 1.000 — 깨지지 않았다. 회귀 테스트 2건 추가(주기 정확성 · 이름 부족 시 평평).

㊴ 유니버스 25→52 — ★세 트랙 전부 미채택. 폭 레버는 닫혀 있다 (2026-08-07)

㊲가 남긴 질문("평균 수익을 올릴 레버가 있나")에 대한 답을 구했다.

㊴-a 확대 규칙 (사전선언 · 성과 미참조) — 기존 규칙에서 임계 하나만 낮췄다. 거래대금 하한 $20M → $3M, 나머지 전부 동일, 조건 만족 전부(자르면 그게 선택이다). 결과 52종목 = 기존 25 + 신규 27, 빠진 종목 0(완전한 상위집합 → 유일하게 깨끗한 비교). 일봉·펀딩 이력 전부 확보(52/52). 폭 경계 재산출(같은 창 2019-09-08~2023-02-17): lo 0.1333 · hi 0.7333(25종목은 0.1364/0.7826) — 유니버스가 바뀌면 폭 분포가 바뀐다. 가동 중 트랙이 쓰는 config/breadth_boundaries.json건드리지 않았다(별도 파일).

★㊴-b 에서 내 귀무분포가 고장났다 — 먼저 신고한다. T3 위약 연수익이 −62.78%(25) · −89.25%(52), z 7.88·12.20 이 나왔다. 물리적으로 불가능한 크기다. 원인: 라벨 셔플은 회전율을 보존하지 않는다. 회전율 실측 —

실제위약배수
T3 25종목6.5배/년83.5배/년12.8배
T3 52종목9.2배/년84.5배/년9.2배

ADV 순위는 느리게 움직여 실제 회전이 낮은데, 섞으면 매 리밸런스마다 전량 교체된다. 거기에 K=96 종목별 비용이 곱해지니 위약이 비용만으로 죽는다. z 는 엣지가 아니라 "누가 덜 거래하는가"를 재고 있었다. ㉝의 사전선언에 "회전율 보존"이라 적었는데 틀린 선언이었다 (㉝은 일률 8bp 라 왜곡이 작았지만 0 은 아니다 — 연 약 4%p, 초과 +24.94%p 의 약 1/6). 영점 조정이 못 잡은 이유도 분명하다 — 영점은 위약 vs 위약이고 양쪽 다 고회전이다. 원장 규칙 12("영점 통과 ≠ 귀무분포가 옳다")의 교과서적 사례다. 수리(㊴-c): 위약 비교를 gross 로 한다. 기준 완화가 아니라 질문의 분리다(규칙 ⑧) — 신호 판정은 gross, 비용 감내는 ㊱의 K 스윕(실제 회전으로 손익분기 K=728)이 따로 답한다.

㊴-c 횡단면 두 트랙 (gross · 회전 왜곡 제거 후) — H1: Sharpe(52)/Sharpe(25) ≥ 1.20 (이론 1.44)

트랙Sharpe 25Sharpe 52배수25 판정52 판정H1
T2 모멘텀0.6540.4970.76통과미달(짝수종목 −0.82%)
T3 비유동성0.8630.7510.87통과통과

㊴-d 돌파 (기제가 다르다 — 랭킹 폭이 아니라 신호 수) — H2: 버킷당 유효 독립 거래 ≥ 1.5배

지표25종목52종목
거래 수8881,5951.80배
분산 팽창11.99배22.81배상관이 더 올랐다
버킷당 유효 독립 거래2.852.690.94배
평균 R+0.331+0.210희석
버킷 승률61.5%50.0%악화
최악 버킷−30.3R−66.5R악화

52 판도 위약 대조는 통과했다(P 0.985) — 엣지가 사라진 게 아니라 희석된 것이다.

★★세 트랙 전부 미채택. 그리고 이유가 하나다. 거래는 1.80배 늘었는데 유효 독립 거래는 0.94배다. 분산 팽창이 12.0 → 22.8 로 올랐다. 크립토 종목은 서로 0.6~0.9 로 동조하므로(rank65 히트맵) 종목을 더해도 독립 정보가 안 는다. 새 종목은 상관된 잡음을 들고 온다.

★이건 네 번째 같은 벽이다. 우리는 같은 것을 네 축에서 만났다:  지표(㉒ 분산팽창 12배) · TF(㉘ 잘게 쪼개도 확인 안 빨라짐) · 수익원(㊲ σ만 줄고 평균 그대로) ·  종목(㊴ 거래 1.8배인데 유효 0.94배) 네 번 다 "양을 늘리면 정보가 는다"는 가정이 깨졌다. 우리 병목은 양이 아니라 IC(신호의 질)다. ⇒ 다음 탐색은 양을 늘리는 방향으로 가면 안 된다. 그건 이미 네 번 닫혔다.

보존물: docs/breakout_universe_50.json · config/breadth_boundaries_50.json · 52종목 일봉·펀딩 캐시. 미채택이지만 데이터는 남긴다 — 다시 뽑을 이유가 없다.

㊵ AFML 전수 감사 + ch.19 첫 착수 (2026-08-07)

사용자 지적으로 docs/history/…AFML….md 를 제목이 아니라 본문으로 다시 읽고, AFML 기법이 코드에 실제로 있는지 전수 감사했다(기억이 아니라 grep).

AFML 장기법우리 상태
ch.2달러바 · 동적 임계(ADV 연동)구현 · A/B 완패(일봉등가 Sharpe 0.66 vs 1.23)
ch.3삼중 장벽 · 변동성 조정구현 · 현행 전략이 사용 중(ATR 기반 장벽)
ch.3메타라벨링구현 · AUC 0.49 기각
ch.4표본 고유성(concurrency 가중)labeling/sample_weights.py 구현됨
ch.7Purged K-Fold · 엠바고 · CPCVvalidation/{cpcv,purged_kfold}.py 구현됨
ch.10확률 기반 베팅 사이징구현 · 세 트랙 전부 f = 2P−1 사용 중
ch.14–15DSR · PBO구현됨
ch.5분수 차분(FFD)미착수
ch.17구조 변화 탐지(SADF · CUSUM)미착수
ch.18엔트로피 피처미착수
ch.19마이크로스트럭처 추정량❌ 미착수 → ㊵에서 착수

감사의 결론이 정확히 우리 문제를 가리킨다. 구현된 것은 전부 검증(과적합 방지) 쪽이고, 미착수는 전부 신호의 질(IC) 쪽이다. ㊴에서 확정한 병목이 IC 다. 막힌 곳과 안 한 곳이 겹친다. ch.19 부터 연 이유: 네 장 중 데이터 벽이 없는 유일한 장이다(고가/저가/거래대금만 쓴다).

★이 문서 자체의 결함도 적어 둔다 — 베팅 사이징 표("고정 165만 → 프라도식 250~400만")는 근거 없는 숫자이고 배수 보고 금지(CLAUDE.md §9) 위반이다. "상위 1% 헤지펀드와 똑같은 길" 같은 문장도 과확신 금지 위반이다. 아이디어만 꺼내 쓰고 수치·평가는 인용하지 않는다.

A. 가정하던 비용을 측정하려 했다 — ★실패. CS 추정량은 우리 자산에 못 쓴다 ㊱은 종목별 비용 배수 K=96 을 가정했다(rank67 L1 실측 41~96배 중 최악값). Corwin-Schultz(2012)는 고가/저가만으로 유효 스프레드를 추정한다 — 우리가 가진 데이터다.

종목CS 유효 스프레드(중앙)BTC 대비
COTIUSDT173.7bp2.5x
ETHUSDT94.2bp1.4x
BTCUSDT69.0bp1.0x
TRXUSDT61.6bp0.9x

BTC 69bp 는 명백히 틀렸다. BTC 무기한의 실제 테이커 스프레드는 1bp 안팎이다 — 약 70배 과대. CS 는 고가-저가 범위를 스프레드와 변동성으로 분해하는데, 고변동 자산에서는 그 분해가 무너진다. 즉 이 숫자는 스프레드가 아니라 일중 변동폭을 재고 있다. 그리고 배수도 ×2.5 로 rank67 의 L1 실측 41~96배와 40배 어긋난다.

원장 규칙 13("추정기가 서로 다른 답을 주면 그게 단서다") 적용: 유리한 쪽을 고르지 않는다. 둘은 다른 것을 재고 있다 — rank67 은 특정 시점의 호가 스프레드, CS 는 일중 범위 잔차. ⇒ CS 는 L2 벽을 못 뚫는다. ㊱의 K=96 은 여전히 가정이며, rank67 L1 실측이 최선의 근거다. 이 항목은 닫는다(다시 시도 금지).

B. T3 의 점수를 바꿨다 — ★Amihud 가 원시 ADV 를 이긴다 껍데기(달러중립·상하위 20%·hold 7)는 그대로, 줄세우는 점수 하나만 바꿨다. 시행 N=2 추가.

점수연 grossSharpeS0 대비회전버킷최악전체 P위약
S0 현행 ADV(−log 거래대금)+22.56%0.8631.006.5배22/42−12.69%0.980통과
S1 Amihud(|r|/거래대금)+32.74%0.9921.155.1배21/42−16.07%1.000(z 3.12)통과
S2 CS 유효 스프레드+9.16%0.2730.3224.1배17/42−33.59%0.850미달(홀수종목 −12.05%)

Amihud 는 연수익·Sharpe·회전율 세 축 모두 현행보다 낫다. 회전이 오히려 줄었다(6.5→5.1)는 점이 중요하다 — 비용에 더 강하다는 뜻이고, ㊱의 손익분기 여유가 더 커진다.

★★이 세션에서 처음으로 레버가 움직였다. 양(量)은 네 축에서 전부 닫혔는데 (지표 ㉒ · TF ㉘ · 수익원 ㊲ · 종목 ㊴), 질(質)을 건드리자 Sharpe 가 1.15배 올랐다. "병목은 IC"라는 ㊴의 결론과 정확히 맞는 방향의 첫 증거다.

★그러나 채택이 아니라 후보다. 정직히 남길 것: · 인샘플이고 누적 시행이 크다 · A 시간 후반 분할이 약하다(P 0.770 · z 0.74 — S0 도 0.685) · 최악 버킷이 나빠졌다(−12.69% → −16.07%) · 버킷 개수도 22→21 · 즉 평균은 올랐고 꼬리는 나빠졌다. T3 를 붙인 이유가 꼬리였는데(㊲) 그 부분이 상충한다. ⇒ 교체는 전방 판정 뒤에 한다. 지금 가동 중인 T3 는 ADV 판 그대로 둔다.

다음에 열 AFML 장 — ch.19 는 절반 열렸다(Amihud 성공 · CS 실패). 남은 셋 중 우선순위:

  1. ch.5 분수 차분(FFD) — 정상성과 기억을 동시에 남기는 유일한 변환. 우리 피처는 수준(비정상) 아니면 수익률(기억 없음)뿐이다. IC 를 직접 겨냥하는 정공법이며 데이터 벽이 없다.
  2. ch.17 구조 변화(SADF) — 레짐을 통계적으로 잡는다. CLAUDE.md 는 손으로 고른 ADX 임계 스위칭을 금지하지만 레짐을 조건변수로 쓰는 것은 허용한다(FEATURES §3.10). SADF 가 그 원칙 있는 판이다.
  3. ch.18 엔트로피 — 후순위(해석·검정 설계가 무겁다).

㊶ AFML ch.5 분수 차분(FFD) — ★미채택. 이 경로는 닫는다 (2026-08-07)

㊵에서 질(質) 레버가 처음 움직였으므로 그 방향의 정공법을 쳤다. 논지: 가격 수준은 기억은 있으나 비정상 · 수익률(d=1)은 정상이나 기억이 0 · FFD(0<d<1)는 정상성을 얻는 최소한만 차분한다. 우리 모멘텀 점수는 d=1 차분을 30일 창에 가둔 것이라 30일 밖 기억이 통째로 0 이다. 그 손실을 되찾는 게 목표였다.

A d 선택 (★동결 학습창에서만 — 전 표본을 보면 미래참조)* d ∈ {0, .05, …, 1.0} 중 ADF < −2.86 을 만족하는 최소 d. 결과 d 중앙 0.45* · 범위 [0.05, 1.00] · 기억 보존 corr 중앙 0.569. ⇒ AFML 의 주장 자체는 우리 데이터에서 성립한다 — d=0.45 면 정상성을 얻고 기억은 57% 남는다.

★1차 판에서 버그를 잡았다 — 학습창(2023-02 종료) 이후 상장 종목(INJ·LDO)은 그 창에 데이터가 없어 d 를 못 고르고 후퇴값 d=1.0(=일일 수익률, 창 길이 2)을 받았다. 같은 횡단면에 서로 다른 정의의 점수가 섞인 상태 — 랭킹 전략이 견딜 수 없다. 결과가 아니라 버그이므로 수리판을 만들어 둘 다 냈다(수리 방향은 파라미터를 25개→1개로 줄이는 쪽).

점수연 grossSharpeS0 대비회전위약
S0 현행 30일 수익+22.24%0.6541.0039.6배통과
S1 FFD 종목별 d*(결함판)+2.17%0.0980.155.9배미달(홀수종목 −5.33%)
S2 FFD 패널 단일 d(수리판)−1.41%−0.052−0.0810.2배미달(전체 P 0.415)

버그를 고쳤더니 더 나빠졌다. 결함이 원인이 아니었다 — FFD 정규화 수준을 횡단면 랭킹 점수로 쓰는 것 자체가 안 된다. S0 와의 횡단면 상관도 +0.090 — 아예 다른 것을 재고 있다.

닫는 범위를 정확히 적는다. 닫는 것은 "FFD 를 단독 랭킹 점수로 쓰는 것"이지 "FFD 자체"가 아니다. AFML 에서 FFD 의 본래 자리는 ML 모델의 입력 피처다. 우리 세 트랙은 전부 규칙 기반이라 점수로 줄세우는 방식으로만 시험할 수 있었다. 그 한계 안에서의 판정이다.

★★AFML 감사가 드러낸 구조적 사실 (㊵·㊶ 종합)

㊵(ch.19)과 ㊶(ch.5)을 붙여 보면 패턴이 보인다:

시험한 것성격결과
ch.19 Amihud직접 랭킹 가능한 측정량✅ Sharpe 1.15배
ch.19 Corwin-Schultz직접 랭킹 가능❌ 추정량이 우리 자산에 부적합(BTC 69bp)
ch.5 FFD원래는 ML 피처 — 억지로 랭킹에 씀❌ 0.15배·−0.08배

AFML 의 신호 절반(ch.5·17·18)은 대부분 "ML 모델의 입력"을 전제한다. 우리는 ML 경로를 접고 규칙 기반으로 왔기 때문에, 그 도구들을 원래 용법으로 쓸 그릇이 없다. 그런데 그릇은 이미 만들어져 있다validation/{cpcv,purged_kfold}.py · models/pipeline.py · labeling/sample_weights.py 가 전부 구현돼 있고 지금 안 쓰이고 있다.

★그래서 선택지가 둘로 갈린다. 둘 다 정직히 적어 둔다. (가) 규칙 기반 유지 — ch.19 Amihud 처럼 직접 랭킹 가능한 측정량만 계속 찾는다.   남은 후보: ch.19 Kyle λ · Roll 측도 · VPIN(테이커 델타 필요) · ch.17 SADF(레짐 조건변수).   장점: 지금 규율(위약·분할·영점)을 그대로 쓴다. 단점: AFML 의 대부분을 못 쓴다. (나) ML 경로 복귀 — 이미 있는 CPCV/엠바고/표본고유성 위에 FFD·엔트로피·SADF 를   피처로 얹어 메타라벨링을 다시 친다. 장점: AFML 을 원래 용법으로 쓴다.   단점: 메타라벨링은 이미 AUC 0.49 로 기각된 이력이 있고, 부활시키려면   그때 왜 실패했는지(피처 부족인가 라벨 문제인가)부터 부검해야 한다. 비용이 크다. ★이건 사람이 정할 방향 결정이다. 임의로 (나)로 넘어가지 않는다.

㊺ AFML 파이프라인 착수 — ★다섯 번 막혔던 벽이 뚫렸다 (2026-08-08)

사용자 지적: "내가 이론만 갖다주면 안 된다고만 한다. 시야를 넓게 가져라." — 맞았다. 나는 프라도의 기법을 기존 규칙 껍데기에 부품으로 갈아끼우는 식으로만 시험했다. AFML 은 부품 목록이 아니라 순서 있는 파이프라인이다. 순서대로 하니 결과가 달라졌다.

★먼저 — 지난 달러바 기각이 왜 무효였나 (두 가지)

  1. run_dollar_ab.py:5 "B) 일봉등가 달러바" — 표본 수를 설계로 고정했다. 달러바의 요점 중 하나가 표본 수·독립성인데 그 차원을 미리 제거하고 시험했다.
  2. ★더 근본적으로 — AFML 이 하지 않은 주장을 반증했다. 지난 A/B 는 전략 Sharpe (0.66 vs 1.23)를 비교하고 "이점 없음"이라 기록했다. 그런데 ch.2 는 "달러바를 쓰면 전략 수익이 는다"고 말한 적이 없다. 말하는 것은 표본의 통계적 성질이다.

㊺-1 분봉 백필 — 해상도를 미리 깎지 않았다

Data Vision 월별 덤프로 25종목 1m 확보. 78,308,304행 · 2.0GB. 커버리지 중앙 100%(최저 99.8%) · 타임스탬프 정상 25/25 · 중복 0 · 결측 대부분 0봉. ★함정 두 개를 미리 막았다: 헤더 유무 자동 판별 · 타임스탬프 단위(ms/µs) 정규화 (신형 선물 덤프는 마이크로초다. ms 로 착각하면 1970년으로 날아가고 조용히 틀린다). ※선물 아카이브가 2020-01 부터라 일봉 캐시(2019-09)보다 짧다.

㊺-2 동적 달러바 — ★AFML ch.2 의 주장이 우리 데이터에서 성립한다

임계 = ADV₇(후행) / k. 같은 봉 개수(k=1) 에서 캘린더 1d 와 정면 비교 — 봉 개수 효과가 아닌 순수 재료 효과.

지표캘린더 1d달러바 k=1
초과첨도(정규성)12.525.51✅ 56%↓
Jarque-Bera15,5103,321✅ 79%↓
전후반 분산비1.941.93
롤링 분산 CV0.960.86
Ljung-Box(10)30.222.6

5/5 개선. ch.2 가 주장한 정규성·등분산·독립성이 전부 좋아진다.

그리고 "잘게 썰수록 좋다"는 아니다 — k=1→16 에서 초과첨도가 5.51 → 8.80 → 10.45 → 24.62 → 34.50 으로 폭증한다. 퇴화 아티팩트가 아니다(k=16 에서도 봉당 1m 중앙 72개, 1분짜리 0.23%뿐). 잘게 썰면 점프 지배적이 되는 실제 성질이다. 재료 품질 최적은 k≈1.

㊺-3 파이프라인 — ★표본 벽이 뚫렸다

내가 빠뜨렸던 단계가 하나 더 있었다: ch.2.5 CUSUM 이벤트 필터. 우리는 표본을 "전략이 신호를 낸 곳"(돌파 888건)으로만 잡았다. AFML 은 누적 편차가 임계를 넘는 곳에서 뽑으라고 한다 — 조용한 구간을 안 세고, 표본이 시간에 고르게 퍼지고, 겹침이 준다.

구성: 달러바 k ∈ {1,2,4} → CUSUM(h = 후행 EWMA σ × g) → 삼중장벽(±1σ · 수직 20봉) → 전역 캘린더 고유성(㊷에서 종목별은 상한임을 확인했으므로 처음부터 정직한 쪽으로만).

구성CUSUM 표본평균 고유성유효 표본㊷ 기준선(74) 대비
k=1 g=211,0390.11881,31217.7배
k=2 g=222,5350.07551,70223.0배
k=4 g=326,8140.07451,99927.0배

검정력이 완전히 달라진다:

구성유효 표본검출 가능 최소 AUCAUC 0.55 검정력
㊷ 일봉 돌파740.611118.1%
㊺-3 k=1 g=21,3120.526293.3%
㊺-3 k=4 g=31,9990.521298.7%

★★다섯 번 막혔던 벽(지표 ㉒ · TF ㉘ · 수익원 ㊲ · 종목 ㊴ · ML 표본 ㊷)이 여섯 번째에 뚫렸다. 뚫은 방법이 프라도의 처방 그대로다. 우리가 안 한 것은 그의 이론이 아니라 그의 순서였다. 부품을 갈아끼우지 않고 파이프라인을 세우자 같은 시장에서 유효 표본이 74 → 2,000 이 나왔다.

★정직하게 남길 것: · 이건 재료 검사다. 이 표본에 엣지가 있는지는 아직 판정 안 했다. · 74 와 1,999 는 다른 질문이다 — 전자는 돌파 888건 위의 메타라벨링,   후자는 CUSUM 이벤트 위의 1차 모델. "같은 것이 27배" 가 아니라   "우리가 쓰던 표집 방식이 정보를 버리고 있었다" 가 맞는 해석이다. · 1m 근사이며 2020-01 부터다.

㊺-4 1차 모델 — ★사전 관문 미달. 그러나 ㊷과 성격이 다른 판정이다

㊺-3 이 검정력을 만들어 줬으므로("AUC 0.55 검정력 93.3%") 이제 물어도 되는 질문이 됐다: 이 표본에 예측 가능한 구조가 있는가.

구성: 달러바 → CUSUM → 삼중장벽(수직 만료 제외) → 고유성 가중을 학습에 실제 투입 → PurgedKFold 5 + 엠바고 10일(★t0/t1 을 전역 일 인덱스로 변환·정렬 — ㊹가 강제) → LightGBM 고정 1세트. 피처는 축을 강제 분산: 가격 · 유동성(Amihud) · 주문흐름(테이커 매수비율 — 1m 백필로 처음 확보) · 구조(달러바 소요시간 — 이 바 타입에만 존재) · 심리(펀딩).

⓪ 영점 정상 — 라벨 셔플 OOF AUC 0.5014, 폴드 [.507 .506 .499 .497 .502](3/5 초과, 동전다운 모양). 파이프라인은 고장나지 않았다.

표본유효OOF AUC폴드 범위유효 피처
k=1 g=2 (주)10,8498850.5176.507~.5376.57/11
k=1 g=122,6268540.5207.516~.5376.99/11
k=1 g=36,3378900.5314.510~.5496.17/11
k=4 g=245,7721,6820.5205.515~.5386.54/11
k=4 g=196,1091,6610.5171.513~.5267.05/11
k=4 g=326,7391,6990.5181.509~.5276.13/11

판정: 미달. 주 칸 OOF AUC 0.5176 < 사전 관문 0.5262 · z 0.90 · p 0.183. 기준을 고쳐 통과시키지 않는다.

그러나 세 가지를 함께 기록해야 정직하다:

(1) ㊷ 부검의 두 번째 원인은 실제로 고쳐졌다 — 유효 독립 피처 6.13~7.05/11개. 옛 시도는 7개 중 3.02개였다. 축 분산이 설계대로 작동했다.

(2) 폴드 부호 패턴이 귀무와 다르다 — 실제 6칸 30/30 폴드가 0.50 초과. 영점(셔플)은 3/5 로 0.50 을 오르내렸다. 다만 폴드는 서로 독립이 아니므로(같은 데이터·겹침) 이항검정을 그대로 쓸 수 없다. 관찰로만 남기고, 판정으로 승격하지 않는다. 검정하려면 새 사전선언이 필요하다.

(3) ★검정력이 답을 정확히 규정한다 — 이게 ㊷과의 결정적 차이다

AUC 0.52 검정력AUC 0.55 검정력
k=1 g=2 (유효 885)26.9%82.5%
k=4 g=2 (유효 1,682)41.1%97.2%

우리는 0.55 는 잡을 힘이 있었고 못 잡았다(→ 0.55 급 구조는 없다). 그런데 관측값 0.518 은 0.52 대의 신호가 있어도 못 가리는 구간이다. ⇒ 결론은 "구조가 없다"가 아니라 "0.55 는 없고, 0.52 대는 아직 판정 못 했다" 이다.

그리고 이번엔 남은 거리가 계산된다. 진짜 AUC 0.53 를 80% 검정력으로 잡으려면 유효 표본 ≈ 2,291건 진짜 AUC 0.52 를 80% 검정력으로 잡으려면 유효 표본 ≈ 5,155건 현재 885(k=1) / 1,699(k=4). 2,291 은 사정거리 안이다 — k=4 에서 1,699 이고, 수직 만료 제외로 1,312 → 885 (33%)를 버렸으므로 라벨 설계만 고쳐도 상당분이 돌아온다. ★이건 지난 다섯 번의 벽과 다르다. 그때는 "닫혔다"였고, 지금은 "얼마가 더 필요한지가 숫자로 있다."

㊺-5 표본 회복 시도 — ★실패. 그리고 내 진단이 두 번 다 틀렸다

㊺-4 에서 "수직 만료 제외"로 유효 표본 33% 를 버렸다고 진단하고, AFML ch.3 getBins 표준 (수직 만료 = 만기 수익 부호)으로 되돌려 되찾으려 했다. 3변형 × 2칸 = 6 시행, 전부 신고.

변형표본유효OOF AUC관문z판정
A 현행(만료 제외)k=1 g=210,8498850.51760.53200.90미달
Ak=4 g=245,7721,6820.52050.52321.46미달
B AFML 표준(부호)k=1 g=210,8578800.51650.53200.84미달
Bk=4 g=245,7851,6830.52110.52321.50미달
C 표준+수직 40봉k=1 g=210,8578780.51970.53211.01미달
Ck=4 g=245,7851,6800.51990.52321.41미달

영점 정상(셔플 AUC 0.4891). 6/6 미달. 그리고 회복 자체가 안 됐다 — 표본 10,849 → 10,857(+8건).

★틀린 진단 두 개를 기록한다:

  1. "수직 만료로 33% 를 버렸다" → 실제로는 8건뿐이었다. ±1σ 장벽에 20봉이면 거의 항상 수평 장벽에 먼저 닿는다. 라벨은 애초에 제약이 아니었다.
  2. 그럼 1,312 → 880 은 어디서 났나t0 규약 1봉 차이였다(직접 측정으로 확정): · t0 = 진입봉(㊺-3 · AFML 규약): 구간 중앙 0일 · 평균 고유성 0.1188 · 유효 1,312 · t0 = 신호봉(㊺-4·5): 구간 중앙 1일 · 평균 고유성 0.0798 · 유효 880 ★신호봉 쪽이 보수적(구간이 길어 고유성↓·관문↑)이므로 판정 기준이 느슨해진 적은 없다.

★잡은 버그 1건_rebuild_features 의 캐시 키에 id(df) 를 썼다. 종목마다 파케를 새로 읽으면 이전 객체가 해제되고 같은 id 가 재사용되어 다른 종목의 피처가 반환됐다. IndexError 로 터져서 드러났지만, 길이가 우연히 맞았다면 조용히 틀렸을 자리다. (docstring 에 그 위험을 적어놓고도 id(df) 를 그대로 쓴 것이 실제 원인이다.) 캐시 제거로 수정.

★㊺ 전체 현재 위치 (12 시행 누적)

유효 표본OOF AUCz
㊷ 일봉 돌파(옛 방식)74(판정 불가)
㊺-4·5 k=1878~8900.5165~0.53140.84~1.01
㊺-4·5 k=41,660~1,7000.5171~0.52111.41~1.50

12 시행 전부에서 AUC 가 0.517~0.531 사이의 양(+)이고, 단 한 번도 유의하지 않다. 그리고 필요한 표본이 계산돼 있다 — 진짜 0.53 을 80% 검정력으로 2,291건, 0.52 를 5,155건. 현재 최대 1,683건(k=4).

남은 레버가 좁혀졌다. 표본을 늘릴 방법 중 · 라벨 규약 → 닫힘(이번에 확인. 되찾을 게 없었다) · 기간 확대 → 닫힘(선물 1m 아카이브가 2020-01 시작) · 종목 추가 → 약함(㊴: 상관된 표본은 같은 시각에 겹쳐 고유성이 같이 떨어진다) · k 확대(8·16) → 유일하게 남음. 단 ㊺-2 에서 봉 수익의 첨도가 폭증했다.   다만 그건 봉 수익의 성질이고, 분류 라벨은 장벽 접촉이라 직접 대응하지 않는다.   재료 나빠짐 vs 표본 늘어남의 교환을 실측해야 판단할 수 있다 — 새 사전선언 필요.

㊺-6 축척 교환 k=8·16 — ★0/18. 그리고 내가 선언한 다중검정 관문이 틀렸다

사전선언대로 k ∈ {8,16} × g ∈ {1,2,3} = 6 시행(누적 18). 영점 정상(셔플 0.5006).

표본유효OOF AUC개별관문내가 쓴 관문z판정(당시)
k=8 g=2 (주)93,7151,9940.51340.52130.52351.04미달
k=8 g=1196,9391,9730.51850.52140.52371.42미달
k=8 g=354,5632,0100.52040.52120.52341.58미달
k=16 g=2190,5882,1960.52190.52030.52241.78미달
k=16 g=1400,8792,1780.52450.52040.52251.98통과
k=16 g=3110,7992,2070.52020.52020.52241.64미달

★★그 "통과"는 내 관문이 틀려서 나온 것이다. 취소한다. 나는 다중검정 관문을 E[max of 18 표준정규] = 1.821 로 선언했다. 그런데 E[max] 는 귀무 하 최대값의 평균이고, 평균을 넘는 일은 귀무에서도 46.8% 일어난다(모의 40만회). 즉 그건 5% 검정이 아니라 ~47% 검정이었다. 정확한 5% 다중검정 관문은 max 분포의 95분위 = z 2.763 이다.  관측 최대 z 1.98다중검정 보정 p = 0.354. (보정 안 한 단일 p 는 0.024) ⇒ 18 시행 전부 미달. 유리한 결과를 관문 오류로 남기지 않는다.

★그래도 이 실험이 답한 것 두 가지 — 둘 다 값지다

k유효 표본봉수익 초과첨도OOF AUC0.53 검정력
18805.510.516545.8%
41,68310.450.521168.7%
81,99424.620.513475.1%
162,19634.500.521978.6%

① 재료 나빠짐 걱정은 근거가 없었다. 봉 수익 초과첨도가 5.51 → 34.50(6.3배) 로 나빠지는 동안 OOF AUC 는 0.5165 → 0.5219 로 변하지 않았다. ㊺-2 의 첨도는 봉 수익의 성질이고 우리 라벨은 장벽 접촉이라 직접 대응하지 않는다 — 추론이 아니라 실측으로 확인했다.

② 표본이 포화한다. k 를 1→16(봉 16배)으로 키웠는데 유효 표본은 880 → 2,196(2.5배)뿐이다. 원인은 종목 간 동시성 — 25종목이 같은 시각에 이벤트를 내므로 봉을 잘게 썰어도 고유성이 같이 떨어진다. ㊴에서 종목 확대가 막혔던 것과 같은 벽의 다른 얼굴이다.

★★그래서 지금 말할 수 있는 것 (18 시행, 검정력 78.6%) "이 피처 집합·이 유니버스에 AUC ≥ 0.53 구조는 없다" — 이건 판정이다. 힘이 있었고 못 잡았다. 남은 것은 0.52 대이고, 그건 유효 표본 5,155건이 필요한데 2,196에서 포화했다.

★이건 "프라도가 틀렸다"가 아니다. 정반대다 — 그의 파이프라인이 없었으면 우리는 74건 표본에 관문 0.611 이라 아무것도 못 물었다. 그의 절차 덕분에 0.53 을 배제할 수 있는 자리까지 왔고, 남은 한계가 우리 유니버스의 상관 구조(그가 ch.4 에서 경고한 바로 그것)라는 것도 알게 됐다.

㊺-7 프라도 프로토콜 1~3단계 — ★누수 하나를 잡았고, 진단은 (다)로 확정됐다

㊺-6 에서 표본 레버가 포화했으므로 정보 쪽으로 옮겼다. ADIA Lab 7단계 중 1~3: 변수 선택(상호정보량·군집 중요도) → 인과 발견(교락·충돌부 지목) → 인과 조정. 칸은 k=16 g=2 하나만 썼다(시행을 더 부풀리지 않기 위해).

★★1차 판은 화려했고, 그리고 누수였다 — 내가 잡았다

변형1차 판 AUCz
R0 원본0.52191.78미달
R1 교락을 피처로 추가0.58847.17통과
R2 교락에 잔차화0.55214.23통과

원인: 외생변수로 넣은 시장수익mret[idx] — 그 표본이 속한 날 전체의 BTC 수익이었다. 표본이 그날 3시에 있으면 나머지 21시간이 미래다. R2 도 같은 Z 로 잔차화하므로 잔차에 미래가 주입된다. 두 "통과" 모두 누수 산물이다. ⇒ 전일 수익(r[i−1])으로 지연시켜 재실행. 폐기한 4 시행도 시행으로 세어 누적 26 으로 갱신.

수정 후 (누적 26 · 다중검정 5% 관문 z 2.882)

변형피처OOF AUCΔAUCz판정
R0 원본(기준선)110.52191.78미달
R1 교락을 피처로 추가180.5229+0.00101.86미달
R2 교락에 잔차화110.5216−0.00031.75미달
R3 충돌부 제거90.5214−0.00051.74미달

영점 정상(셔플 0.4985).

★사전선언한 세 결과 중 (다)가 나왔다 — 그리고 그건 확정 정보다

(가) 조정 후 AUC 가 변한다 → 오염 증거 · (나) 충돌부 제거로 오른다 → collider 실증 (다) 아무것도 안 변한다 → 우리 피처엔 교락·충돌부 문제가 없다

즉 CLAUDE.md 가 기록한 요일 교락(일봉 거래량 분석을 무효화했던 그것)은 이 달러바 파이프라인은 오염시키지 않는다. bar_minutes 의 충돌부 우려도 실체가 없다.

1단계가 답한 것 — 피처는 중복도 오염도 아니다. 그냥 약하다 · 상호정보량 최대 0.0054(ret_1) · 나머지 대부분 0.000~0.003 · 피처 11개 → 군집 8개(|상관|>0.6 기준) — ㊷의 옛 시도(7개 → 유효 3.02)와 달리 중복이 아니다 ⇒ 정보가 왜곡되고 있는 게 아니라 애초에 적다.

★★㊺ 전체 결론 (누적 26 시행) · 표본: 74 → 2,196 (프라도 파이프라인이 실제로 벽을 뚫었다) · 판정력: "AUC ≥ 0.53 구조는 없다" — 검정력 78.6% 로 확정 · 피처: 중복 아님(8군집) · 교락 아님 · 충돌부 아님 · 그냥 약함(MI ≤ 0.005) · 남은 것: AUC ≈ 0.522 이며 유효 5,155건이 필요한데 2,196에서 포화

★이건 프라도 이론의 실패가 아니다. 그의 절차가 아니었으면 우리는 74건 표본에 관문 0.611 이라 이 질문 자체를 못 물었다. 그의 도구로 물었더니 "이 유니버스·이 피처에는 잡을 만한 구조가 없다" 가 나온 것이고, 그건 답이다.

㊺-8 확신 기반 베팅 — ★산술은 맞았고, 통계는 안 선다 (방향 외부검증 후 실행)

사용자 지시로 진행 전에 두 방향의 타당성을 외부 탐색으로 검증했다.

방향 2(새 정보원) — 우리에겐 타당하지 않다. 착수하지 않았다 LOB 미시구조 문헌의 73% 정확도는 500ms 지평 · 40단계 호가이고 비용 미반영 · 단일 하루(2025-01-30) · 시간순 아닌 80/20 분할(퍼징 없음)이다. 우리는 명시적으로 HFT 가 아니고(CLAUDE.md 레이턴시 초 단위) L2 도 없다(rank67). 온체인은 유료 데이터가 필요하고 주장 범위도 좁다. ⇒ 비용 대비 타당성 미달.

방향 1(사이징) — 우리 숫자로 재니 타당했다. 그래서 실행했다

장벽 폭(±1σ, k=16) 중앙±100.2bp
왕복 비용 8bp장벽의 8.0%
손익분기 승률 p* = 0.5 + c/(2b)0.5399
상위 5% 베팅 시 필요 AUC0.5218 (우리 0.522)

실측 결과 (6칸 전부 신고 · 누적 시행 32 · 다중검정 관문 t 2.947)

상위 q거래유효총 bp순 bp승률t판정
100%190,5882,196+3.5−4.551.7%−1.51미달
50%95,2941,115+6.2−1.852.8%−0.41미달
20%38,118456+10.9+2.954.9%0.39미달
10%19,059228+14.7+6.757.4%0.63미달
5%9,530111+18.8+10.860.8%0.74미달
1%1,90618+43.5+35.577.2%1.76미달

영점 정상(셔플 순수익 −7.2 / −8.9bp ≈ −비용).

★사전 산술이 맞았다 — 손익분기 승률 53.99% 를 예측했고, 실측이 상위 20%(54.9%)에서 정확히 그 선을 넘는다. 확신↑ → 총수익↑ → 승률↑ 이 단조다. 그런데 0/6 미달이다. 상위 q 를 좁힐수록 유효 표본이 같이 줄어 t 가 안 큰다 (상위 1% 의 유효 표본은 18건이다).

단조성을 증거로 승격하지 않는다. 중첩 부분집합에서 단조가 나오는 것은 "AUC > 0.5" 와 거의 동치이고, 그건 이미 알고 있으며 유의하지 않은 사실이다. 6칸은 독립 확인 6번이 아니다.

★★㊺ 최종 상태 (누적 32 시행) · 프라도 파이프라인은 작동했다 — 표본 74 → 2,196 · 재료 5/5 개선 · 검정력 18% → 79% · 판정된 것: "AUC ≥ 0.53 구조 없음" · 피처 중복·교락·충돌부 아님(그냥 약함) · 경제성: 부호는 맞다(상위 20% 이상에서 순수익 양수). 유의성은 안 선다 · 병목: 유효 표본 2,196 에서 포화. 원인은 종목 간 동시성(25종목 ρ 0.6~0.9) · 남은 정직한 길: 전방(페이퍼). 인샘플이 못 가르는 것을 전방이 가른다 —   그리고 우리는 이미 세 트랙을 돌리고 있다.

㊺-9 T4 배포 — ★검증된 전략이 아니라 사전등록 가설로 (2026-08-08)

사용자 지시로 ㊺-8 의 물건을 네 번째 페이퍼 트랙으로 붙였다.

동결 아티팩트: config/mlbet_model.txt(LightGBM 1.08MB) + config/mlbet_model.json · 달러바 k=16 · CUSUM g=2 · 삼중장벽 ±1σ · 수직 20봉 · 확신 임계 0.047866(학습 분포 상위 20%) ★CLAUDE.md 는 모델 가중치 커밋을 금하지만 그 취지는 바이너리·시크릿 방지다. 이 텍스트 덤프는 전략 정의 그 자체(frozen 폭 경계와 같은 지위)라 config/ 에 둔다 — 크기를 신고하고 넣었다.

배포물: strategies/ml_confidence.py · live/mlbet_paper.py · live/mlbet_runner.py(자정+300s · 1m startTime 페이지네이션) · /paper-mlbet/{summary,positions,trades} · 유닛테스트 9건. 사이징 ×0.20 — 2P−1 을 쓸 P 가 없으므로(유의성 미달) 판정용 최소 노출로 임의 지정했고 그렇게 표기했다. 스위치 QC_MLBET_LIVE=1. 라이브 경로 스모크 확인: BTCUSDT 1m 28,799봉 → 달러바 352 → 신호 9건.

★★그리고 계획서를 쓰다가 결정적인 것을 계산했다 — T4 는 전방에서도 판정되지 않는다. ㊺-8 상위 20% 의 축적 속도는 유효 표본 70건/년이다. · 단일검정 t=1.645 에 필요한 유효표본 8,172 → 전방 110년 · 다중검정 t=2.947 에 필요 26,229368년 · 12개월 점검의 검정력 6.8% · 60개월도 9.6%

⇒ T4 는 "언젠가 판정될 트랙"이 아니다. 그래도 돌리는 이유는 셋이고 셋 다 판정이 아니다: ① 기록 보존(사전등록 가설이 잊히거나 재적합되는 것을 막는다 — 베팅마다 확률·방향·장벽 저장) ② 작동 검증(조용히 안 도는 사고가 두 번 있었다) ③ 파국 감지(−20bp 붙박이 같은 큰 오류는 몇 달이면 보인다) ★이 트랙에 대해 "통과/실패"라고 쓰는 일은 없을 것이다. 쓸 수 있는 것은 "작동한다/안 한다" 뿐이다.

웹 게시 (2026-08-08)

· /ledger — 이 원장을 저장소에서 직접 읽어 정적 렌더(단일 진실 원본 유지). 표·인용 지원. · /tracks페이퍼 트랙 계획. 4트랙의 사전등록 가설·점검 규약·일정·중단 조건.  머리말에 "전부 모의 · 투자 권유 아님 · T4 는 가설"을 명시했다.

㊹ AFML 기계 검증 — ★정답을 아는 사례로 내 구현을 쳤다 (2026-08-07)

사용자 지적: "예전에 테스트한 내역들은 대체로 신뢰해선 안 돼. 네가 구현한 것들은 죄다 버그 투성이였으니까." — 이번 세션에서만 내 구현 버그를 18개 잡았으니 정당한 지적이다. 그리고 ㊷에서 나는 average_uniqueness검증 없이 호출해 "유효 표본 415건"을 보고하고, 그 숫자로 "ML 경로가 열렸다"고 판정했다. 검증 안 한 기계의 출력으로 판정한 것이다.

tests/validation/test_afml_machinery_known_answers.py — 15건. 원칙: 손계산·불변식만 쓰고, 구현을 다시 구현해 비교하지 않는다(그러면 같은 오해를 두 번 한다).

통과한 것(13건) — 고유성 손계산 3종(무겹침 1.0 · 동일라벨 0.5 · 3중겹침 11/18·4/9·11/18) · 경계 0<u≤1 · purge 경계 4종 · 엠바고 방향/창 · 누수 0 불변식(PurgedKFold·CPCV 각각) · CPCV 이론값(C(6,2)=15 분할 · φ=C(5,1)=5 경로 · 그룹별 테스트 등장 횟수).

★잡은 버그 2건 — 둘 다 "조용한 오답" 유형

버그증상조치
average_uniquenessn_bars 부족numpy 슬라이싱이 말없이 잘려 6바 라벨을 3바로 평균 → 고유성이 조용히 틀림. 음수 인덱스는 배열 뒤쪽을 건드림_validate_spans() 추가 — 예외를 던진다
PurgedKFold·CPCV 의 정렬 가정docstring 은 "t0 순 정렬 가정"인데 강제하지 않음. 정렬 안 된 입력이면 폴드가 시간 블록이 아니게 되는데 예외도 안 남require_sorted_spans() 추가 — 예외 + "여러 종목은 전역 시간 인덱스로 바꿔 넣을 것" 안내

★그리고 함정 하나를 테스트로 고정했다test_symbol_local_indices_break_purging. 종목 A 의 100번 봉과 종목 B 의 100번 봉은 다른 날짜다. 로컬 인덱스를 그대로 넣으면 고유성이 0.5(틀림) vs 1.0(맞음)으로 갈리고 purge 도 반대로 동작한다. 이건 2026-08-07 에 bucket_and_eff 가 이미 저지른 실수(유효 베팅 8.5 로 부풀림)와 같은 함정이다.

이 검증 작업이 곧바로 ㊷의 판정을 뒤집었다(아래 ㊷ B 참조). 검증이 결과를 낳은 사례다.

㊸ 프라도 이론 직접 탐색 + ML 경로 타당성 (2026-08-07 · 사용자 (나) 선택)

A. ★가장 큰 발견 — AFML(2018)은 프라도의 종점이 아니다

2023년 이후 그의 연구는 전부 **인과 요인 투자(Causal Factor Investing)**이고, 논지가 "ML 의 다음 단계는 연관이 아니라 인과"다. 우리가 AFML 만 보고 있었던 것이 이미 한 세대 뒤였다.

문헌연도핵심
Causal Factor Investing (Cambridge Elements)2023요인 투자가 과학이 되려면 인과가 필요하다
The Case for Causal Factor Investing2024연관 기반 요인모형의 구조적 결함
Causal Factor Analysis is a Necessary Condition…2025인과 분석이 투자 효율의 필요조건
Causality and Factor Investing: A Primer2025실무자용 입문
Correcting the Factor Mirage (JPM)2026 예정요인 신기루 교정 프로토콜

핵심 개념 — "요인 신기루(factor mirage)": 통계적으로는 멀쩡한데 인과적으로 잘못 지정된 모형. 원인은 둘 — 교락(confounder)충돌부(collider). 회귀에 설명력만 보고 변수를 넣으면 둘을 구분하지 못하고, 표본 밖에서 무너진다.

우리는 이 함정을 이미 한 번 밟았고 기록도 남아 있다. CLAUDE.md: "요일 교락 실재(raw 저거래봉 66% 주말 → 요일조정 없는 거래량분석 무효)" 그때는 우연히 발견했다. 프라도는 그걸 체계적으로 다루는 절차를 제시한다.

ADIA Lab 7단계 프로토콜 — 우리 위치를 대조하면:

단계내용우리 상태
1 변수 선택SHAP · 상호정보량(함수형태 가정 없이)❌ 안 함
2 인과 발견PC · LiNGAM + 도메인 지식으로 DAG 구성❌ 안 함
3 인과 조정do-계산으로 교락만 통제, 충돌부 배제❌ 안 함
4 인과 추정double machine learning 등❌ 안 함
5 포트폴리오 구성인과 통찰 → 비중부분(달러중립·켈리)
6 백테스트인과 구조를 보존한 리샘플링·MC하고 있다(순환 시프트·라벨 셔플·기하 보존 위약)
7 다중검정 보정p 보정 · 디플레이트 Sharpe하고 있다(시행 횟수 전수 신고·DSR)

6·7 은 이미 엄격하고, 1~4 는 한 번도 안 했다. 그리고 우리 병목(IC)은 1~4 의 영역이다.

B. 오픈소스 — mlfinlab 금지는 여전히 옳다. 대체재는 있다

저장소내용우리에게
hudson-and-thames/mlfinlabAFML 원조 구현유료·폐쇄 전환됨 — CLAUDE.md 금지가 지금도 유효
eslazarev/purged-cross-validationPurging·엠바고·CPCV(ch.7·12). mlfinlab 유료화 때문에 만들어진 오픈 대체재우리는 이미 validation/{cpcv,purged_kfold}.py 보유 → 의존 말고 교차검증용 대조
mlfinpyAFML 오픈 재구현(numpy·numba)라벨링·표본가중 대조용
emoen/Machine-Learning-for-Asset-ManagersMLAM(2020) 코드 — 추세 스캐닝·ONC·클러스터 MDI/MDA·디노이징★가장 쓸모 있음. 우리에게 없는 기법들

★방침: 의존성으로 넣지 않는다(유료 이력·검증 부담). 원 스니펫을 읽고 네이티브 구현 + 자체 검정. 이건 CLAUDE.md §4 의 기존 방침 그대로다.

C. MLAM(2020)에서 우리에게 없는 기법 — 다음 후보군

기법무엇왜 우리에게
추세 스캐닝(Trend Scanning)t 부터 t+L 까지 회귀를 여러 번 적합해 기울기 t값이 최대인 창을 고름. 라벨 = t값 부호/크기우리 라벨은 삼중장벽 하나뿐이다. 추세 스캐닝은 다른 라벨 — 라벨을 바꾸면 IC 가 바뀐다
ONC(최적 군집 수)상관행렬 군집화로 진짜 차원을 찾음㊷-C 에서 피처 7개가 유효 3.02개로 나왔다. ONC 는 그걸 체계적으로 처리
클러스터 MDI/MDA상관된 피처를 묶어서 중요도 산출상관 피처를 개별 평가하면 중요도가 서로 갉아먹는다 — 옛 메타라벨링이 정확히 그 상태
디노이징/디토닝상관행렬의 잡음 고유값 제거횡단면 전략 두 개가 상관행렬에 의존한다

㊷ 메타라벨링 재개 타당성 — ★검정력을 먼저 쟀다(규칙 8). 열렸다, 간신히

(나)로 가기 전 내가 선언한 전제. ⑩의 교훈 그대로 — 기각이 무효였을 수 있으므로 재기 전에 확인. ★대상을 바꿨다: 옛 메타라벨링은 지금 없는 채널 시스템(527거래) 위였다. 배포 중인 T1 로 잰다.

A 유효 표본 (AFML ch.4 평균 고유성 — 우리 구현 labeling/sample_weights.py 그대로 호출)

거래 888건 · 승률 44.8% · 보유기간 중앙 9봉
평균 고유성 0.4672  →  명목 888건 = **유효 415건 (46.7%)**
가장 겹치는 종목: ETH 0.372 · BTC 0.401 · SOL 0.408

B 검정력 — ★1차 판정을 뒤집었다. 아래가 최종이다

내 1차 판정("열렸다")은 틀렸다. 종목별 고유성을 더한 415건은 "BTC 거래와 ETH 거래는 서로 독립" 을 가정한 값이다. AFML ch.4 의 고유성은 한 계열 안의 시간 겹침만 본다. 크립토는 서로 0.6~0.9 로 동조하므로(rank65) 그 가정이 성립하지 않는다. 사용자 지적("네 구현은 죄다 버그 투성이였으니 과거 결과를 믿지 마라")으로 시작한 ㊹ 기계 검증 작업 중에 내가 스스로 발견했다.

표본양/음AUC 표준오차검출 가능 최소 AUCAUC 0.55 검정력
명목 888398/4900.01950.53282.2%
유효 상한 415(교차 독립 가정)186/2290.02850.54754.3%
유효 하한 60(완전 중복 가정)27/330.07550.62416.2%

★독립 측정이 하한 쪽을 지지한다. ㉒에서 실측한 분산 팽창 11.99배 → 888 / 11.99 = 유효 74건. 전역 캘린더 고유성(60건)과 서로 다른 두 방법이 60~74 에서 만난다. 415 는 낙관 가정의 산물이다.

⇒ 사전 기준을 하한에 걸면 검정력 16.2% 로 미달. ML 경로는 표본 벽에 막혀 있다.

C 피처 중복 — 후보 7개 → 유효 독립 3.02개(43%) · 비대각 |상관| 중앙 0.455 · 최대 0.879. 옛 메타라벨링의 "피처 15개"(ADX·DI·RSI·EMA거리·ATR%·레짐 원핫…)도 전부 같은 가격 계열 변환이라 실제 차원은 3~4개였을 것이다. "15차원"은 거짓이었다.

부검 결론 — 옛 실패의 원인은 모델이 아니라 설계 둘이다.표본: 유효 표본이 60~74건이다. 관문이 AUC 0.624 를 요구한다 —   메타라벨링에서 0.62 는 사실상 존재하지 않는 수준이다. 모델을 아무리 잘 만들어도 못 넘는다.피처: 15개가 유효 34개. 같은 가격을 15번 물어본 것이라 새 정보가 0 이다. ⇒ 재개 시 고쳐야 할 것도 그 둘이다: 표본 가중(고유성)을 학습에 실제로 먹이고,   가격이 아닌 축의 피처를 넣는다(㊵에서 Amihud 만 움직인 것과 같은 원리). ★그리고 프로토콜 13단계(변수 선택 → 인과 발견 → 교락/충돌부 구분)가 정확히 ②를 다루는 절차다.

★★그러나 ①이 먼저다. 그리고 ①은 지금 막혀 있다. 이건 다섯 번째 같은 벽이다 — 지표(㉒) · TF(㉘) · 수익원(㊲) · 종목(㊴) · ML 표본(㊷). 다섯 번 다 "유효 독립 정보"가 병목이었다. ML 은 정보를 만들지 못한다. 짜낼 뿐이다. 유효 표본 60~74 에서는 짜낼 것이 없다.

표본 벽을 푸는 길은 셋뿐이고, 둘은 이미 닫혔다: · 종목 늘리기 → ㊴에서 닫힘(상관된 잡음만 는다) · TF 줄여 겹침 줄이기 → ㉘에서 닫힘(엣지가 거래보다 빨리 준다) · 남은 하나: 라벨을 바꿔 표본당 정보량을 늘린다 — 이진 승/패 대신   추세 스캐닝(MLAM)의 연속 t값을 회귀 타깃으로. 같은 거래 수에서 정보가 더 나온다.   이게 AFML/MLAM 이 소표본에 주는 유일한 정공법이며, 아직 시도한 적이 없다.

/docs 88개 전수 대조 결과 — 다시 뒤질 필요 없는 목록

구분항목상태
부활 성공베어숏북 → 부호 반전 → L3 자본항복 되돌림㉛~㉟. 통과·보류
부활 후보(사유 소멸)페어/공적분 — rank68 이 "6종목=15쌍"이라 탈락시켰으나 지금 25종목=300쌍미검정. 사유 무효
규모·저변동성·비유동성 팩터 — rank68 이 "베타 노출"로 탈락시켰으나 달러중립판은 베타 0㉝에서 검정 중
횡단면 단기반전 — 배포 모멘텀이 skip=1일부러 버리는 신호㉝에서 검정 중
데이터 벽(불가)마이크로스트럭처(OFI·density·TCR) — 모듈은 있으나 1h 6종목·5m 2종목뿐INTRADAY_RESEARCH §2.3
메이커 체결 기반 분봉 — L2 호가 없음(rank67 실측)불가
변동성 리스크 프리미엄 — 옵션 데이터 없음 / 온체인 — 유료불가
이미 소진(재개 금지)거래량 5각도 · CVD 22단계 · 매물대/프로파일 · 돌파 8회 · RR 하한 6종메모리 참조
문서 오류(정정 필요)CONFLUENCE_RESEARCH 의 "거래량 = 필수 차원(공리)"실측 5각도 전부 기각
결론 문서 부재rank21~66 프롬프트 46건은 별도 RESULT 없음 — 결론은 PROGRESS.md 안에 있음위치 확인 완료

전수 기준을 한 번 더 정정한다. 위 표를 만들 때 docs/*.md(최상위 88개)만 훑고 하위 디렉터리를 빠뜨렸다. 커밋 때 docs/history/ 4개(2,128줄)가 딸려 나와 발각됐다. 같은 실수의 재발이다. 이 원장의 전수 기준은 docs/**/*.md = 92개이며 아래가 그 나머지다.

docs/history 파일내용원장 상태
trading_strategy_review_1.md코스피/코스닥 단타 3종 + 레짐 5국면 + 전략 스위칭전략 A(급락 후 반등·역추세)는 ㉜ L3 와 같은 모양 — 두 경로가 독립으로 만났다. 전략 B(돈치안 돌파)=배포본. 전략 C(초단타)=비용 산수로 봉쇄. 레짐 스위칭=㉚에 이미 '미검정'으로 등재 · ★주식 가정의 이식은 CLAUDE.md §9 금지
AFML….md동적 달러바 임계(유동성 모멘텀 비율) · 변동성 조정 삼중장벽 · 메타라벨링 · LSTM/Transformer/RL삼중장벽·메타라벨링은 이미 검정(메타라벨링 AUC 0.49 기각). 달러바는 일봉등가 A/B 완패. 동적 임계는 미검정이나 재튜닝 = 과적합 위험(CLAUDE.md TF 확정문) → 우선순위 낮음
최종 진행절차.mdV8/V9 · 커스텀 5TF(3분·12분·90분·5시간·4일) · 오일러 상수 $e$ · ATR 10% 렌코/레인지 봉$e$ 승수는 CLAUDE.md §9 명시 금지. 커스텀 단기 TF 는 ㉘에서 정보량 측정 완료(잘게 쪼개도 확인 안 빨라짐). 렌코/레인지 봉만 진짜 미검정 — 바타입 A/B 는 달러바만 했다. 단 같은 이유로 우선순위 낮음
퀀텀 컨셉 아이디어.md양자·중력장·유체역학 은유 · TCR · 에너지밀도 가속도은유의 문자적 구현은 CLAUDE.md 프로젝트 정의에서 배제. 단 건질 알맹이(TCR·density·OFI)는 이미 features/microstructure.py 로 구현돼 있고 데이터 벽(1h 6종목)에 막혀 있다 — 위 '데이터 벽' 항목과 같은 자리

⇒ docs 하위까지 포함해 새로 열린 실마리는 없다. 렌코/레인지 봉 하나가 형식상 미검정으로 남지만, 달러바 A/B 완패 이후의 바타입 재튜닝은 원장이 이미 과적합으로 분류한 행위다.

★다음 수익원 후보의 선별 기준 (㉔·㉕에서 도출)

  1. 수익원이 가격이 아닐 것(캐리·수수료·프리미엄·이벤트)
  2. 크립토 펀딩 캐리는 이미 말랐다 — 같은 우물을 다시 파지 않는다
  3. 회전 0.05 이하로 운용 가능할 것(그 이상이면 비용이 먹는다)
  4. 우리 데이터/인프라로 지금 검정 가능할 것

★두 후보 공통의 가장 큰 경고 — 감쇠

폭 돌파 (배포 엔진 실측)   2023 +0.528R  2024 +0.327R  2025 +0.204R  2026 −0.205R
횡단면 모멘텀 (연 net)     2023 +23.5%   2024  −3.1%   2025 +16.4%   2026 −15.9%

돌파는 4년 단조 하락이다. 알파 소멸인지 국면인지 이 표본으로는 못 가린다. 판정은 전방 페이퍼에 맡긴다. 사이징 ×0.37 을 유지하는 이유는 §3 아래에 따로 적었다.

★배포 직전에 잡은 버그 — 검정은 멀쩡하고 배포 코드만 고장나는 유형

버그증상왜 검정에서 안 걸렸나
breadth_series유효 폭 0/2519 봉 — 진입이 영원히 안 남검정은 종목별 연속 배열로 계산 후 캘린더로 옮김
atr_pit25종목 중 24종목 ATR 0봉 — 7년 신호 68건(전부 BTC)동일
rank_weights무효 종목이 k개 이상이면 숏 다리 소멸(가중치 전부 0)전체 유니버스에선 무효가 적어 표면화 안 됨. 종목 분할에서만 터짐
px[:, 0] = BTC 가정load_panel 은 알파벳순 → 0번은 1000SHIBUSDT. 시장 국면 변수 3개가 SHIB 를 잼SHIB 2021년 상장 → 2020~21 국면이 nan 인 게 단서였다
fd 열을 경계 파일 순서로 조회다른 종목의 펀딩을 읽음fd 열 순서는 load_panel 기준인데 다른 목록으로 찾았다
앞의 둘은 원인이 하나: 캘린더 정렬 배열(결측=NaN)을 지표 함수에 그대로 먹인 것.
뒤의 둘도 원인이 하나: 패널 열을 다른 목록의 위치로 찾은 것 — 이제 이름으로 찾는다.
근본 수정: 엔진이 정렬 배열을 지표에 넣지 않는다(폭만 캘린더, 지표·신호는 종목 자기 봉).
셋째는 무효 종목을 −inf 로 밀어 정렬한 탓 — 유효 종목만 골라 그 안에서 정렬하도록 고쳤다
(펀딩 원본 Sharpe 0.1007 → 0.1853 으로 바뀔 만큼 결과에 영향이 컸다).

2. 전 전략 목록 · 구현 경로

A. 독립 전략 (코드 모듈 존재)

전략계열상태★찾은 구현 경로 (표준 관행 대비 우리 구현의 격차)
횡단면 모멘텀중립2순위(미배선)격차를 이미 메움. 학술: 30일 형성·1일 스킵(단기반전 회피)·7일 보유·주간 리밸런스·각 끝 20% 롱숏. 우리 옛 구현: 롱온리·200봉 보유. 문헌은 "2~4주 무의미, 그 이상 음수"라 우리는 음수 구간을 들고 있었다
폭 조건부 롱 돌파추세★1순위 · 배포 배선 완료격차 해소됨 — frozen 경계를 config/breadth_boundaries.json 에 1회 산출해 고정, 라이브가 plan_entry 를 그대로 호출(⑬ 정합 불일치 0건). 롤링은 OOS 0/4 로 탈락했으므로 재산출 금지
캐시앤캐리(현물+퍼프)캐리기각(㉔·㉕)구조는 맞음(가격위험 97.5% 제거)·회전 감축도 통함. 그러나 gross 가 3년 −93%(16.57%→1.07%) 로 말라 2026 에 비용을 못 덮는다
펀딩 캐리캐리기각(⑮) — 무기한형gross 게이트 실패(B 홀수 net +3.07% / gross −10.27%). 격차: 우리는 무기한 횡단면만 가능(현물 다리 없음). 표준 캐시앤캐리(현물 롱 + 무기한 숏)는 현물 체결 경로가 있어야 한다 — 그게 생기면 연 5~19% 사례가 사정권
Triple RSI + 50 EMA추세 진입유지이미 귀무모형 통과·PIT 확인 완료. 남은 한계는 WFE 0.17·최악버킷
돈치안 돌파추세무조건형 탈락폭 조건을 붙이면 살아난다(→ 2순위). 무조건은 OOS 0/4
하이킨아시추세 지속기각(⑯)2,797건 초과 −0.001R · P 0.281. 표준 관행(HA 는 신호 평활이지 트리거가 아님)대로 다른 진입의 확인자로 쓰는 변형은 아직 미검정
TTM 스퀴즈변동성 응축기각(⑯)1,426건 초과 −0.003R · P 0.141 · 3/3 분할 음수. '축이 달라 상관이 낮을 것'이라는 기대는 엣지가 있어야 의미가 있는데 엣지 자체가 없었다
볼린저 + CCI상대 모멘텀기각개별 DSR 0.075 + ablation 4증거 열등. 표준 관행 대비 격차는 레짐 필터 부재(공개 실측: 횡보 PF +1.62 / 추세 −0.74)
채널 평균회귀평균회귀반대표준 관행 격차: ADF/Hurst/OU 반감기로 회귀성을 먼저 검정해야 하는데 한 번도 안 했다. ②에서 검정하니 잔차는 회귀하나(자격 69.4%) 그 자격이 수익으로 이어지지 않았다

B. 오버레이 · 필터

상태찾은 격차
CVD (22단계)기각 → 재구성 중표준은 트리거 아님(소진 위치 표시자) · 풋프린트 1분 해상도 · 가격 구조 확인 후 진입. 장중 버킷 재측정에서 세 버킷 부호 일관(z<2)
거래량 프로파일롱만 미약POC/VAH/VAL 을 레벨로 썼으나 위약을 못 넘음
SMA20 사이징 가중조건부숏 OOS 0/4
추세 품질(ADX 상승)채택현물 OOS 통과
펀딩 조기청산채택
청산 캐스케이드 / 리테스트 / 부분익절 / 거래량 게이트 / RR 하한 / 레버리지 / 메타라벨링전부 기각각 항목 PROGRESS 기록 참조

C. 청산 규약 (오늘 A/B)

청산평균R버킷승해석
고정 RR 2.0+0.31217/42현행
샹들리에 3ATR+0.66715/42평균R 2배, 버킷은 악화
반대채널 10+0.72511/42평균R 최고, 버킷 최악
고정 RR 3.0+0.36818/42버킷 최고, 최악버킷 −16.2%

구조적 결론: 추세추종은 덩어리로 번다. 청산을 바꿔도 그 성질은 안 바뀐다.

D. 조사만 하고 미구현

MACD · 스토캐스틱 · 이치모쿠 · VWAP · 그리드 · 페어트레이딩 · 차익거래 ※ MACD·스토캐스틱·RSI·EMA 는 "같은 가격 계열의 변환이라 서로 상관"이라 조사 단계에서 제외. ※ 피보나치 · 마틴게일은 CLAUDE.md §9 금지.


3. 다음 계획

이번 재검토(⑨~⑲)에서 완료된 것

내용결과
⑨~⑪횡단면 모멘텀 OOS·민감도 + 새 판정 규칙 수립조건부 채택 (P 0.965)
⑫~⑭돌파 소급 재판정 · 라이브↔검정 정합 · 배포 포트폴리오 검정채택 · 정합 0건 · 버그 2개 발견
펀딩 캐리 새 규칙 재판정기각 (gross 게이트) + rank_weights 버그 발견
하이킨아시 · TTM 첫 검정둘 다 기각 (초과 ≈ 0)
⑰⑱위약 귀무분포 교정(시간 군집 · 기하)돌파 4분할 전부 통과
후보 결합 상관 분석ρ=+0.013(독립) 이나 위험 맞추면 이득 없음

남은 할 일

순위할 일
1폭 돌파 전방 페이퍼 관측배포 배선 완료·미가동(QC_BREAKOUT_LIVE=1). 4년 단조 감쇠가 국면인지 알파 소멸인지 전방 표본만이 가린다
2진짜로 다른 수익원 탐색㉒·㉓이 사이징·빈도·헤지를 전부 막았다. 유효 베팅 2.8→33 은 다른 수익원으로만 가능하다. 기준: 크립토 베타와 구조적으로 무관할 것(기술적 지표 변형은 해당 안 됨)
3횡단면 모멘텀 라이브 배선P 0.965 통과인데 코드가 없다. 단, ⑲에서 결합 이득이 확인 안 됐으므로 급하지 않다
4현물 체결 경로 → 캐시앤캐리완료(㉔·㉕) — 기각. 캐리가 말랐다

★2순위가 ㉒·㉓에서 최종 확정됐다. ⑳→㉑→㉒→㉓ 로 용의자를 하나씩 지웠다: 국면(㉑에서 최근엔 해당 없음) → 알파 소멸(㉑ 기각, 검정력 100%) → 신호 빈도(㉒ 무죄) → 베타 헤지(㉓ 막힘). 남은 것은 다른 수익원뿐이고, 그게 2순위다.

사이징은 왜 ×0.37 인가 (규칙보다 낮게 잡은 이유를 남긴다)

규칙대로면 전방 분할 P 0.990 → ×0.98. 올리지 않았다. ⑱은 전 이력 거래 단위 검정이고, ⑭ 계좌 재생은 연도별 단조 감쇠를 보여줬다: 2023 +0.528R → 2024 +0.327 → 2025 +0.204 → 2026 −0.205. "전 표본에 엣지가 있다"와 "지금도 있다"는 다른 질문이다. 전방 페이퍼 표본이 쌓이면 올린다.


㊻ 트랙 배분 — HRP(AFML ch.16) 미달. 그리고 이유가 이론에 있다

사전선언: HRP 가 EW 대비 하위3 개선 그리고 버킷 승률 비악화. 워크포워드(후행 252일 적합 → 63일 적용), 네 트랙 공통 생존 구간 2020-07~2026-01(1,997일).

배분연수익Sharpe버킷승률하위3평균 비중 (T1·T2·T3·T4)
EW 동일비중+21.26%2.4976.7%−1.89%0.250 · 0.250 · 0.250 · 0.250
IVP 역분산+18.30%1.8673.3%−4.30%0.427 · 0.191 · 0.255 · 0.126
★HRP+17.95%1.8373.3%−4.42%0.434 · 0.192 · 0.250 · 0.125

판정: 미달 — 하위3 −1.89%→−4.42%(악화) · 승률 76.7%→73.3%(악화). 둘 다 졌다.

진단 두 개를 더 돌렸고 셋 다 HRP 가 졌다:

왜 졌나 — 우리에겐 HRP 가 고치는 병이 없다

네 트랙 상관은 비대각 |max| 0.142, 상관행렬 고유값 [0.845·0.869·1.138·1.148], 조건수 1.36. HRP 가 겨냥하는 것은 마코위츠의 저주 — 자산이 강하게 상관돼 공분산이 특이에 가까워질 때 2차 최적화가 폭주하는 병이다. 조건수 1.36 은 그 병이 없다는 뜻이다. 그리고 무상관·유사 Sharpe 자산에서 동일비중이 이론적 최적이다. 우리는 트랙을 일부러 무상관으로 지었고, 그래서 분산 이득을 설계 단계에서 이미 다 받았다. HRP 가 더 찾을 것이 남아 있지 않았다. ★이건 프라도의 반례가 아니라 적용 조건의 확인이다.

가는 길에 잡은 버그 셋 (셋 다 조용히 틀렸을 것들)

  1. R 분모를 실현 |수익| 로 썼다 → 수직 만료 건에서 R 폭발, 하루 82R(위험 1%×0.20 이면 베팅당 ±0.2%). strat_outcome docstring 의 +87.88R 과 같은 병을 내가 재도입했다. 분모는 **의도한 위험(장벽 σ)**이다.
  2. base_day 를 안 넘겨받았다assemble() 이 d0 를 0 기준으로 재기준화하는데 t4_daily()d0.min()(=0)을 base 로 반환했다. T4 계열이 18,267일(50년) 전에 꽂혀 T1~T3 와 달력이 한 칸도 겹치지 않았다. 표는 멀쩡해 보였고, EW 만 맞고 IVP·HRP 가 음수로 나온 것이 유일한 단서였다.
  3. 분산 0 을 무위험으로 읽었다 — 아직 시작 안 한 트랙은 수익이 전부 0 이고, 역분산은 1/1e-18그 죽은 트랙에 전 비중을 준다. 분산 0 은 무위험이 아니라 미거래다.

㊼ CPCV · DSR · PBO — 프라도 정본 절차로 T4 재판정. 미달

사전선언(실행 전 고정): N=6 그룹 · k=2 → C(6,2)=15 분할 · 5 경로 · 주 q=20%(사전등록치) · 시행 33(㊺ 누적 32 + 1) · 관문 3개 전부여야 통과 — ① 5경로 Sharpe 전부>0 ② DSR≥0.95 ③ PBO≤0.50.

★기계부터 검정했다. CombinatorialPurgedCV 는 구현돼 있었지만 한 번도 쓰인 적이 없었고, ㊼ 는 path_map() 역인덱스에 전적으로 의존한다. 알려진 답 5종을 먼저 못박았다 (tests/validation/test_cpcv_path_reassembly.py): 분할·경로 수가 이항계수와 일치 · 역인덱스가 전단사 · 각 경로가 전 표본을 빠짐없이·중복없이 덮음(덮어쓰기 0·구멍 0) · 엠바고 단조성.

경로별 Sharpe (행=경로 · 열=확신 상위 q)

1%5%10%20%30%50%
경로15.075.013.672.060.67−1.50
경로24.804.803.801.920.56−1.49
경로34.874.883.922.260.73−1.18
경로44.834.953.962.320.94−1.22
경로54.695.064.111.940.60−1.65

판정: 미달.

가는 길에 잡은 지표 버그 둘

  1. 연율화 오류 — Sharpe 를 "베팅이 있던 날"만으로 재고 √365 를 곱했다. q=1% 에서 Sharpe 7.5 가 나왔고, q 마다 관측 수가 달라 q 끼리 비교조차 성립하지 않았다. 달력을 빠짐없이 채워야 한다 — 베팅 없는 날의 수익은 0 이고 그게 계좌의 사실이다.
  2. DSR 계열 5배 뻥튀기 — 5경로를 이어붙였다. 경로들은 같은 데이터를 공유해 강하게 상관되는데, 이어붙이면 독립 관측 5배인 척하게 된다. 경로 평균을 써야 한다.

위약 설계 실패 — 쓰지 않았다고 적는다

순환 시간 이동 M=64 의 위약 t 는 −21.01 ± 0.80. 0 근처가 아니다. 이유는 명확하다: 무기술 베팅도 매번 비용/장벽 ≈ 0.1R 을 잃으므로 귀무의 중심이 비용 드래그에 끌려간다. 그리고 표준편차 0.80 은 38,000건 평균의 변동이라 참조로 쓰기엔 지나치게 좁다. "실측 5.96 > 위약 97.5%분위 −19.49" 는 "모델이 동전던지기보다 낫다" 만 말한다. 그건 내가 물어야 할 질문이 아니었다. 이 판정은 쓰지 않았다.

★남은 미해결 — 관측 단위가 t 를 15배 바꾼다

같은 대상(q=20%)에 두 측정이 어긋난다:

균일성은 50종목 동시 베팅을 전부 중복으로 세고(유효 1,999), 달력일은 하루 안의 롱숏 상쇄를 분산 감소로 인정한다. 둘 다 방어 가능한 분모이고 답이 반대다. 확인한 것: R 배수는 깨끗하다 (|max| 1.2 · 장벽 σ 최소 0.14% → ㊻의 폭발 병 없음). 이건 아직 못 가렸다고 적는다. 다만 결론은 이것과 무관하게 정해진다 — 달력일 t 를 액면 그대로 받아도 DSR 이 기각한다.

DSR 의 한계도 적는다: 시행간 SR 분산 6.42 는 q 격자(4.94~−1.41)가 거의 다 만든 값인데, q 격자는 독립 탐색 6회가 아니라 중첩 단조 계열이다. 탐색 폭을 과대평가했을 수 있다. 사전선언대로 두고 바꾸지 않았다.

배포에 대한 조치: 없음

T4 의 모델·임계는 동결이고 바꾸면 그 순간 기록이 전부 무효다(PAPER_TRACKS_PLAN §5). ㊼ 가 더한 것은 "부호는 5경로에서 견고하고, 크기는 다중검정을 못 넘는다" 이며, 이는 기존 지위(판정 불가 · 사전등록 가설)와 정확히 같다. 라이브 반영 없음.


㊽ 블록 부호반전 — 관측 단위를 가렸고, ★㊼ 의 ② 판정을 철회한다

㊼ 가 남긴 세 문제(관측 단위 15배 · 위약 설계 실패 · DSR)는 뿌리가 하나였다 — 유효 표본 크기. 그래서 하나의 실험으로 셋을 풀었다. 그리고 ㊼ 의 실패 판정 중 하나는 내 버그였다.

설계 — 블록 부호반전 무작위화

무기술 귀무 H0 는 "확신의 부호가 결과와 무관" 이므로 side 는 교환 가능하다. side 를 L일 연속 블록 단위로 뒤집는다(개별 베팅마다 뒤집으면 군집이 깨져 귀무가 과소평가). 보존: 선택 집합·선택률·시간 군집·동시성·변동성·횡단면 구조 / 제거: 기술만. gross 로 잰다(규칙 19) — 비용을 넣으면 귀무 중심이 −0.1R/베팅 으로 끌려간다(㊼ 위약이 그랬다).

판별 1 — L 증가는 의존성이 아니라 평균 누출이었다

L(일)귀무std(원)예측 √((Lμ²+σ²)/(μ²+σ²))귀무std(중심화)
11.0371.0371.001
51.2091.2501.037
201.6991.8411.029
402.2482.4131.091
803.0233.2701.252
1604.1474.5201.623

원계열의 증가는 평균 누출 예측식과 8% 이내로 일치한다 — 블록이 길수록 |블록합| 이 커져 iid 라도 귀무가 넓어진다. 중심화하면 L=40 까지 1.0 에 평평하다. ⇒ 달력일 간 의존성은 40일까지 없다. L=80·160 의 상승(1.25·1.62)은 블록이 30·15개뿐이라 생기는 무작위화 해상도 잡음이고 각각 약 2σ — 노이즈일 가능성이 크지만 보수적으로 채택한다.

★판별 2 — 관측 단위의 답: N_eff = 913

후보판정
달력일 (㊼ 가 씀)2,4052.6배 관대
균일성 유효표본 (㊺-8 이 씀)4562배 가혹
부호반전 측정치(보수)913채택

균일성이 가혹한 이유가 명확하다: AFML ch.4 의 uniqueness 는 같은 종목의 겹치는 라벨이 같은 수익 경로를 공유하는 것을 센다. 50종목을 한 인덱스에 풀링하면 횡단면 폭(breadth)까지 중복으로 세어버린다. 다른 종목의 수익은 다른 수익이고, 공통 시장 요인만 공유한다 — 그건 일별 집계의 분산에 이미 반영돼 있다. 그리고 프라도 자신의 그린올드 기본법칙에서 breadth 는 도움이지 벌점이 아니다. ⇒ ㊺ 계열이 유효표본으로 내린 기각들은 약 2배 과보수였다.

보정 결과: net 일평균 +0.6166R · 연율 SR 2.32 · t 5.96 → 보정 t 3.67 (gross 는 일평균 +2.0355R · 연율 SR 6.83 · t 17.52. 비용이 gross 의 70% 를 먹는다.)

★판별 3 — DSR: ㊼ 의 실패는 내 버그 두 개였다

  1. 단위 오류 365배. sharpe_ratio 는 문서에 명시된 대로 관측 단위당인데 나는 연율화된 SR 들의 분산 6.42 를 넘겼다. SR* 가 102(연율) 로 나왔다 — 불가능한 값이다.
  2. 탐색폭 대리변수가 부적절. q 격자(150%)는 한 모델의 중첩 부분집합이지 6번의 독립 탐색이 아니다. 그 분산은 확신이 정보를 나른다는 결과이지 탐색의 이 아니고, expected_max_sharpe 가 전제하는 독립 시행도 아니다. 실제 탐색은 ㊺-6 의 격자 6칸(k=8·16 × g=1·2·3)이고 AUC 0.51340.5245 로 좁다.

expected_max_sharpe 구현은 시뮬레이션으로 대조해 정상 확인(N=33·v=1: 시뮬 2.081 vs 구현 2.112).

시행간 SR sd(연율)SR*(연율)DSR(n=2,405)DSR(N_eff=913)
0.18 (CPCV 경로간)0.381.00000.9989
0.40 (㊺-6 실제 격자)0.840.99990.9902
0.601.270.99660.9522
1.002.110.70410.6294
1.503.170.01480.0902
2.53 (q격자 — 부적절)5.340.00000.0000

㊼ 의 "② DSR 실패" 는 철회한다. 단위를 고치고 N_eff 를 측정치로 두고 탐색폭을 실제 모델 격자에서 재면 DSR 0.99 로 통과한다. 다만 정직하게 적는다 — 이 판정은 탐색폭 입력이 정한다. 0.40 은 AUC→SR 선형 환산 대리값이지 측정된 Sharpe 분산이 아니다. sd ≤ 1.0 이면 통과, ≥ 1.5 면 실패다.

㊼ 판정 정정

관문㊼ 원판정정정
① 5경로 전부 양(+)통과통과 (1.92~2.32)
② DSR ≥ 0.95실패 0.0000통과 0.9902 (내 단위 버그 + 탐색폭 오지정)
③ PBO ≤ 0.500.0000 "통과"판정 불가 — 중첩 단조 축이라 구조상 0. 설계 결함

㊼ 종합 "미달" 은 무효다. 인샘플 CPCV 기준으로는 ①② 통과, ③ 판정 불가다.

★그럼에도 승격하지 않는 이유 (전부 그대로 유효하다)

  1. 전부 인샘플이다. CPCV 로 교차검증했지만 피처·k·g·수직봉·비용가정은 전부 이 데이터를 보며 정했다.
  2. 체결 가정이 낙관적이다. 장벽 가격 체결 · 왕복 8bp 올인. gross 의 70% 를 비용이 먹는 전략이라 비용 가정이 조금만 틀려도 결론이 바뀐다. 이건 페이퍼로 검증되지 않는다.
  3. 탐색폭이 측정치가 아니라 추정치다(위 참조).
  4. N_eff 913 도 보수적 채택값이다. L=80·160 의 상승이 노이즈면 N_eff 는 2,300 에 가깝다.

★단 하나 실무적으로 바뀐 것: T4 사이징 ×0.20 의 근거가 "인샘플에서 유의하지 않았으므로" 였는데 그 전제는 이제 틀렸다. 그렇다고 올리지 않는다 — PAPER_TRACKS_PLAN §5 는 사이징 상향을 전방 표본이 판정 기준을 넘긴 뒤에만 허용한다. 근거 문구만 정정하고 숫자는 동결한다.


㊾ 유보 넷을 결론으로 — ★모델은 맞고 임계가 틀렸다

㊽ 이 남긴 "유보 4개" 는 결론이 아니라 미룬 것이었다. 넷 다 닫는다. 그리고 그 과정에서 배포된 설정이 탈락했다.

결론 표

유보방법결론
① 전부 인샘플종목 × 시간 이중 분리 홀드아웃신호는 실재한다 — gross 연율 SR 3.42·4.62
② 비용 가정손익분기 역산q=20% 탈락 — 손익분기 6.3·8.3bp < 실제 8~10bp
③ 탐색폭 추정치(k,g) 6칸의 일별 Sharpe 실측측정 0.956 (내 추정 0.40 은 과소, q격자 2.53 은 과대)
④ N_eff 보수값분산비(Lo-MacKinlay)1,537 — ㊽ 의 913 은 gross 기준 오류였다
PBO 판정 불가전략 축을 비중첩 (k,g) 6칸으로0.0000 통과

㊾-1 격자 PBO — 전략 축을 비중첩으로

㊼ 의 PBO 는 q 격자(중첩 단조)라 항등식이었다. 실제로 훑은 서로 다른 후보는 ㊺-6 의 (k,g) 6칸이다. 프로토콜은 ㊺-6 과 동일(PurgedKFold 5 · 엠바고 10일).

이벤트연율 SR(q=20%)
k=8 g=293,7150.86
k=8 g=1196,9392.06
k=8 g=354,5630.70
k=16 g=2 (배포)190,5882.32
k=16 g=1400,8793.17
k=16 g=3110,7991.24

PBO = 0.0000 통과. 단, IS 최적(k=16 g=1)이 전 구간 우세해 선택이 안정적인 결과이므로 강한 형태의 통과는 아니다 — PBO 가 잡는 것은 "선택이 뒤집히는" 과적합이고, 여기선 안 뒤집혔다.

측정된 탐색폭 = 0.956 (q=10% 면 1.458, q=5% 면 1.867 — 계층이 좁을수록 칸 간 격차가 커진다).

q배포칸 SR탐색폭SR*DSR(N=2,405)DSR(N_eff=1,537)
20%2.320.9562.020.7800.731 실패
10%4.121.4583.080.9960.984 통과
5%4.921.8673.940.9940.977 통과

⇒ ㊽ 이 "DSR 통과" 라 적은 것은 탐색폭을 0.40 으로 과소추정한 결과였다. 실측 0.956 에서 q=20% 는 실패한다. 정정한다.

㊾-2 이중 분리 홀드아웃 — ★가장 중요한 검정

학습 = 종목 절반 · ≤2023-12-31 / 검정 = 나머지 종목 · 2024-02-01 이후(엠바고 30일). 두 축을 동시에 끊는다 — 하나만 끊으면 다른 축으로 정보가 샌다. 하이퍼파라미터는 배포값 고정. 여기서 아무것도 고르지 않았다.

배정q베팅gross SRnet SR(8bp)net SR(10bp)손익분기
짝→홀20%7,8203.42−0.98−2.176.3bp
짝→홀10%3,9103.53+0.64−0.149.6bp
짝→홀5%1,9554.32+2.34+1.8016.2bp
홀→짝20%8,5164.62+0.16−1.028.3bp
홀→짝10%4,2584.79+1.82+1.0212.5bp
홀→짝5%2,1294.98+3.04+2.5018.6bp

사전 관문(q=20% net Sharpe > 0, 양방향): 실패 — −0.98 · +0.16.

★그러나 gross 는 3.42·4.62 로 강하다. 학습에 없던 종목, 학습 이후 기간에서도 신호가 산다. 즉 모델이 틀린 게 아니라 임계가 틀렸다. q=20% 는 건당 엣지가 고정비용 810bp 를 못 넘는다. q=5% 는 건당 엣지가 4배라 손익분기가 1619bp 로 올라가고, **양방향·실제 수수료에서 양(+)**이다.

④ N_eff 정정 — ㊽ 의 913 은 틀렸다

분산비(Lo-MacKinlay)는 무작위화 해상도 문제가 없다. net 계열에서: L=280 의 VR 은 0.9451.028(z 전부 |z|<0.8, 유의한 의존성 없음), L=320 에서 1.564. 보수 채택 → N_eff 1,537 · 보정 t 4.76.

㊽ 이 913 을 얻은 이유가 확인됐다 — gross 계열로 보정계수를 재서 net t 에 적용했다. 비용항은 극단적으로 자기상관돼 있다(VR: L=20 에서 4.18, L=320 에서 33.0). 일별 베팅 수와 변동성 레짐이 지속되기 때문이다. gross VR 3.28 vs net VR 1.56 이 그 차이다. 보정계수는 판정하려는 계열 자신에게서 재야 한다.

⇒ 조치: 신호는 동결, 판정 기준을 q=5% 로 사전등록

q=5% ⊂ q=10% ⊂ q=20% 이므로 엔진은 손대지 않는다(q=20% 로 계속 생성). summary() 에 계층 보고만 추가했다. 이 등록은 전방 표본이 0 인 시점(2026-08-08)에 이뤄졌다.


㊿ 네 트랙을 같은 잣대로 — 그리고 검증을 코드로 강제했다

㊿-A 이중 분리 홀드아웃 (종목 × 시간, 양방향)

학습 = 종목 절반 · ≤2023-12-31 / 검정 = 나머지 종목 · 2024-02-01 이후(엠바고 30일).

트랙설정검정 (짝→홀 / 홀→짝)학습판정
T1 폭돌파+0.160R · +0.224R (t 1.37·2.03)+0.378·+0.473R양방향 양(+)
T2 모멘텀q=20%SR −0.01 · +0.30−0.10·+0.68한쪽 ~0
T2 모멘텀q=10%SR +0.17 · +0.43−0.04·+0.72양방향 양(+)
T3 비유동성q=20%SR +0.38 · −0.41+0.47·+0.72부호 뒤집힘
T3 비유동성q=10%SR +0.34 · −0.65+0.09·+0.68부호 뒤집힘
T4 MLq=20%SR −0.98 · +0.16(8bp)실패(㊾)
T4 MLq=5%SR +2.34 · +3.04(8bp) · +1.80 · +2.50(10bp)양방향 양(+)

검정력: T2·T3 는 참 SR 1.0 에 대해 43.5%, T1 은 51~56%. ⇒ 음(−)은 기각이 아니라 판정 불가다. 단 T3 의 부호 뒤집힘은 다르다 — 한쪽 +0.38 / 다른 쪽 −0.41 은 크기가 아니라 방향이 갈린 것이고, 이건 검정력 문제가 아니라 종목 집합을 바꾸면 결과가 뒤집힌다는 뜻이다. 일반화 실패의 전형적 서명이다.

순위가 뒤집혔다. 인샘플 지위는 T2·T3(P 0.965·0.980 통과) > T4(미검증) 였는데, 같은 이중분리 잣대에서는 T4(q=5%) > T1 > T2(q=10%) > T2(q=20%) > T3 다. "인샘플 통과"는 이 잣대를 통과했다는 뜻이 아니었다.

㊿-B 검증을 코드로 강제했다 — validation/audit.py

"버그가 있었습니다 / 다시 해보니 뒤집혔습니다" 가 이 세션에서만 일곱 번 나왔다. 전부 결과를 낸 뒤에 알아챈 것이다. 그래서 검사를 코드로 옮겼다. 검사 12종 · 테스트 20종 — 각 검사는 실제로 터진 사고 하나에 대응하고, 테스트는 그 사고를 재현해 넣어 감사가 막는지 증명한다(추측으로 만든 항목 없음).

★그리고 만든 직후 첫 실행에서 세 개를 잡았다:

  1. 다리당 1종목 — 25종목 패널을 절반 나누니 q=5% 가 1종목. '분산'이 아니라 개별 종목 사연
  2. q10 ≡ q5k=max(1,round(n·q)) 라 둘 다 k=1. 표에는 두 줄인데 같은 전략이었다. 이걸 두 시행으로 세면 다중검정도 분위 스윕도 거짓이 된다
  3. 감사 범위 오설정 — 판정 제외한 설정까지 감사해서 엉뚱하게 막혔다. 막은 값 |max| 0.5092 를 파보니 TRX +95.8%(2024-12-02) 라는 진짜 사건이었다. ★한도를 올려 통과시키지 않고 원인을 봤고, 답은 "감사 대상 = 판정 대상" 이었다

프로토콜 전문: docs/VERIFICATION_PROTOCOL.md · CLAUDE.md §6.5 에 NON-NEGOTIABLE 로 박았다.


(51)~(57) ★두 트랙을 살렸다 — 병목은 신호가 아니라 비용이었다

사용자 지시: "'이 전략은 못 씁니다'가 제일 싫다." 그래서 음(−)이 나올 때마다 원인을 특정 → 고친 버전을 내거나 → 왜 못 고치는지를 숫자로 내는 규율로 갔다. 결과: T3 는 살아났고, T4 는 피처로는 못 늘렸지만 체결 구조로 늘었다.

T3 — net>0 42% → 92%

단계무엇결과
(51) 원인가설 4개를 미리 적고 측정집중도 30%·ADV분산 45~55배·유지율 90% 정상. gross 양방향 양(+)비용이 원인
(52) 비용 레버 16칸보유×상한×체결양방향 통과 2/16, 최소 +0.02 — 아슬
(53) 판정 교체무작위 절반 분할 M=50gross>0 76%(천장) · 배포 net>0 42% · h21·maker 66%
(54) 버퍼 존진입 상위 q, 청산 (q+b) 밖에서만b0.20·h21: net>0 92% · 비용 0.92→0.48bp
(56) 대조군다리 크기 효과 제거같은 다리 대조군 78% vs 승자 94%분산 효과 아님

★기제: 버퍼는 실효 보유기간을 늘린다. 비유동성 프리미엄은 천천히 쌓이는 팩터라 오래 들수록 더 걷는다. 다리를 4.5→5.3 으로 키우면 gross>0 가 +2%p 오르는데 버퍼는 +18%p 올렸다 — 크기로 설명이 안 된다.

T3 는 폐기 대상이 아니라 설정이 틀렸던 것이다. h7·상한96·taker(42%) → h21·버퍼0.20·maker(92%).

T4 — 피처는 실패, 체결이 성공

피처OOF AUCq5 홀드아웃 net(10bp)비용여유판정
base110.5219+1.80 / +2.501.62 / 1.86배기준선
+A VPIN130.5238 (+0.0019)+1.35 / +3.211.44배 감사 막힘불가
+A+C 느린신호160.5208 (−0.0011)+1.73 / +2.391.66 / 1.84배AUC 악화
(57) 체결11+2.26 / +2.961.99 / 2.29배채택

· VPIN 은 AUC 를 아주 조금 올렸지만 홀드아웃에서 비용여유가 관문 미달이었다 · 느린 신호 주입(T1 폭 · T2 모멘텀순위 · T3 유동성순위)은 오히려 AUC 를 떨어뜨렸다. ⇒ 트랙을 조건변수로 합치는 발상은 이 데이터에서는 안 통한다 · ★체결 구조: 삼중장벽은 청산 가격을 미리 안다. 익절(롱 상단·숏 하단)은 지정가 = maker, 손절은 스톱 = taker. 실효 왕복 10.0 → 8.13bp, net SR +26%

★1차 판에서 나는 "청산 전부 maker(7bp)" 로 잡아 여유 2.31/2.66배를 냈다. 손절이 스톱이라는 걸 빠뜨렸다. 정정하니 절감폭이 절반 이하로 줄었다(1.99/2.29배). 낙관 가정은 스스로 잡아야 한다.

외부 탐색이 확인해준 것

· [arXiv 2605.04004] MNQ 5분 OHLCV 신호군 14종 전부가 거래비용 미달 — 우리 T4 q=20% 사망과 같은 병이다. 독립 확인 · 크립토 퍼프 메타 오더플로우: IC 0.10·t 6.86 인데 raw alpha 0.42bp@30s = 우리 비용의 1/20 ⇒ 초단타는 우리 비용 구조로 원천 봉쇄 · VPIN 크립토 검증: 유효하나 감쇠(2024 +82bp → 2026 +12bp/거래)

★단타 빈도 — 이미 달성돼 있고, 더 빠르게는 못 간다

q거래일평균
20%38,11815.85
5%9,5293.96

장벽 축척 실측: 장벽 ∝ k^(−0.533). k 를 2배로 하면 장벽 69%, 비용/장벽 1.45배 악화.

k장벽비용/장벽(10bp)판정
16 (현재)100.2bp0.100R여유 2.4배
3269.3bp0.144R여유 1.65배 — 가능
6447.9bp0.209R여유 1.13배 — 아슬
12833.1bp0.302R비용 > 엣지. 죽음

프론티어는 k=32~64. k=32·q=5% 면 일 8건. 그 이상은 수수료가 먹는다.


(58)(59) 배포 반영 — ★정합 검사가 또 잡았다

사용자 결정: 개선안을 배포에 반영. 그래서 프로토콜 Tier 2.3(엔진 재생 대조) 을 돌렸다.

(58) 정합 검사 — 검정 스크립트 vs 배포 모듈

항목결과
점수최대차 0.000e+00 (완전 일치)
valid 종목 수10 vs 10 (일치)
다리 크기스크립트 3/3 vs 배포 2/2불일치

원인: n 을 세는 시점이 다르다. · (54) 스크립트: n = valid.sum()점수 유무 반영 전에 센다 · 배포 모듈: 점수가 있는 종목만 센다 ⇒ 밴드 k_out = round(n·(q+b)) 이 갈리고 유지/청산 판단이 달라진다.

배포 모듈 쪽이 옳다 — 점수 없는 종목은 줄을 못 세운다. 그러면 규칙은 하나다: 배포할 코드로 검정한다. (54) 의 92% 는 배포 안 될 코드에 대한 숫자였다.

(59) 배포 모듈로 재검정 — 같은 50 분할

설정net 중앙net>0gross 중앙gross>0
OLD h7·b0·taker−0.0842.0%0.3176.0%
NEW h21·b0.20·maker0.7392.0%0.8094.0%

42.0% → 92.0%. 스크립트 구현과 소수점까지 같았다 — 개별 리밸런스의 다리 크기 차이가 50 분할 통계에는 영향을 주지 않았다. 그래도 이제 이 숫자는 실제로 배포될 코드의 것이다.

배포 반영 내역

트랙바뀐 것근거
T3hold 7→21 · buffer 0.20 신설 · fill_factor 0.4(51)~(59)
T4비용 회계: 익절 7bp(지정가) / 손절 10bp(스톱)(57)

· T3 target_weightsw_prev 인자 추가(버퍼). w_prev=None 이면 구 규약 — 검정 재현용 · T4 resolve()gross > 0 로 익절/손절을 갈라 비용을 다르게 문다 · ★두 트랙의 전방 기록은 리셋된다. 새 사전등록으로 다시 시작한다 · 테스트 추가: 버퍼 유지/청산 불변식 2종 · 익절·손절 비용 비대칭 3종


(60)(61) T2 에 T3 프로토콜 적용 — ★같은 약이 독이었다

T2 와 T3 는 구조가 완전히 같다(달러중립 롱숏 · 상하위 20% · 7일). 점수만 다르다. T3 를 살린 것이 보유 연장 + 버퍼 + 지정가였으니 T2 에도 대봤다. 결과는 정반대다.

진단 — 무작위 절반 분할 M=50 (T3 와 동일 분할·동일 관문)

T3T2
현 배포 net>042.0%68.0%
gross>0 (천장)76.0%74.0%
gross − net 격차34%p6%p
다리 유지율90%63%
상위3 기여30%29%

T2 는 비용이 주범이 아니다. 격차가 6%p 뿐이다.

레버 격자 24칸 — T3 의 약이 T2 에는 독

설정net>0gross>0다리
h7 · b0 · maker72.0%74.0%4.6
h7 · b0 · taker (현 배포)68.0%74.0%4.6
h7 · b0.10 · maker64.0%68.0%5.5
h7 · b0.20 · maker56.0%58.0%6.0
h21 · b0 · maker46.0%48.0%4.6
h14 · b0 · taker44.0%48.0%4.6

버퍼를 키울수록·오래 들수록 나빠진다. gross 까지 74→68→58% 로 떨어진다 — 비용 얘기가 아니라 신호가 상한다는 뜻이다.

★기제: 모멘텀은 빨리 썩는다. 30일 형성 신호는 7일이면 소진되고 21일이면 반전 구간이다. 비유동성은 천천히 변해(유지율 90%) 오래 들수록 더 걷혔지만, 모멘텀 순위는 빨리 바뀐다(63%). 같은 구조라도 신호의 반감기가 다르면 정반대 처방이 필요하다.

(61) maker 개선은 실재하나 작다

같은 50 분할 짝지어 검정: 50/50 전 분할에서 개선(비용만 줄이므로 당연) · 평균 차이 +0.032 Sharpe · 부호검정 p 1.78e-15. 그런데 net>0 이 68%→72% 인 실체는 부호가 뒤집힌 분할 2개다.

T2 는 배포값을 바꾸지 않는 것을 권한다: · 이득이 +0.032 Sharpe 로 경제적으로 무의미하다 · 7일 보유 · 빨리 썩는 신호라 미체결 비용이 T3 보다 훨씬 크다 — 못 채우면 3bp 아끼려다 움직임 전체를 놓친다 · 천장(gross 74%)이 낮아 비용 축에서 더 얻을 게 없다

★내가 틀렸던 것

㊿ 에서 나는 T2 를 "한쪽 ~0(−0.01/+0.30) · 가장 약한 트랙"이라고 적었다. 그건 분할 2개를 보고 한 말이었다. 50 분할로 재보니 68% 다. T3 에 대해 "표본 2개로는 못 판단한다"고 써 놓고 T2 에는 안 지켰다.


(70)(71) 채널 평균회귀 — ★캐시가 틀렸다. 라이브가 옳았다

사용자 지시로 채널 계열을 살릴 방안을 찾는 중, 검정 캐시 자체가 오염된 것을 발견했다.

(70) 레짐 조건 검정 — 감사가 막았다

외부 탐색이 정확한 가설을 줬다: · [SSRN 5775962] BTC/USDT 4H 2023~25 — 볼린저 평균회귀는 레인징(ADX<20) 수익요인 1.62 / 추세(ADX>30) −0.74. "레짐 감지가 생사를 가르는 유일한 요인" · ATR 필터(ATR > 1.5×20기평균 시 중단)가 최대 손실의 72% 를 막았다 · 실패 기제: "평균이 움직이면 오늘의 과매수가 내일의 정상이 된다" — ③-c 가 잰 것이 이것이다

그런데 no_lookahead 는 통과했는데 크기 상한이 막았다: 거래 R 의 |max| 36.22. · 손절거리 최소 0.0266% → R = net_ret/stop_frac 이라 폭발 · |R|>3 인 12.85% 의 거래가 총 R 의 89.1% 를 차지 · 평균 R +0.72 는 꼬리가 만든 착시였다 ⇒ 막힌 채로 판정하지 않았다. 레짐 결과는 무효다.

(71) 모순 규명 — 캐시 vs 라이브

같은 기간(2026-06~)에서 캐시 승률 52.7% vs 라이브 33.1%. 8년 내내 캐시는 52~55% 로 일정하다 — 시간 감쇠가 아니라 다른 물건이다.

라이브 실제 청산 118건을 받아 대조했다:

요인백테스트(캐시)라이브 실측
승률53.9%33.1%
승 평균 R+2.320+1.021
손절 R정확히 −1.000−1.614 (−1.5 이하 39.6% · 최악 −4.05)
기대 R+0.722−0.507

분해가 결정적이다: 승률만 라이브 값으로 바꾸면 기대 R 이 정확히 0.000 이 된다. 승률 차이가 모순의 전부다.

승률이 왜 다른가 — 라이브 청산 사유 분해: · stop 48건 평균 −1.614R ← 백테스트는 −1.000 고정 · horizon 43건(36.4%) 평균 −0.243R ← 채널 종료 MTM 청산 · target 27건 평균 +1.039R ← 백테스트는 목표를 2.5R 로 가정 · 진입=청산이 같은 시각인 거래 21.2%(25건) — 진입한 봉에서 바로 나간다

⇒ 세 개의 독립 결함

  1. 목표 R 불일치 — 백테스트 2.5R vs 라이브 1.04R
  2. 손절이 −1R 이 아니다 — 갭 체결로 −1.6R, 최악 −4.05R
  3. horizon 청산 36% — 백테스트는 MTM 으로 넘긴다

캐시 +0.722R 은 낙관 가정의 산물이고 라이브 −0.507R 이 실측이다. 그리고 시장이 나빠져서가 아니다 — 백테스트가 처음부터 틀렸다.

재생성 규약 (다음 단계)

  1. 손절은 실제 체결가로(−1R 고정 금지)
  2. 목표는 라이브가 실제로 쓰는 값으로(2.5R 가정 제거)
  3. horizon 청산을 백테스트에도 반영
  4. 교란 검사(no_lookahead)를 채널 시뮬 전체에 건다 ★검수 기준: 재생성 후 기대 R 이 라이브 −0.507R 근처로 나와야 정합이다.

(74)~(76) 채널 손절거리 스윕 — ★레버는 찾았으나 정합은 못 맞췄다

(74) 갭은 문제가 아니었다

라이브 손절 48건에서 갭을 실측: 중앙 0.1219%작다. 백테스트 손절거리 중앙 1.223% vs 라이브 0.313%4배 차이. 넓은 손절에서는 갭 페널티가 0.10R 뿐이다. ⇒ 갭이 아니라 손절거리가 문제다.

(75) 손절거리 폭 — 위약은 통과

손절거리가 넓을수록 승률이 오른다: 48.3 → 51.3 → 53.3 → 55.3 → 55.9%. 기제: 좁은 손절은 잡음에 먼저 맞는다. 채널 회귀는 되돌아오기까지 시간이 걸린다.

하한(선택분위)선택 R시험 R시험 승률
0% (0.027%)+0.428+0.50447.6%
25% (0.822%)+0.524+0.59251.0%
50% (1.285%)+0.551+0.57552.4%
75% (2.056%)+0.539+0.53355.0%
90% (3.235%)+0.518+0.32054.8%

선택 구간이 고른 q50 · 시험 R +0.575 · 위약 3000회 대비 100%분위 · 감사 클린.

★(76) 그러나 검수 기준은 미달 — 정직하게 적는다

조건 없음도 +0.504다. 손절거리 필터의 기여는 +0.071 뿐이고, 그보다 큰 문제는 백테스트 +0.504 vs 라이브 −0.507 의 1.01R 격차가 그대로라는 것이다.

남은 결함은 (73) 에서 확정한 목표 R 이다(백테스트 2.3 vs 라이브 0.93). 승리에 목표 상한을 씌워보면:

목표 상한기대 R
2.30R (백테스트)+0.326
1.50R+0.138
1.02R (라이브)−0.027
0.93R−0.063

라이브 목표 R 을 그대로 쓰면 기대값이 0 근처다.

그리고 그것도 낙관이다 — 목표 상한은 승리만 자르고 손실은 안 자른다. 실제 라이브는 목표 0.93R 인데 승률이 33% 다. 가까운 목표인데도 못 닿는다는 뜻이고, 그건 채널이 라이브에서 훨씬 빨리 끝난다(horizon 36.4% · 평균 −0.243R)로만 설명된다. 백테스트는 horizon 을 MTM 으로 넘기고 그 R 이 양(+)일 수 있다.

현재 지위 — 폐기 아님, 미해결 1건 남음

· ★찾은 것: 손절거리가 레버다(넓을수록 승률↑, 위약 대비 100%분위) · ★못 맞춘 것: 목표 R·horizon 규약. 이걸 라이브와 맞추면 기대값이 0 근처로 내려간다 · 다음 후보: horizon 청산 규약을 백테스트에 정직하게 반영한 뒤 손절거리 레버를 다시 건다. 그때도 0 근처면 "이 신호로는 못 넘는다" 가 숫자로 확정된다


(77)(78) ★★채널 평균회귀가 살아났다 — 8년간 문헌이 안 쓰는 목표로 검정하고 있었다

사용자 지시: "네가 버린 전략들을 다른 사람들은 잘만 쓴다. 오픈소스 전수조사하고 처음부터 다시." → 조사가 첫 줄에서 답을 줬다.

전수조사가 지목한 것 — 청산 목표

평균회귀의 표준 청산은 중앙선(평균) 이다: · "buys when price touches the lower band and sells at the middle or upper band" · [SSRN 5775962] 레인징 수익요인 1.62 / 추세 −0.74 · [nkaz001/hftbacktest] 지정가·큐 위치·레이턴시까지가 현실 기준 · [Jesse] "zero look-ahead bias" 를 최우선 설계 목표로

우리는 먼 레일(구조 A)로만 8년치를 검정했다. 코드에 구조 B(중앙선)가 있었는데 한 번도 안 썼다.

(77) 세 구조 동시 비교 — 라이브 승 R(+1.021) 과의 차이

구조승률승 R라이브와의 차이
A 먼 레일(우리가 쓴 것)48.3%+2.319+1.298 ← 2배 넘게 어긋남
★B 중앙선(문헌 표준)56.6%+1.157+0.136 ← 거의 일치
C 반익절+본전56.2%+1.319+0.298

구조 B 가 라이브를 재현한다. 검정을 여기서 다시 시작했다.

(78) 구조 B + 손절거리 폭 — ★통과

하한(선택분위)선택 R시험 R시험 승률승 R
0% (0.027%)+0.170+0.21855.8%+1.272
25% (0.822%)+0.292+0.36360.9%+1.181
50% (1.285%)+0.338+0.39964.6%+1.093
75% (2.056%)+0.350+0.37367.3%+0.955

선택 구간이 고른 q75 · 시험 기대 R +0.373 · 승률 67.3% · 거래 1,741 · 위약 3000회 대비 100%분위 · ★라이브 정합 관문 통과 — 승 R +0.955 vs 라이브 +1.021 · 차이 −0.066(허용 ±0.30) · 조건 없음 +0.218 → 조건 적용 +0.373 (개선 +0.155) · 감사 전 항목 통과

⇒ 무엇이 잘못이었나

신호가 아니라 검정이 틀렸다. 세 가지가 겹쳐 있었다:

  1. 목표선(72) — 도달 판정은 움직이는 선, R 계산은 진입 시점 선
  2. 청산 구조(77) — 문헌이 쓰지 않는 먼 레일로 8년치를 쟀다
  3. 손절거리(74·78) — 좁은 손절이 잡음에 먼저 맞는다

셋을 다 고치니 라이브와 정합하고 위약을 넘는다. ★"이 전략은 못 쓴다"가 아니라 "이 검정이 틀렸다" 였다.


(79)(80) 계좌 시뮬 — ★"돈으로 얼마" 는 아직 못 낸다. 정합이 안 맞는다

(78) 이 구조 B 의 거래 단위 정합을 통과시켰기에 계좌로 넘어갔는데, 거기서 다시 갈렸다.

(79) 계좌 시뮬 — 숫자가 물리적으로 이상하다

초기 $1,000 · 최대 8포지션 · 노출 80% · 건당 1% 위험(기존 규약 그대로):

구조구간체결배수MDD버킷
A 먼 레일선택(2019~23)3,780806.96.5%29/30
A 먼 레일시험(2024-01~)1,71613.95.5%14/14
B 중앙선선택3,780111.37.8%28/30
B 중앙선시험1,7166.67.4%14/14

배수 806 은 불가능하다. 5년에 80,590% 다. 시험 13.9배(2.5년)도 마찬가지다. 그리고 감사가 "구조 B 가 A 보다 낫다" 관문에서 막았는데, 그 관문 자체가 내 실수다 — A 는 라이브 정합을 못 하는 물건이라 배수 비교의 대상이 아니다.

★(80) 같은 기간 직접 대조 — 여기서 진짜가 드러났다

라이브 가동 구간(2026-06~)만 잘라 같은 계좌 규약으로:

설정후보체결배수총손익
A 먼레일·하한없음4223581.184+$184
B 중앙선·하한없음4223581.132+$132
B 중앙선·하한2.056%47411.040+$40
라이브 실측1180.978−$22

캐시 승률 56.4%(B) vs 라이브 33.1% — 여전히 23%p 차이.

⇒ 정직한 현재 지위

· (78) 이 통과시킨 것은 승 R 정합 하나다(+0.955 vs +1.021). 그건 진짜 개선이다 · 그러나 승률이 여전히 23%p 갈린다. 승 R 이 맞아도 승률이 다르면 계좌 결과가 다르다 · ⇒ "돈으로 얼마" 는 아직 못 낸다. 배수 6.6 도 13.9 도 못 믿는다 · 남은 미해결: 왜 캐시는 56% 이기고 라이브는 33% 인가 후보 — (a) 라이브 진입 필터(LVN·fill_valid)가 다른 거래를 잡는다 (b) 라이브가 포지션·노출 상한에 더 자주 걸린다 (c) ★캐시 신호 자체가 라이브가 본 신호와 다르다 (c) 라면 채널 감지(detect_sm) 자체를 라이브와 대조해야 한다 — 그게 다음 작업이다

폐기가 아니다. 구조 B 로 승 R 이 맞았고, 남은 것은 승률 한 축이다. 그러나 맞기 전에는 금액을 말하지 않는다.


4. 규칙 (재검토에서 배운 것)

  1. 배포할 코드로 검정한다 — 검정 규칙과 라이브 규칙이 갈리면 그건 다른 전략이다(자카드 28.2% 사례)

  2. 소표본의 "유망"을 믿지 않는다 — 채널 +0.659R → 사망, 돌파 OOS 2/4 → 0/4

  3. 예측을 먼저 적는다 — 폭 조건 일반성 검사가 그래서 의미가 있었다

  4. 부분 통과를 통과라 쓰지 않는다

  5. 물리적으로 불가능한 숫자는 버그다 — +87.88R 이 손절하한 누락을 잡았다

  6. 같은 이름 ≠ 같은 전략 — 횡단면 모멘텀을 롱온리·200봉으로 시험하고 "엣지 없음"이라 적었다

  7. 위약은 구성·비용·회전율까지 맞춰야 한다 — 안 맞으면 회전율 차이를 신호로 착각한다. 그래서 gross/net 분해를 항상 함께 낸다

  8. 기각 전에 검정력을 먼저 잰다 — "유의하지 않다"는 "엣지가 없다"가 아니다. 우리 표본에서 z≥2 는 연 41% 를 요구했고 진짜 +20% 엣지의 검정력은 14% 였다(§0.1)

  9. 모든 새 통계 절차 앞에 영점 조정 — 무엣지 계열을 '전략' 자리에 넣어 P 평균 0.5 확인. 실제로 이 검사가 "위약 풀 평균" 방식을 잡아냈다(평균 P 0.676 → 폐기)

  10. 배포 전에 엔진을 재생해 검정과 대조한다 — 이 검사 하나가 배포 직전 버그 2개를 잡았고, 둘 다 배포했으면 조용히 거래를 안 하는 상태가 됐을 것이다

  11. 검정의 계산 단위 = 배포의 계산 단위인지 확인한다 — ⑫는 모든 돌파봉을, 엔진은 종목당 1포지션을 센다. 달라도 되지만 그러면 배포 형태 그대로 다시 검정해야 한다(⑭)

  12. 영점 통과 ≠ 귀무분포가 옳다 — 영점은 위약 vs 위약만 본다. 양쪽이 똑같이 틀린 구조를 가지면 통과한다. 귀무는 전략의 시간 군집·기하까지 닮아야 한다(⑰·⑱: 폭 1.87배 차이, 기하까지 맞추자 전방 분할 판정이 0.685 → 0.990 으로 뒤집혔다)

  13. 추정기가 서로 다른 답을 주면 그게 단서다 — 부트스트랩 z 2.53 vs 치환 z 9.23 의 불일치가 귀무분포 결함을 잡아냈다. 유리한 쪽을 고르지 말고 왜 갈리는지를 판다

  14. 추정기를 바꾸면 이미 판정한 것에 전부 소급 적용한다 — 안 하면 유리한 것만 옛 방식으로 남기는 체리피킹이다

  15. 포트폴리오를 비교할 땐 위험을 먼저 맞춘다 — 무상관 계열을 섞으면 변동성이 √2 로 준다. 그대로 비교하면 "분산 효과"와 "그냥 위험을 줄인 것"을 못 가린다. ⑲에서 이 보정만으로 결론이 개선 → 악화로 뒤집혔다

  16. 질문이 바뀌면 귀무도 바꾼다 — "엣지가 있는가"의 귀무는 위약(엣지 없음)이지만 "엣지가 줄고 있는가"의 귀무는 엣지 일정이다. 후자엔 시간 라벨 셔플을 쓴다(㉑)

  17. 무엇을 빼고 보느냐가 결론을 바꾼다 — ⑭의 원R 은 단조 하락, ㉑의 초과분은 평평. 시장 기여를 안 빼면 시장 얘기를 전략 얘기로 착각한다

  18. 최악 1개는 n=1 통계다 — 최악 버킷만 보고 조합을 고르지 않는다. 하위 3개 평균처럼 표본을 늘린 지표를 함께 본다

  19. 셔플 위약은 회전율을 보존하지 않는다 — 점수를 섞으면 순위가 매번 뒤집혀 위약의 회전이 폭증한다(실측 실제 6.5 vs 위약 83.5 = 12.8배). 느린 신호 + 큰 비용에서는 z 가 엣지가 아니라 회전율을 잰다. 신호 판정은 gross 로, 비용 감내는 별도 스트레스로 — 한 숫자로 둘을 묻지 않는다(㊴-b/c)

  20. ★★"양을 늘리면 정보가 는다"는 네 번 다 틀렸다 — 지표(㉒ 분산팽창 12배) · TF(㉘) · 수익원(㊲ σ만 줄고 평균 그대로) · 종목(㊴ 거래 1.80배인데 유효 독립 0.94배, 팽창 12.0→22.8). 병목은 양이 아니라 IC(신호의 질)다. 양을 늘리는 방향의 탐색은 이미 네 번 닫혔다 — 다시 열지 않는다

  21. 파생 계열을 합칠 땐 달력이 겹치는지부터 본다 — base 를 안 넘겨받아 T4 가 50년 전에 꽂혔고 표는 멀쩡해 보였다. 트랙별 시작·종료일을 먼저 찍어보면 즉시 잡혔을 것이다

  22. 분산 0 은 무위험이 아니라 미거래다 — 역분산·HRP 는 아직 시작 안 한 계열에 전 비중을 준다. 비교는 공통 생존 구간에서

  23. 도구는 병이 있을 때만 듣는다 — HRP 는 공분산 악조건(마코위츠의 저주)의 약이다. 우리 조건수는 1.36 이라 그 병이 없었고, 무상관·유사 Sharpe 에선 동일비중이 이론적 최적이다. 이론을 적용하기 전에 적용 조건을 먼저 잰다

  24. 관측 단위를 바꾸면 t 가 15배 달라진다 — 베팅 단위(균일성 유효 456)와 달력일 단위(2,405)가 같은 대상에 t 0.39 vs 5.96 을 준다. 유리한 쪽을 고르지 말고 못 가렸다고 적는다

  25. 중첩된 단조 계열에 PBO 를 쓰면 항상 0 이다 — IS 최적이 구조적으로 OOS 최적이다. PBO 의 전략 축은 서로 겹치지 않는 후보여야 의미가 있다

  26. ★★"실패" 를 보고했으면 그것이 이론의 실패인지 내 실패인지 끝까지 가른다 — ㊼ 의 DSR 실패는 단위 365배 오류였다. 지표가 정확히 0.0000 이나 1.0000 으로 붙으면 포화이고, 포화는 거의 항상 단위·부호·스케일 버그다. 극단값은 결론이 아니라 증상이다

  27. 중첩 부분집합을 독립 시행으로 세지 않는다 — q=1%~50% 는 한 모델의 부분집합이다. 그 SR 분산은 확신이 정보를 나른다는 결과이지 탐색의 이 아니다. DSR·PBO 의 시행 축은 서로 겹치지 않는 후보라야 한다

  28. ★★균일성(uniqueness)은 횡단면 폭을 중복으로 센다 — AFML ch.4 는 같은 종목의 겹치는 라벨이 같은 수익 경로를 공유하는 것을 센다. 50종목을 풀링하면 breadth 까지 벌점이 되고, 그린올드 기본법칙에서 breadth 는 도움이다. 실측 N_eff 913 vs 균일성 456 = 2배 과보수. ★㊺ 계열이 유효표본으로 내린 기각들은 이 배율만큼 과했다

  29. 블록 부호반전의 귀무가 L 에 따라 넓어지는 것은 의존성이 아닐 수 있다 — 신호가 크면 |블록합| 이 커져 iid 라도 넓어진다(평균 누출). 중심화해서 다시 재면 의존성만 남는다. 예측식 √((Lμ²+σ²)/(μ²+σ²)) 와 맞으면 그 증가는 버려도 된다

  30. 영점 조정은 절대값이 아니라 몬테카를로 오차로 판정한다 — 귀무 t 평균 −0.326 을 "편향" 이라 적었지만 MC오차가 0.183 이라 1.8σ, 잡음이었다. 기준을 |mean|/(std/√B) 로 둔다

  31. ★★보정계수는 판정하려는 계열 자신에게서 잰다 — ㊽ 은 gross 로 재서 net 에 적용했다. 비용항이 극단적으로 자기상관(VR L=320 에서 33.0)이라 gross VR 3.28 vs net VR 1.56. N_eff 가 913 vs 1,537 로 갈렸다. 무엇을 빼고 재느냐가 유효표본을 바꾼다

  32. ★★"유보" 는 결론이 아니다 — 폐기할지 쓸지 못 정하면 그건 미룬 것이다. 유보 4개를 전부 닫았더니 배포 설정이 탈락했다. 안 닫았으면 그대로 돌아갔을 것이다

  33. ★★신호가 살아도 임계가 죽을 수 있다 — 홀드아웃 gross SR 3.42·4.62 인데 q=20% 의 net 은 음(−)이었다. 건당 엣지는 확신에 비례하고 비용은 건당 고정이라, 넓은 계층일수록 비용이 먼저 이긴다. 손익분기 비용을 배수로 보고하라 — 1.43배는 여유가 아니다

  34. 진짜 홀드아웃은 두 축을 동시에 끊는다 — 종목만 끊으면 같은 시각의 시장 요인이, 시간만 끊으면 같은 종목의 특성이 샌다. 종목 × 시간 이중 분리라야 한다

  35. PBO 가 0 이어도 "강한 통과" 가 아닐 수 있다 — 한 후보가 전 구간 우세하면 선택이 안 뒤집혀 0 이 된다. PBO 가 잡는 것은 선택의 뒤집힘이지 성과의 실재가 아니다

  36. ★★감사가 막으면 판정하지 않는다 — 1차 판에서 나는 막힌 채로 판정을 찍었다. 그게 이 도구를 무력화하는 가장 빠른 길이다. 그리고 한도를 올려 통과시키지 않는다|max| 0.5092 를 파보니 TRX +95.8% 라는 진짜 사건이었고, 문제는 한도가 아니라 감사 범위였다

  37. 감사 대상 = 판정 대상 — 이미 제외한 설정까지 감사하면 엉뚱한 이유로 막힌다

  38. ★★"인샘플 통과"는 이중분리 통과가 아니다 — T2·T3 는 인샘플 P 0.965·0.980 이었는데 종목×시간 이중분리에서 T3 는 부호가 뒤집혔다(+0.38 / −0.41). 순위가 완전히 재배열됐다

  39. 부호 뒤집힘은 검정력 문제가 아니다 — 크기가 작은 것은 표본이 모자란 것이지만, 종목 집합을 바꿨을 때 방향이 갈리는 것은 일반화 실패다. 둘을 같이 취급하지 않는다

  40. ★★"못 쓴다"로 끝내지 않는다 — 원인을 특정하면 대개 고칠 곳이 나온다 — T3 는 "부호 뒤집힘 = 일반화 실패"로 접을 뻔했다. 가설 4개를 재보니 gross 는 양방향 양(+) 이었고 병목은 비용이었다. net>0 42% → 92%

  41. ★★병목은 신호가 아니라 비용이다 — T3(gross 76% vs net 42%) · T4 q20 사망 · MNQ 14종 전부 미달 · 메타오더플로우 0.42bp vs 비용 8bp. 전부 같은 병이다. 새 알파를 찾기 전에 비용 구조부터 본다

  42. 낙관 가정은 스스로 잡는다 — "청산 전부 maker" 로 여유 2.31배를 냈다가 손절이 스톱(taker)이라는 걸 빠뜨린 걸 발견했다. 정정하니 1.99배. 절반 이하로 준다

  43. 물리적 상한은 추측하지 말고 유도한다 — "하루 4건 × 1R = 5" 로 선언했다가 막혔는데, 파보니 건당 |R| 은 정확히 1.00 이고 하루 35R 은 청산이 몰린 날이었다(2024-08-05 176건). 상한 = 하루 최대 청산건수 × 1.2R

  44. 결과가 너무 좋으면 대조군부터 만든다 — 버퍼가 gross 를 76%→94% 로 올렸을 때 "버퍼는 비용만 줄여야 하는데?" 를 물었고, 다리 크기를 맞춘 대조군으로 분산 효과를 걷어냈다. 안 물었으면 분산 효과를 엣지로 보고했을 것이다

  45. ★★배포 전 정합 검사는 통과를 확인하는 절차가 아니라 불일치를 찾는 절차다 — (58) 은 점수가 완전히 일치하는데도 다리 크기가 갈리는 것을 잡았다. 원인은 n 을 세는 시점 하나였다. 이런 건 성과표를 아무리 봐도 안 보인다

  46. "배포할 코드로 검정한다"는 검정을 배포 모듈로 다시 돌리라는 뜻이다 — 스크립트로 낸 92% 는 배포 안 될 코드의 숫자였다. 다행히 재검정도 92% 였지만, 다행이었을 뿐이고 다음에도 그러리라는 보장은 없다

  47. ★★같은 구조라도 신호의 반감기가 다르면 정반대 처방이 필요하다 — T3(비유동성)는 보유 연장+버퍼로 42→92% 가 됐는데, T2(모멘텀)는 같은 처방으로 68→56% 가 됐다. 유지율이 90% vs 63% 다. 처방을 옮기기 전에 반감기부터 잰다

  48. ★★한 트랙에 적용한 판정 기준은 모든 트랙에 적용한다 — T3 에 "분할 2개는 표본 2개다" 라고 써 놓고 T2 는 2개로 판정해 "가장 약하다"고 적었다. 50 분할로 보니 68% 였다

  49. "전 분할에서 개선"이 곧 의미 있는 개선은 아니다 — maker 는 50/50 에서 이겼지만 평균 +0.032 Sharpe 이고 부호가 뒤집힌 분할은 2개뿐이다. p 값이 아니라 크기와 실행 리스크로 판단한다

  50. ★★백테스트와 라이브가 갈리면 라이브가 옳다 — 캐시 +0.722R vs 라이브 −0.507R. 8년 내내 캐시가 52~55% 로 일정했으니 시장 탓이 아니다. 백테스트가 처음부터 틀렸다. 손절을 −1R 고정으로 가정하면 갭 체결(−1.6R·최악 −4.05R)을 통째로 못 본다

  51. "승률만 바꾸면 0 이 된다" 같은 분해를 먼저 한다 — 어느 요인이 차이의 전부인지 숫자로 갈라야 고칠 곳이 정해진다. 세 요인을 뭉뚱그리면 아무것도 못 고친다

  52. 꼬리가 평균을 만들면 그 평균은 성과가 아니다 — |R|>3 인 12.85% 가 총 R 의 89.1%. 중앙값과 평균이 갈리면 중앙값 쪽이 실제로 겪는 것이다

  53. ★★"위약 통과" 와 "라이브 정합" 은 다른 관문이다 — (75) 는 위약 대비 100%분위였지만 백테스트 +0.504 vs 라이브 −0.507 의 격차가 그대로였다. 위약은 신호가 무작위가 아님만 말하고, 정합은 그 신호를 실제로 그 값에 체결할 수 있음을 말한다. 둘 다 필요하다

  54. 개선폭을 조건 없는 기준선과 비교한다 — 손절거리 필터가 +0.575 를 냈지만 조건 없음이 +0.504 였다. 기여는 +0.071 이다. 절대값만 보면 레버를 과대평가한다

  55. ★★문헌·오픈소스가 실제로 어떻게 구현하는지 먼저 본다 — 우리는 평균회귀를 먼 레일 청산으로 8년치를 검정했다. 표준은 중앙선 청산이고, 코드에 그 구조가 있었는데 한 번도 안 썼다. 그 하나를 바꾸니 승률 48.3→56.6%, 승 R 이 라이브와 정합했다

  56. ★★"라이브 정합"을 관문에 넣는다 — 백테스트가 위약을 넘어도 라이브와 승 R 이 2배 어긋나면 딴 물건을 재고 있는 것이다. (78) 은 승 R 차이 ±0.30 을 관문에 넣었고 구조 A 는 그 관문에서 걸렸을 것이다(차이 +1.298)

  57. 전략을 버리기 전에 "내가 이 전략을 문헌대로 구현했나"를 먼저 묻는다 — 버린 줄 알았던 것이 잘못 구현한 것이었다

  58. ★★거래 단위 정합과 계좌 정합은 다른 관문이다 — (78) 은 승 R 정합을 통과했지만 계좌로 가니 승률이 23%p 갈렸다. 승 R 이 맞아도 승률이 다르면 계좌 결과가 다르다. 금액을 말하기 전에 둘 다 맞춰야 한다

  59. 계좌 배수가 세 자리면 그건 성과가 아니라 증상이다 — 806배·13.9배가 나왔다. 복리 × 수천 거래는 무엇이든 폭발시킨다. 같은 기간 라이브와 직접 대조해야 보인다

  60. 내가 건 관문이 틀릴 수 있다 — "구조 B 가 A 보다 낫다"로 막았는데, A 는 애초에 라이브 정합을 못 하는 물건이라 비교 대상이 아니었다. 관문도 사전선언 대상이고, 틀렸으면 틀렸다고 적고 바꾼다