feat: v2 staged exit에 실제 피처(ATR, pred_down_prob) 공급 (#325) #343

Merged
jihoson merged 1 commits from feature/issue-325-staged-exit-real-features into feature/v3-session-policy-stream 2026-02-28 20:59:39 +09:00
Collaborator

Summary

  • staged exit 입력 피처에 RSI 기반 pred_down_prob를 주입
  • KR 보유 종목에 대해 get_daily_prices() 기반 ATR(14) 계산 후 atr_value 주입
  • be_arm_pct/arm_pctSettings(STAGED_EXIT_BE_ARM_PCT, STAGED_EXIT_ARM_PCT)로 독립 제어
  • realtime/daily 경로 모두 HOLD override 전에 피처 주입

Test

  • pytest -q tests/test_main.py -k "estimate_pred_down_prob or compute_kr_atr_value or inject_staged_exit_features or apply_staged_exit_uses_independent_arm_threshold_settings or run_daily_session_applies_staged_exit_override_on_hold"
  • python3 -m py_compile src/main.py src/config.py tests/test_main.py

Refs: #325

## Summary - staged exit 입력 피처에 RSI 기반 `pred_down_prob`를 주입 - KR 보유 종목에 대해 `get_daily_prices()` 기반 ATR(14) 계산 후 `atr_value` 주입 - `be_arm_pct`/`arm_pct`를 `Settings`(`STAGED_EXIT_BE_ARM_PCT`, `STAGED_EXIT_ARM_PCT`)로 독립 제어 - realtime/daily 경로 모두 HOLD override 전에 피처 주입 ## Test - `pytest -q tests/test_main.py -k "estimate_pred_down_prob or compute_kr_atr_value or inject_staged_exit_features or apply_staged_exit_uses_independent_arm_threshold_settings or run_daily_session_applies_staged_exit_override_on_hold"` - `python3 -m py_compile src/main.py src/config.py tests/test_main.py` Refs: #325
agentson added 1 commit 2026-02-28 18:36:08 +09:00
feat: feed staged-exit with ATR/RSI runtime features (#325)
Some checks failed
Gitea CI / test (pull_request) Waiting to run
Gitea CI / test (push) Has been cancelled
e0513d85d0
agentson reviewed 2026-02-28 20:46:58 +09:00
agentson left a comment
Author
Collaborator

Review: PR #343 — feat: v2 staged exit에 실제 피처 공급 (#325)

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

  • atr_value 실시간 계산 공급, pred_down_prob RSI 기반 추정, be_arm_pct/arm_pct 독립 설정

코드 품질: 우수

  • _estimate_pred_down_prob_from_rsi(): RSI/100 선형 매핑 — 방향성 올바름 (RSI 70+ = overbought = 높은 하락 확률). 단순하지만 첫 근사치로 적절
  • _compute_kr_atr_value():
    • broker.get_daily_prices() + retry — 안전한 데이터 소싱
    • 무효 행(high/low/close <= 0) 필터 — 데이터 품질 방어
    • 부족한 데이터 시 0.0 반환 — 안전 폴백
    • ConnectionError/Exception 모두 catch + 경고 로그
  • _inject_staged_exit_features():
    • 기존 값 존재 시 덮어쓰지 않음 ("pred_down_prob" not in market_data, existing_atr > 0) — 올바른 우선순위
    • KR 전용 ATR 계산, 그 외 시장은 0.0
    • HOLD override 직전에 호출 — 올바른 위치
    • realtime + daily 양쪽 적용
  • be_arm_pct/arm_pct 독립화:
    • settings 있으면 STAGED_EXIT_BE_ARM_PCT/STAGED_EXIT_ARM_PCT 사용
    • arm_pct = max(be_arm_pct, settings.ARM_PCT) — arm >= be_arm invariant 보호
    • settings 없으면 기존 동작(take_profit * 0.4) 유지 — 하위 호환
  • rationale 수정: take_profit_threshold → arm_pct — 실제 사용된 임계값 표시, 정확

테스트: 충분

  • RSI 매핑: None→0.5, 0→0, 50→0.5, 100→1.0
  • ATR 계산: 짧은 시리즈 → 0.0
  • 피처 주입: KR + RSI 65 → pred_down_prob=0.65, atr_value>0
  • 독립 arm 설정: be_arm_pct=2.2, arm_pct=5.4 캡처 확인

머지 순서 주의

  • #342를 먼저 머지 후 #343을 rebase해야 함 — 둘 다 _apply_staged_exit_override_for_hold()settings 파라미터를 추가하므로 충돌 발생. ACT-08 의존성 그래프(ACT-08 ← ACT-01)와도 일치.

결론: LGTM — 단, #342 머지 후 rebase 필요

## Review: PR #343 — feat: v2 staged exit에 실제 피처 공급 (#325) ### 플랜 일치: ✅ ACT-08 정확히 일치 - atr_value 실시간 계산 공급, pred_down_prob RSI 기반 추정, be_arm_pct/arm_pct 독립 설정 ### 코드 품질: ✅ 우수 - **`_estimate_pred_down_prob_from_rsi()`**: RSI/100 선형 매핑 — 방향성 올바름 (RSI 70+ = overbought = 높은 하락 확률). 단순하지만 첫 근사치로 적절 - **`_compute_kr_atr_value()`**: - `broker.get_daily_prices()` + retry — 안전한 데이터 소싱 - 무효 행(high/low/close <= 0) 필터 — 데이터 품질 방어 - 부족한 데이터 시 0.0 반환 — 안전 폴백 - ConnectionError/Exception 모두 catch + 경고 로그 - **`_inject_staged_exit_features()`**: - 기존 값 존재 시 덮어쓰지 않음 (`"pred_down_prob" not in market_data`, `existing_atr > 0`) — 올바른 우선순위 - KR 전용 ATR 계산, 그 외 시장은 0.0 - HOLD override 직전에 호출 — 올바른 위치 - realtime + daily 양쪽 적용 - **be_arm_pct/arm_pct 독립화**: - settings 있으면 `STAGED_EXIT_BE_ARM_PCT`/`STAGED_EXIT_ARM_PCT` 사용 - `arm_pct = max(be_arm_pct, settings.ARM_PCT)` — arm >= be_arm invariant 보호 - settings 없으면 기존 동작(take_profit * 0.4) 유지 — 하위 호환 - **rationale 수정**: take_profit_threshold → arm_pct — 실제 사용된 임계값 표시, 정확 ### 테스트: ✅ 충분 - RSI 매핑: None→0.5, 0→0, 50→0.5, 100→1.0 - ATR 계산: 짧은 시리즈 → 0.0 - 피처 주입: KR + RSI 65 → pred_down_prob=0.65, atr_value>0 - 독립 arm 설정: be_arm_pct=2.2, arm_pct=5.4 캡처 확인 ### 머지 순서 주의 - **#342를 먼저 머지 후 #343을 rebase해야 함** — 둘 다 `_apply_staged_exit_override_for_hold()`에 `settings` 파라미터를 추가하므로 충돌 발생. ACT-08 의존성 그래프(ACT-08 ← ACT-01)와도 일치. ### 결론: **LGTM** ✅ — 단, #342 머지 후 rebase 필요
agentson force-pushed feature/issue-325-staged-exit-real-features from e0513d85d0 to 62cd8a81a4 2026-02-28 20:58:34 +09:00 Compare
Author
Collaborator

컨플릭트 해결해서 base() 최신으로 rebase 완료했습니다.\n\n- force-push: \n- 검증: ........ [100%]
8 passed, 143 deselected in 1.77s (8 passed)\n- 검증:

컨플릭트 해결해서 base() 최신으로 rebase 완료했습니다.\n\n- force-push: \n- 검증: ........ [100%] 8 passed, 143 deselected in 1.77s (8 passed)\n- 검증:
Author
Collaborator

컨플릭트 재해결 내역 정리합니다.

  • base feature/v3-session-policy-stream 기준 rebase 완료
  • force-push 커밋: 62cd8a8
  • 테스트: pytest -q tests/test_main.py -k "compute_kr_dynamic_stop_loss_pct or estimate_pred_down_prob or compute_kr_atr_value or inject_staged_exit_features or apply_staged_exit_uses_independent_arm_threshold_settings or run_daily_session_applies_staged_exit_override_on_hold" (8 passed)
  • 컴파일 확인: python3 -m py_compile src/main.py src/config.py tests/test_main.py
컨플릭트 재해결 내역 정리합니다. - base `feature/v3-session-policy-stream` 기준 rebase 완료 - force-push 커밋: 62cd8a8 - 테스트: pytest -q tests/test_main.py -k "compute_kr_dynamic_stop_loss_pct or estimate_pred_down_prob or compute_kr_atr_value or inject_staged_exit_features or apply_staged_exit_uses_independent_arm_threshold_settings or run_daily_session_applies_staged_exit_override_on_hold" (8 passed) - 컴파일 확인: python3 -m py_compile src/main.py src/config.py tests/test_main.py
jihoson merged commit 3af62ce598 into feature/v3-session-policy-stream 2026-02-28 20:59:39 +09:00
jihoson deleted branch feature/issue-325-staged-exit-real-features 2026-02-28 20:59:39 +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#343