Files
trex-core/docs/batches/bat-011_20260607_safety-sell-triggers/index.md
T
genichinandClaude Opus 4.8 a30efa8f3b feat(safety-sell): dcy-007 core 자율 안전 매도 — BAT-010 기반 + BAT-011 트리거
dcy-007(core 자율 안전 매도) 전체 delivery. BAT-010 기반 인프라가 미커밋
상태였고 BAT-011 트리거 레이어와 공유 파일에서 섞여 있어 한 커밋으로 묶음.

BAT-010 (REQ-034/035/036/041, release-candidate):
- WatchdogStore(application/watchdog.py) + snapshot RPC 워치독 갱신
- Slot stop_loss_price/take_profit_price 필드 + 004_add_price_thresholds.sql
- SlotService.sell() 자율 매도 내부 경로 + idempotency
- SafetySellConfig env 5종 파싱

BAT-011 (REQ-037/038/039/040/042, release-candidate):
- SafetySellService(application/safety_sell.py): forced_close 만기 / stop-loss·
  take-profit KIS polling / 장 마감 강제 청산 + trex-safety-sell 7번째 스레드
- BrokerPort.get_current_price + KIS inquire-price(TTTC8397R/VTTC8397R, stck_prpr)
  + paper stub
- SlotService.update_thresholds() + intent RPC update_thresholds 액션
  (부분 갱신/null 해제, 워치독 last_seen_at 리셋)
- baseline 3문서 정합(interface-contract/runtime-flows/project-structure)

거버넌스: REQ-034~042 Implemented 동기화, BAT-010/011 release-candidate,
dcy-007 discovery 포함.

검증: 신규 38 테스트 green, 단위 236 passed/23 skipped,
인프라 게이트(PG+RabbitMQ) 259 passed(마이그레이션 001~004 round-trip 포함),
ruff clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 08:32:30 +09:00

3.4 KiB

BAT-011: safety-sell 트리거 레이어 (forced_close·KIS polling·장 마감 청산 + update_thresholds RPC + baseline 정합)

  • Status: release-candidate
  • Profile: standard
  • Source Discovery: dcy-007
  • Included REQ: REQ-037, REQ-038, REQ-039, REQ-040, REQ-042
  • Excluded REQ: REQ-034, REQ-035, REQ-036, REQ-041 (safety-sell 기반 인프라 — BAT-010에서 delivery 완료)

Summary

  • dcy-007(core 자율 안전 매도)의 트리거 레이어를 delivery한다. BAT-010이 제공한 기반(WatchdogStore, stop_loss_price/take_profit_price 도메인 필드, SlotService.sell(), safety-sell env vars 5종 파싱) 위에 실제 자동 매도를 발동하는 백그라운드 루프와 임계값 갱신 RPC를 추가한다. 구성: forced_close_at 만기 루프(REQ-037), stop-loss·take-profit KIS 현재가 polling + 트리거(REQ-038), 장 마감 강제 청산(REQ-039), update_thresholds intent RPC 액션(REQ-040), 그리고 dcy-007 전체(REQ-034~041)의 baseline 문서 정합(REQ-042).

Scope

  • In Scope:
    • 신규 trex-safety-sell 데몬 worker 스레드 — 기존 6 스레드에 1개 추가. forced_close_at 체크(REQ-037), stop-loss·take-profit 가격 체크(REQ-038), 장 마감 청산(REQ-039)을 통합 루프로 처리.
    • forced_close_at 만기 감지: holding + 워치독 만료 + forced_close_at <= now(KST) → SlotService.sell() (REQ-037)
    • KIS 현재가 polling 어댑터(TTTC8397R 실전 / VTTC8397R 모의, stck_prpr 파싱) + 손절/익절 조건 평가 + 쿼터 상한 경고 (REQ-038)
    • 장 마감 강제 청산: TREX_MARKET_CLOSE_LIQUIDATION_TIME 도래 시 워치독 무관 전체 holding 청산 + 거래일 1회 발동 가드 (REQ-039)
    • update_thresholds intent RPC 액션: stop_loss_price/take_profit_price/forced_close_at 부분 갱신 + 워치독 last_seen_at 리셋 + holding-only (REQ-040)
    • baseline 3문서(interface-contract.md, runtime-flows.md, project-structure.md) 정합 — dcy-007 REQ-034~041 반영 (REQ-042)
  • Out of Scope:
    • BAT-010이 완료한 기반 인프라(REQ-034 WatchdogStore, REQ-035 도메인 필드/마이그레이션, REQ-036 SlotService.sell(), REQ-041 env 파싱) 재구현 — 본 batch는 호출/참조만 한다.
    • 가격 임계값 논리 유효성 검증(take_profit > stop_loss 등) — dcy-007/REQ-035 범위 밖.
    • KIS 쿼터 초과 시 polling 간격 자동 조정의 동적 튜닝 정책 — 본 batch는 상한 산정 + 경고 로그까지(REQ-038 AC-8). 동적 조정은 후속 후보.

Documents

Notes

  • Source discovery는 단일(dcy-007). BAT-010과 같은 Discovery의 후속 batch이며, BAT-010 index의 "BAT-011 예정" 분할 계획과 정확히 일치한다(REQ-037/038/039/040/042).
  • 본 batch는 BAT-010과 달리 외부 API(KIS 현재가 polling) 호출과 신규 daemon thread를 도입하므로 standard profile + design 선행이 필요하다(planning.md Design Gate 참조).
  • BAT-010 verification의 잔여 R-2(실 PostgreSQL migration 004_add_price_thresholds.sql round-trip 미검증)를 본 batch 환경에서 함께 검증한다(verification에 evidence 기록 예정).
  • REQ-042(문서 정합)는 REQ-037~040 구현 완료 후 verification 단계에서 최신 구현 상태를 반영해 수행한다(REQ-042 Notes).