improve: implied_rsi 포화 임계점 개선 12.5%→25% (#181) #186

Merged
jihoson merged 1 commits from feature/issue-181-implied-rsi-saturation into main 2026-02-20 10:35:10 +09:00
Collaborator

Summary

SmartScanner의 implied_rsi 계산 계수를 4.0→2.0으로 완화.

변동률 이전 (×4) 이후 (×2)
5% 70 60
10% 90 70
12.5% 100 (포화) 75
25% 100 100 (포화)

해외 소형주에서 RSI=100이 집단 발생하던 현상 완화.

Fixes

Test plan

  • TestImpliedRSIFormula 5개 테스트 추가 및 통과
  • 전체 테스트 727개 통과

🤖 Generated with Claude Code

## Summary SmartScanner의 `implied_rsi` 계산 계수를 4.0→2.0으로 완화. | 변동률 | 이전 (×4) | 이후 (×2) | |--------|-----------|-----------| | 5% | 70 | 60 | | 10% | 90 | 70 | | 12.5% | **100 (포화)** | 75 | | 25% | 100 | **100 (포화)** | 해외 소형주에서 RSI=100이 집단 발생하던 현상 완화. ## Fixes - closes #181 ## Test plan - [x] `TestImpliedRSIFormula` 5개 테스트 추가 및 통과 - [x] 전체 테스트 727개 통과 🤖 Generated with [Claude Code](https://claude.com/claude-code)
agentson added 1 commit 2026-02-20 09:33:46 +09:00
SmartScanner의 implied_rsi 공식에서 계수를 4.0에서 2.0으로 수정.
12.5% 이상 변동률에서 RSI=100으로 포화되던 문제를 개선.

변경 전: 50 + (change_rate * 4.0) → 12.5% 변동 시 RSI=100
변경 후: 50 + (change_rate * 2.0) → 25% 변동 시 RSI=100

이제 10% 상승 → RSI=70, 12.5% 상승 → RSI=75 (의미 있는 구분 가능)
해외 소형주(NYSE American 등)의 RSI=100 집단 현상 완화.

- smart_scanner.py 3곳 동일 공식 모두 수정
- TestImpliedRSIFormula 클래스 5개 테스트 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Owner

이로인해 스캐너 포착 종목에 제한이 생기진 않아?

이로인해 스캐너 포착 종목에 제한이 생기진 않아?
Author
Collaborator

포착 범위 분석

코드를 추적해 답변 드립니다.

1. 스캐너 포착 범위 — 영향 없음

SmartScanner의 종목 포착 필터:

if price <= 0 or volatility_pct < 0.8:
    continue

implied_rsiScanCandidate.rsi에만 저장되며 포착 필터에는 관여하지 않습니다.
rsi_oversold / rsi_momentum 설정값도 __init__에서 저장되지만 이 필터에는 사용되지 않습니다.

2. Fallback 시나리오 매칭 — 이론상 영향, 실질적으론 미미

pre_market_planner.py:570에서 fallback 플래너가 oversold 종목에 rsi_below=30 조건을 설정하고,
이 조건은 market_data["rsi"] (= implied_rsi)와 비교됩니다.

계수 -5% 변동 시 RSI -10% 변동 시 RSI rsi_below=30 통과 기준
4.0 30 (경계) 10 변동률 < -5%
2.0 40 30 (경계) 변동률 < -10%

계수 2.0에서는 fallback 시나리오 RSI 조건 통과에 -10% 이상 하락이 필요합니다.

단, fallback 시나리오는 AI 플레이북이 없을 때만 사용됩니다. 정상적인 흐름에서는 pre-market AI가 생성한 StockScenario가 사용되고, AI는 implied_rsi 값을 참고해 자체적으로 조건을 설정하므로 계수 변경의 영향을 흡수합니다.

결론: 스캐너 포착 종목 수에는 제한이 생기지 않습니다. AI 플레이북 정상 동작 시에는 시나리오 매칭에도 영향 없으며, fallback 시에는 더 강한 하락 신호에만 RSI 조건이 통과되는 방향으로 달라집니다.

## 포착 범위 분석 코드를 추적해 답변 드립니다. ### 1. 스캐너 포착 범위 — **영향 없음** SmartScanner의 종목 포착 필터: ```python if price <= 0 or volatility_pct < 0.8: continue ``` `implied_rsi`는 `ScanCandidate.rsi`에만 저장되며 포착 필터에는 관여하지 않습니다. `rsi_oversold` / `rsi_momentum` 설정값도 `__init__`에서 저장되지만 이 필터에는 사용되지 않습니다. ### 2. Fallback 시나리오 매칭 — **이론상 영향, 실질적으론 미미** `pre_market_planner.py:570`에서 fallback 플래너가 oversold 종목에 `rsi_below=30` 조건을 설정하고, 이 조건은 `market_data["rsi"]` (= `implied_rsi`)와 비교됩니다. | 계수 | -5% 변동 시 RSI | -10% 변동 시 RSI | rsi_below=30 통과 기준 | |------|---------------|----------------|----------------------| | 4.0 | 30 (경계) | 10 | 변동률 < -5% | | 2.0 | 40 | 30 (경계) | 변동률 < -10% | 계수 2.0에서는 fallback 시나리오 RSI 조건 통과에 -10% 이상 하락이 필요합니다. 단, fallback 시나리오는 **AI 플레이북이 없을 때만** 사용됩니다. 정상적인 흐름에서는 pre-market AI가 생성한 `StockScenario`가 사용되고, AI는 `implied_rsi` 값을 참고해 자체적으로 조건을 설정하므로 계수 변경의 영향을 흡수합니다. **결론**: 스캐너 포착 종목 수에는 제한이 생기지 않습니다. AI 플레이북 정상 동작 시에는 시나리오 매칭에도 영향 없으며, fallback 시에는 더 강한 하락 신호에만 RSI 조건이 통과되는 방향으로 달라집니다.
jihoson merged commit c920b257b6 into main 2026-02-20 10:35:10 +09:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#186