Skip to content

Commit 82e6abd

Browse files
committed
방어형/EW baseline 검증 + 결론 재정의: 베타가 곧 고수익
"벤치마크 초과"가 아니라 "절대 고수익+낙폭관리" 관점에서 다시 봤다. EW B&H 자체가 2023-25 +123.8%(~30% CAGR), Sharpe 1.24로 충분히 좋은 수익이다. 즉 목표는 처음부터 "불가능"이 아니라 "이미 강한 벤치마크를 이기는 게 불가능"이었다. - ew_holdall_equal_baseline / ew_holdall_riskoff_sma120 변형 추가해 실행 가능성 측정. - 핵심: +123.8%는 무비용 buy-once-hold. 월 리밸런싱+익일시가+비용으로 실제 실행하면 +83.4%(Sharpe 0.97, MDD -20%)로 떨어진다. 즉 능동 리밸런싱은 그 자체가 비용이라 가장 좋은 실행은 "사서 들고 있기". SMA risk-off는 +58.6%로 더 나빴다(휘프소). - 문서 결론을 "알파 없음"에서 "베타(분산 보유)가 현실적 고수익 경로"로 재정의 + 배포 가능한 권장(저비용 분산 보유, 회전 최소화) 추가. README 링크 설명도 갱신. 검증: 전체 1328 테스트 통과.
1 parent 7dc22af commit 82e6abd

3 files changed

Lines changed: 55 additions & 18 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ pytest tests/ -q
235235

236236
| 문서 | 내용 |
237237
|------|------|
238-
| [`docs/PROFITABILITY_FINDINGS.md`](docs/PROFITABILITY_FINDINGS.md) | **수익성 정직 점검 (먼저 읽을 것)**OOS 실측상 검증된 alpha 없음 |
238+
| [`docs/PROFITABILITY_FINDINGS.md`](docs/PROFITABILITY_FINDINGS.md) | **수익성 정직 점검 (먼저 읽을 것)**능동 alpha는 없음, 분산 대형주 buy&hold가 현실적 고수익 경로 |
239239
| [`docs/PAPER_TO_LIVE_RUNBOOK.md`](docs/PAPER_TO_LIVE_RUNBOOK.md) | Paper→Live 검증된 운영 경로 + 정직한 caveat |
240240
| [`docs/PROJECT_GUIDE.md`](docs/PROJECT_GUIDE.md) | 파일 역할, 모드별 흐름, 설정 요약, 실전 전 체크리스트 |
241241
| [`quant_trader_design.md`](quant_trader_design.md) | 아키텍처, 지표·전략·리스크 설계, 검증 관점, 로드맵 |

docs/PROFITABILITY_FINDINGS.md

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,17 @@
66
77
## 한 줄 결론 (2026-06-01 최종)
88

9-
**넓은 canonical 유니버스에서, 종목 선택이든 비중 방식이든 단순 스킴으로 동일비중 buy&hold를
10-
이기는 검증된 alpha는 없다.** 모멘텀 40여 변형, 저변동성 선택, risk-parity(선택 0·비중만) — 셋 다
11-
공정한 넓은 유니버스(30종목)에선 음(-)의 초과수익이다. 좁게 고른 10~20종목에서 나온 좋은 수치
12-
(+12~27%p)는 진짜 alpha가 아니라 **유니버스 선택 효과**였다(넓히니 −34~−57%p로 반증). 지금 상태로
13-
실거래에 자본을 넣는 것은 권장하지 않는다.
9+
**"안정적 고수익"은 가능하다 — 단, 능동 전략이 아니라 분산된 대형주 단순 보유(buy&hold)로.**
10+
동일비중 대형주 30종목 buy&hold는 2023~25년 +123.8%(≈30% CAGR), Sharpe 1.24였다. 이걸
11+
**이기려는** 모든 능동 시도(모멘텀 40여 변형, 저변동성 선택, risk-parity 비중, SMA risk-off)는
12+
공정한 넓은 유니버스에서 전부 이걸 **깎았다**(초과수익 음수, 또는 비용 때문에 절대수익 하락).
13+
**알파는 없지만 베타(시장 보유)는 충분히 좋은 수익**이다. 능동 운용으로 그걸 넘으려 하지 말고,
14+
저비용으로 그 베타를 안정적으로 담는 게 이 시스템의 현실적 "고수익" 경로다.
15+
16+
> 중요(실행 가능성): 위 +123.8%는 **무비용·매수후보유(frictionless buy-once-hold)** 벤치마크다.
17+
> 같은 동일비중을 월 1회 리밸런싱 + 익일 시가 체결 + 수수료/세금/슬리피지로 **실제 실행**하면
18+
> +83.4%(Sharpe 0.97, MDD −20%)로 떨어진다. 즉 능동 리밸런싱은 그 자체로 비용이라, **가장 좋은
19+
> 실행은 "사서 들고 있기"** 다. SMA risk-off 오버레이는 +58.6%로 더 나빠졌다(휘프소 + 회전비용).
1420
1521
> 정직성 메모: 이건 검증 도구가 제대로 작동한 사례다. 좁은 유니버스 결과(+12~27%p)에 흥분하지
1622
> 않고 넓은 유니버스 재현 테스트를 돌렸더니 음(-)으로 뒤집혔다. 좁은 유니버스에서 EW 벤치마크
@@ -130,18 +136,24 @@
130136

131137
## 그래서 다음에 뭘 해야 하나
132138

133-
저변동성도 넓은 유니버스에서 반증됐으니, 손쉬운 alpha는 없다는 게 현재까지의 정직한 결론이다.
134-
남은 정직한 경로:
135-
136-
1. **벤치마크 정의 재검토**: 지금 벤치마크는 "같은 유니버스 동일비중 B&H"라 매우 강하다(넓을수록
137-
Sharpe↑). 운영 목표가 절대수익/낙폭 관리라면 KOSPI 지수 대비 또는 위험조정 기준으로 게이트를
138-
바꾸는 것도 한 방법(단, 이건 게이트를 느슨하게 하는 것이므로 신중히).
139-
2. **다요인 결합**: 단일 팩터(모멘텀/저변동)는 EW B&H를 못 이긴다. 저변동 선택 + 모멘텀 필터 +
140-
quality 같은 다요인 결합을 같은 OOS 방식으로 시험(재무 데이터 복구 필요).
141-
3. **생존자 통제 재측정**: pykrx 과거 상장목록 동작 환경에서 `--canonical` 재실행. 단 이건 보통
142-
수치를 더 낮추는 방향이라, alpha를 만들어내지는 못한다.
143-
4. **현실 직시**: 대형 유동주에서 EW B&H를 꾸준히 이기는 건 어렵다는 게 데이터의 일관된 메시지다.
144-
"안정적 고수익"보다 "벤치마크 추종 + 낙폭 관리"가 더 현실적 목표일 수 있다.
139+
데이터의 일관된 메시지: **알파는 없지만 베타(분산 대형주 보유)는 충분히 좋은 수익이다.**
140+
그래서 "고수익"의 현실적 경로는 능동 운용이 아니라 **저비용 분산 보유**다.
141+
142+
**권장(배포 가능한 경로):**
143+
1. **분산 대형주 buy&hold를 기본 운용으로**: 30종목 동일비중 보유 자체가 ~22% CAGR(실행 기준),
144+
Sharpe ~1.0, MDD ~−20%. 능동 리밸런싱·오버레이는 전부 이걸 깎으니, **회전을 최소화**한다
145+
(연 1회 구성종목 점검 + 대규모 이탈만 교체). 잦은 월 리밸런싱은 비용만 키운다.
146+
2. **낙폭 한도는 포지션·현금 관리로**: SMA risk-off는 휘프소로 더 나빴다. 낙폭 통제가 필요하면
147+
전략 신호가 아니라 전체 노출(현금 비중) 상한 같은 단순 규칙이 낫다.
148+
149+
**계속 연구할 가치가 있는 것(쉽지 않음):**
150+
3. **다요인 결합**: 단일 팩터는 EW B&H를 못 이긴다. 저변동 선택 + 모멘텀 필터 + quality 결합을
151+
같은 OOS 방식으로 시험(재무 데이터 복구 필요).
152+
4. **생존자 통제 재측정**: pykrx 과거 상장목록 동작 환경에서 `--canonical`. 단 보통 수치를 낮추는
153+
방향이라 alpha를 만들지는 못한다.
154+
155+
**바꾸지 말 것:** "넓은 canonical 유니버스 + OOS + deflated Sharpe 전부 통과 전엔 paper/live 금지"
156+
규율. 이번에 좁은 유니버스 거짓 양성을 그 규율이 막았다.
145157

146158
**가장 중요한 운영 원칙:** 어떤 후보든 **넓은 canonical 유니버스 + OOS holdout + deflated Sharpe**
147159
모두 통과하기 전엔 paper/live로 올리지 않는다. 좁은 유니버스 좋은 수치는 이번처럼 거짓 양성일 수

tools/research_candidate_sweep.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1957,6 +1957,31 @@ def build_target_weight_low_volatility_candidate_specs() -> list[CandidateSpec]:
19571957
},
19581958
description="risk-parity hold-all with 15% per-name weight cap (avoid concentration)",
19591959
),
1960+
# ── 방어형(defensive): EW B&H 자체에 risk-off 오버레이를 얹어 낙폭만 줄인다 ──
1961+
# 목표가 "벤치마크 초과"가 아니라 "절대수익 + 낙폭 관리(안정적 고수익)"라면, 동일비중
1962+
# 보유에 KS11 SMA120 risk-off를 거는 게 합리적이다. 강세장 노출은 유지하고 약세장만
1963+
# 줄여 같은 수익을 더 낮은 MDD로 얻는지(=Sharpe/Calmar 개선) 확인한다.
1964+
CandidateSpec(
1965+
candidate_id="ew_holdall_equal_baseline",
1966+
strategy="target_weight_rotation",
1967+
params={
1968+
**common, "target_top_n": 999, "hold_rank_buffer": 0,
1969+
"target_allocation_mode": "equal", "target_exposure": 1.0,
1970+
},
1971+
description="equal-weight hold entire universe (EW B&H reproduction baseline)",
1972+
),
1973+
CandidateSpec(
1974+
candidate_id="ew_holdall_riskoff_sma120",
1975+
strategy="target_weight_rotation",
1976+
params={
1977+
**common, "target_top_n": 999, "hold_rank_buffer": 0,
1978+
"target_allocation_mode": "equal", "target_exposure": 1.0,
1979+
"market_exposure_mode": "benchmark_sma",
1980+
"market_ma_period": 120,
1981+
"bear_target_exposure": 0.40,
1982+
},
1983+
description="equal-weight hold-all + KS11 SMA120 risk-off (defensive: cut MDD, keep upside)",
1984+
),
19601985
]
19611986

19621987

0 commit comments

Comments
 (0)