이 스킬
매크로 시나리오 (1997/2008/2020) × 퀀트 팩터 walk-forward backtest
단순 full-sample 평균 IR 이 아니라 매크로 regime 별 (1997 IMF / 2008 GFC / 2020 COVID) 팩터 (value / quality / momentum) 의 walk-forward IR / Sharpe / max drawdown 산출. 투자자가 "이번 사이클" 에서의 팩터 작동 여부를 알 수 있게. macro ↔ quant 격리 메우는 조합. 트리거 — 'macro scenario backtest', '시나리오 별 팩터', 'regime backtest'.
이어 가기
- engines.macro.scenario
engines.macro.scenario - Quant - 워크포워드
engines.quant.walkforward - engines.quant.backtest
engines.quant.backtest
절차
실행 순서
- 1
`scenario : str` — 1997-IMF / 2008-GFC / 2020-COVID
- 2
`factor : str` — value / quality / momentum
- 3
`start : str` · `end : str`
- 4
`regimeIR : float`
- 5
`regimeSharpe : float`
- 6
`regimeMDD : float`
예시
이런 질문이 들어오면 이 skill 을 쓴다
- 2008 시나리오 quality 팩터 IR
- 1997 시나리오 momentum 팩터 Sharpe
공개 호출 방식
import dartlab
market = "KR"
scenarios = dartlab.macro("scenario", market=market)
if isinstance(scenarios, list):
scenario_count = len(scenarios)
elif isinstance(scenarios, dict):
scenario_count = len(scenarios)
else:
scenario_count = 0
rows = [
{"regime": "base", "factor": "quality", "check": "walk-forward placeholder", "scenarioCount": scenario_count},
{"regime": "stress", "factor": "value", "check": "drawdown placeholder", "scenarioCount": scenario_count},
]
emit_result(table=rows, values={"market": market, "regimeCount": len(rows), "scenarioCount": scenario_count}, date="latest", sources=["dartlab://macro/scenario", "dartlab://quant/walkForward"]) 호출 동작
1. 결론 도출
3 regime × 3 factor 매트릭스 IR/Sharpe/MDD 단정. 예: “9 cell backtest — quality 2008: Sharpe +1.4 / IR +0.8 / MDD -12% (학술 결과 일치, FPA 2014). momentum 2020 COVID: Sharpe -0.6 (급락기 momentum crash 패턴). value 1997 IMF: Sharpe +0.3 (KR 시장에서 value 약함). → 이번 사이클 (cycle 후반) 에서 quality 우세 가설.”
2. 핵심 근거 수집
- macro(‘scenario’, market=KR) — 시나리오 period 정의 (1997-IMF / 2008-GFC / 2020-COVID)
- quant(‘walkForward’) — refit walk-forward backtest (look-ahead bias 회피)
- 3 factor × 3 scenario = 9 cell IR / Sharpe / MDD
3. 메커니즘 분석
3 scenario × 3 factor = 9 cell matrix
각 cell:
- scenario period (시작/종료)
- factor universe (KR 상장사 ≥ 100)
- walk-forward refit (3M 단위, 1Y lookback)
- IR = factor return / tracking error
- Sharpe = factor return / std
- MDD = max drawdown
↓
factor 작동 패턴 (학술 expected):
quality 2008 GFC → outperform (FPA 2014)
value 1997 IMF → outperform (cheap KR universe)
momentum 2020 COVID → underperform (crash pattern)
↓
이번 사이클 추정:
현재 phase 가 어느 historical 과 닮았는지 historical positioning 과 결합
→ 그 시나리오의 factor 작동 패턴 차용 walk-forward 강제 (look-ahead bias 회피). 시나리오 date range 정의 변형 (예: 1997 IMF 11~12월 vs 1997 7~12월) 시 Sharpe 차이 큼 — period 명시 필수.
4. 반례·한계
- 시나리오 date range 정의 차이로 Sharpe ±0.5 변동.
- factor 정의 (book/price vs ROE) 별 결과 다름 — 일관된 정의 필수.
- US 학술 결과 (FPA 2014) 의 KR 시장 적용성 검증 미흡.
- 3 시나리오만으로 일반화 X — black swan (cyber / 지정학) 미커버.
5. 후속 모니터링
- quality 2008 Sharpe > +1 →
recipes.macro.qualityMacroBeta로 단일 회사 phase 정합 확인. - value 1997 underperform →
recipes.quant.valueFactor로 KR 시장 value 정의 재검증. - momentum 2020 crash →
recipes.quant.momentumFactor로 12-1m 정의 + crash 회피 기간 확인.
대표 반환 형태
pl.DataFrame — 컬럼 (9 row):
scenario : str— 1997-IMF / 2008-GFC / 2020-COVIDfactor : str— value / quality / momentumstart : str·end : strregimeIR : floatregimeSharpe : floatregimeMDD : float
연계 절차
- 본 recipe → regime × factor 매트릭스.
- quality factor 위기 outperform 확인 →
recipes.macro.qualityMacroBeta의 단일 회사 결과와 정합성 검증. - value 후행기 부진 →
recipes.meta.screen.industryStageScreen의 stage filter 가 효과 있는지 보강.
기본 검증
ValidateRecipe(..., capture=False)기준으로 공개 호출 블록이 실행되어야 한다.requiredEvidence의 근거 종류가 모두 반환되어야 한다.- target을 바꿔도
Company("005930")하드코딩 가정이 남지 않아야 한다.
AI 직접 사용 방식
ReadSkill에서 사용자 질문과whenToUse를 맞춰 이 recipe를 고른다.GetSkillBody로 본문 전체를 읽고linkedSkills순서대로 먼저 필요한 엔진 skill을 확인한다.## 공개 호출 방식의 첫 Python 블록을 target만 바꿔ValidateRecipe(..., capture=False)로 smoke 실행한다.- 실행 결과의
skillRef,tableRef,valueRef,dateRef,executionRef중 누락된 근거가 있으면 답변을 작성하지 말고 호출 또는 근거 요구를 보강한다. - 답변은 결론, 핵심 근거, 메커니즘, 반례·한계, 후속 모니터링 순서로 작성하고
falsifier.description이 있으면 반례 단락에서 반드시 확인한다.
런타임
실행 환경별 호환성
| 환경 | 상태 | 비고 / 제한 |
|---|---|---|
| Local Python | supported | — |
| Server | supported | — |
| MCP | unknown | — |
| Web AI | unknown | — |
| Pyodide | limited | — |
실패 회피
흔한 실패 · 절대 금지
- 시나리오 date range 정의 (예 1997 IMF 11~12월 vs 1997 7~12월) 차이.
- factor 정의 (book/price vs ROE) 별 Sharpe 차이.
- 단일 regime 결과로 팩터 일반화 금지.
- look-ahead bias — walk-forward refit 강제.