feat: KR ATR-based dynamic hard-stop threshold (#318) #342

Merged
jihoson merged 1 commits from feature/issue-318-kr-atr-dynamic-stoploss into feature/v3-session-policy-stream 2026-02-28 20:56:18 +09:00
Collaborator

Summary

  • Implement KR-only ATR-based dynamic hard-stop threshold in staged exit HOLD override
  • Keep fallback behavior when ATR is missing/invalid
  • Clamp dynamic stop threshold to configured bounds (default min -2%, max -7%)
  • Add config knobs: KR_ATR_STOP_MULTIPLIER_K, KR_ATR_STOP_MIN_PCT, KR_ATR_STOP_MAX_PCT
  • Add unit tests for fallback, clamp boundaries, and settings override

Validation

  • pytest -q tests/test_main.py -k "compute_kr_dynamic_stop_loss_pct or hold_overridden_to_sell_when_stop_loss_triggered"
  • python3 -m py_compile src/main.py src/config.py tests/test_main.py
## Summary - Implement KR-only ATR-based dynamic hard-stop threshold in staged exit HOLD override - Keep fallback behavior when ATR is missing/invalid - Clamp dynamic stop threshold to configured bounds (default min -2%, max -7%) - Add config knobs: `KR_ATR_STOP_MULTIPLIER_K`, `KR_ATR_STOP_MIN_PCT`, `KR_ATR_STOP_MAX_PCT` - Add unit tests for fallback, clamp boundaries, and settings override ## Validation - pytest -q tests/test_main.py -k "compute_kr_dynamic_stop_loss_pct or hold_overridden_to_sell_when_stop_loss_triggered" - python3 -m py_compile src/main.py src/config.py tests/test_main.py
agentson added 1 commit 2026-02-28 18:30:58 +09:00
feat: add KR ATR-based dynamic hard-stop threshold (#318)
Some checks are pending
Gitea CI / test (push) Waiting to run
Gitea CI / test (pull_request) Waiting to run
8bba85da1e
agentson reviewed 2026-02-28 20:46:41 +09:00
agentson left a comment
Author
Collaborator

Review: PR #342 — feat: KR ATR-based dynamic hard-stop threshold (#318)

플랜 일치: ACT-01 정확히 일치

  • ATR 기반 동적 손절선, 최소 -2% / 최대 -7%, KR 전용, 폴백 유지

코드 품질: 우수

  • _compute_kr_dynamic_stop_loss_pct():
    • entry_price <= 0 or atr_value <= 0 → 폴백 — 올바른 방어
    • max_pct > min_pct 시 swap — 설정 오류 방어 (defensive)
    • 공식 -(k * ATR / entry_price) * 100 → ACT-01 계획과 일치
    • max(max_pct, min(min_pct, dynamic)) — clamp 올바름 (min_pct=-2, max_pct=-7 기준)
  • config.py: 3개 knob 추가, pydantic 범위 검증 포함
  • 적용 범위: market.code == "KR" 조건으로 KR만 적용 — 다른 시장 영향 없음
  • settings 파라미터: _apply_staged_exit_override_for_hold()에 추가, 호출부(realtime/daily) 반영

테스트: 충분

  • ATR=0 폴백 → -2.0%
  • 소형 ATR(0.2) clamp → -2.0% (min)
  • 대형 ATR(10.0) clamp → -7.0% (max)
  • Settings 오버라이드: k=3.0, entry=100, atr=1.0 → -3.0% (중간값 정확)

결론: LGTM #343 머지 전에 먼저 머지할 것 (의존성)

## Review: PR #342 — feat: KR ATR-based dynamic hard-stop threshold (#318) ### 플랜 일치: ✅ ACT-01 정확히 일치 - ATR 기반 동적 손절선, 최소 -2% / 최대 -7%, KR 전용, 폴백 유지 ### 코드 품질: ✅ 우수 - **`_compute_kr_dynamic_stop_loss_pct()`**: - `entry_price <= 0 or atr_value <= 0` → 폴백 — 올바른 방어 - `max_pct > min_pct` 시 swap — 설정 오류 방어 (defensive) - 공식 `-(k * ATR / entry_price) * 100` → ACT-01 계획과 일치 - `max(max_pct, min(min_pct, dynamic))` — clamp 올바름 (min_pct=-2, max_pct=-7 기준) - **config.py**: 3개 knob 추가, pydantic 범위 검증 포함 - **적용 범위**: `market.code == "KR"` 조건으로 KR만 적용 — 다른 시장 영향 없음 - **`settings` 파라미터**: `_apply_staged_exit_override_for_hold()`에 추가, 호출부(realtime/daily) 반영 ### 테스트: ✅ 충분 - ATR=0 폴백 → -2.0% - 소형 ATR(0.2) clamp → -2.0% (min) - 대형 ATR(10.0) clamp → -7.0% (max) - Settings 오버라이드: k=3.0, entry=100, atr=1.0 → -3.0% (중간값 정확) ### 결론: **LGTM** ✅ — #343 머지 전에 먼저 머지할 것 (의존성)
jihoson merged commit dd8549b912 into feature/v3-session-policy-stream 2026-02-28 20:56:18 +09:00
jihoson deleted branch feature/issue-318-kr-atr-dynamic-stoploss 2026-02-28 20:56:19 +09:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#342