1. 리스크와 사이징
- R / 1R — 한 트레이드가 초기 손절에 걸렸을 때의 손실 크기. 모든 손익을
이 단위로 나눠 비교한다.
exit_r = 손익 / 초기 위험액. - total R — 모든 트레이드 R의 합. 트레이드당 위험액이 고정이면
PnL / 위험액과 같다. - ATR (Average True Range) — 평균 실변동폭. 레포는 Wilder 방식
(
src/bot/indicators.py: atr_wilder). - ATR_eff / ATR floor —
ATR_eff = max(ATR, price × atr_floor_pct / 100). 사이징과 초기 손절이 같은ATR_eff를 쓴다. 변동성이 너무 낮을 때 손절이 비현실적으로 좁아지는 것을 막는다 (spec.md사이징 절). - sl_atr_mult — 초기 손절 거리 =
ATR_eff × sl_atr_mult. - 에쿼티 비율 위험 vs 고정 달러 위험 (equity-% vs fixed-$ risk) — 운영은
에쿼티 비율(복리), 검증은 고정 달러(
$50 = 1R)를 쓴다. 복리 현금 PnL은 순서와 구간에 따라 크게 부풀거나 줄어서 R로 비교해야 한다 (L-008). - 레버리지 (leverage) — 증거금 상한에만 영향. 트레이드 1회 손실 비율을 바꾸지 않는다.
2. 성과 지표
- PnL net / gross — 수수료 차감 후 / 전 손익.
- fee drag — 수수료 ÷ 수수료 전 gross 이익. 100%에 가까우면 엣지를 비용이 다 먹는다는 뜻 (L-001).
- PF (profit factor) — 이익 합 ÷ 손실 합. 수수료 포함 현금 기준.
- 승률 (win rate) — 레포에는 두 가지가 있다. policy 승률은 Claim B에서
pnl_net > 0또는 breakeven 청산을 승으로 센다. strict 승률은 순손익 기준. - tie —
pnl_gross > 0 and pnl_net <= 0. 방향은 맞았지만 수수료에 졌다. - max DD (maximum drawdown) — 고점 대비 최대 하락.
%와R둘 다 보고. - MAE / MFE (maximum adverse / favorable excursion) — 보유 중 최대 역행 / 최대 순행 폭. R 단위.
- capture —
exit_r / mfe_r(MFE > 0일 때만). 최대 순행 중 얼마를 실제로 가져왔나 (src/bot/exit_reason.py: compute_capture_pct). - SL / FSL (full-SL-like) — SL은 손절 청산 수. FSL은 그중
exit_r <= -0.9인 것, 즉 사실상 손절 전체를 맞은 청산 (src/backtest/report.py). - 꼬리 집중도 (top 2% concentration) — 상위 2% 트레이드가 total R에서 차지하는 비율. 높으면 소수의 큰 승리에 의존하는 payoff다.
- max consecutive losses — 최대 연속 손실 수. Claim B는 policy 승률 분류를 쓴다.
- synthetic final close — 백테스트 종료 시점의 강제 청산 행
(
End of Backtest). 결과 부호를 바꿀 수 있어 포함/제외를 둘 다 본다.
3. 진입 구조
- HMA (Hull Moving Average) — 지연을 줄인 가중 이동평균. 레포의 중심 추세선. slope(기울기), accel(기울기 변화)도 쓴다.
- bias — 방향 허용 상태. Claim B 롱 bias = HMA 상승 and
close > HMA. 숏은 대칭. - swing / fractal / PH·PL — Williams fractal 피벗. radius
r이면 좌우r개 봉보다 높은 고점이 PH(pivot high), 낮은 저점이 PL.2r+1봉 패턴이고r봉 뒤에 확정된다 (src/signals/htf_sr_fade.py: confirmed_swings). - swing_radius — fractal 반경. 1이면 3봉 패턴.
- Claim B (
claim_b_no_ct_v1,hma_swing_break) — 현재 production 진입. bias가 켜진 상태에서 마지막 확정 swing 고점(PH)을 처음 종가로 돌파하면 진입. swing당 한 번(one-shot). - one-shot — 같은 구조(스윙, 레벨)에서 진입을 한 번만 허용하는 소비 규칙.
- impulse break (가설 A) — 돌파 종가가 스윙을
1.0 × ATR이상 넘어야 인정. 노이즈 돌파를 거른다. - pullback BOS (가설 B) — HMA를 지킨 눌림 PL이 확정된 뒤, 그 눌림을 시작한 고점을 돌파하면 진입. BOS = break of structure.
- sweep-reclaim (가설 C) — 추세 중 직전 PL 아래로 꼬리가 찍혔다가 3봉 안에 PL과 HMA 위로 회복하면 진입.
- S/R fade (D/E) — 상위 시간대 지지·저항의 실패한 시험에 역방향 진입. D는 4h 스윙, E는 전일 고가·저가.
- Reverse — 기존 포지션 청산 후 반대 방향 신규 진입. 두 단계 동작이다.
- deadzone — HMA slope가 노이즈로 간주되는 구간. dynamic deadzone =
slope_stdev × dyn_dz_mult(하한 있음). - CT (countertrend filter) — 4h 상위 추세 상태와 ER로 역추세 진입을 거르던 필터. 현재 production은 off.
- ER (Kaufman efficiency ratio) —
|close − close[n]| / Σ|Δclose|(n봉). 1이면 일직선, 0에 가까우면 횡보. 레포는 짧은 EMA로 한 번 더 평활 (src/bot/indicators.py: efficiency_ratio). - HTF / primary / sub-bar — 상위 시간대 / 신호 판단 봉(현재 30m) / 체결·손절 순서를 판정하는 하위 봉(30m→1m, 4h→5m).
4. 청산 구조
- initial stop — 진입 시 손절.
entry ± ATR_eff × sl_atr_mult. - R-ratchet — MFE가 정해진 R에 닿으면 손절을 초기 손절보다 가깝게 당긴다.
stop source
r_ratchet. - breakeven (BE) — MFE가 정해진 R에 닿으면 손절을 진입가로 당긴다.
- fixed_r_ladder — Claim B의 손절 사다리 (initial → ratchet → BE).
- MAE/MFE ratio loss-cut — 역행(MAE)이 일정 크기를 넘고 순행(MFE) 대비 역행 비율이 임계값을 넘으면 손절을 진입가 가까이 당긴다. 이미 넘었으면 다음 sub-bar 시가 시장가 청산.
- trail / lag — MFE를 따라 손절을 올리는 방식. lag는 MFE와 손절 사이 간격.
trail_stop_r = mfe_r − lag. - full-path vs delayed trail — full-path는 작은 MFE(예: 0.5R)부터 즉시 추적, delayed는 1R 이후부터 step 단위로 추적.
- fixed TP (take profit) — 고정 R 목표에서 전량 청산.
- time stop — 일정 봉 수가 지나면 청산. Fixed-R 검증의 48봉 셀.
- scale-out — 목표 R마다 일부씩 청산.
- gap-through — 손절가를 건너뛴 경우 다음 체결 가능한 1m 시가로 체결.
- stop-led re-entry — 손절 직후 다음 신호로 다시 들어가는 순환. 타이트한 청산이 거래 수와 비용을 키우는 경로 (L-004).
5. 시장 상태와 레짐
- 레짐 (regime) — 수익 구조가 다르게 작동하는 시장 상태 구간. 레포에서는 주로 연도·반기 단위로 드러난다 (L-008).
- variance ratio (VR) — k기간 수익 분산 ÷ (k × 1기간 분산).
< 1이면 평균회귀,> 1이면 추세 성향. - AC1 — 1차 자기상관. 양수면 연속, 음수면 반전 성향.
- 4H 정렬 상태 (opposed / aligned / flat) — 30m 진입 방향과 4h 추세의 관계. flat은 4h 기울기가 deadzone 안.
6. 검증 방법론
- 사전등록 (preregistration) — 후보, 지표, 판정 기준을 실행 전에 고정하고 커밋한다. 결과를 본 뒤 기준을 바꾸지 못하게 한다.
- Fixed-R 계약 —
$50 = 1R, TP1.5/2/3R× no-time/48봉 6개 셀로 진입만 평가 (docs/raw-entry-structure-gate-v1.md). - walk-forward / OOS window — 레포에서는 고정 파라미터로 다섯 개의 6개월 구간을 나눠 본다. rolling refit이 아니다.
- block bootstrap / noise band — 트레이드 R을 블록 단위로 재표집해 우연 변동 폭을 추정. baseline 기준이면 noise band, 후보 자체 기준이면 self-bootstrap.
- perturbation — 파라미터를 ±15%(또는 ±10/20%) 흔들어도 결과가 버티는지.
- center stress — HMA 길이를 42/50/58로 바꿔도 후보가 유지되는지.
- exit-shape consistency — 6개 Fixed-R 셀 모두에서 양수인지.
- parameter budget — 추가 자유 파라미터 수 ≤ 제거 파라미터 수.
- plateau / moderate / peak — 파라미터 민감도 분류. peak는 조금만 흔들어도
성과가 무너지거나 DD가 커지는 값 (
docs/phase0-sensitivity-report.md). - shadow calibration vs prospective — 과거 실험을 나중 게이트로 재평가한 것은 보정용일 뿐이고, 사전등록된 새 실행만 채택 근거가 된다.
- PASS / REJECT / INVALID — 게이트 결과 상태. INVALID는 근거 자체가 깨진 경우.
- parked diagnostic — 흥미롭지만 게이트를 거치지 않아 근거로 쓸 수 없는 결과. 예: 30m impulse A.
7. 실행과 비용
- maker / taker fee — 지정가 체결 / 시장가 체결 수수료. 현재 검증 가정은
진입 maker
0.02%, 청산 taker0.05%. - funding — 무기한 선물의 롱·숏 간 주기적 정산. 현재 ETH 백테스트에는
미반영이고, BTC 평균회귀 설계는 반영을 요구했다 (
docs/btc-profile-study.md). - fill model — 지정가 체결 가정. 엣지가 작을수록 결과가 이 가정에 민감하다.