Skip to content

v2.18.0 — 오닐 Market Pulse 상태머신 · 약세장 매수 하드게이트 · 파일럿 재진입 · 루프 리네임

Latest

Choose a tag to compare

@dragon1086 dragon1086 released this 12 Jul 01:42

PRISM-INSIGHT v2.18.0 — 오닐 Market Pulse 상태머신 · 약세장 매수 하드게이트 · 파일럿 재진입 · 루프 리네임

Release Date: 2026-07-12
Range: v2.17.0(869e7b7) → main(a525c34) · 16 commits / 9 PRs (#422#430) + docs 직커밋 1건
Scale: 46 files, +5,680 / −2,417

개요

v2.18.0의 주제는 하나로 요약된다: "확실한 기회가 없으면 기다린다"(오닐)를 감(感)이 아니라 코드로.
윌리엄 오닐의 M(Market Direction)을 분산일 카운팅 → CORRECTION → FTD(팔로우스루) 상태머신으로
구현해 6년 리플레이로 검증했고(LIVE 가동), 약세·횡보장에서 신규 매수를 조이는 하드게이트 4종을
붙였다. 조정 탈출 직후엔 정찰(파일럿) 포지션 1개로 발만 담근 뒤 정상 재개한다 — 금액은 항상
100%라 시뮬레이터와 실계좌가 단 한 주도 어긋나지 않는다. 덤으로 3년 묵은 암호명 loop_a/b/c를
hardstop / trend_exit / fill_chaser로 리네임했다(구 경로 shim 유지, crontab 무수정 호환).


1. Market Pulse — 오닐 M 상태머신 & 조정장 배치 휴식 ⭐ (이번 릴리즈 최대 비중, #425 #426 #427)

  • O'Neil M 상태머신 (cores/market_pulse.py): IBD 표준 분산일(DD) 카운팅(25세션 롤링,
    −0.2% & 거래량 증가) → DD 누적 시 CORRECTION 진입 → FTD(랠리 4일차+ & +1.25% & 거래량 증가)
    또는 전고점 회복 종가로만 탈출. −10% drawdown 즉시 진입 규칙 포함.
  • 6년 리플레이 검증기 (tools/market_pulse_backtest.py, 388줄): KR/US 지수로 상태 전이를
    재현해 정책을 데이터로 결정. "CORRECTION=전면 매수중단"은 실거래 표본 감사에서 기각
    (조정창 매수 순손익 +25.3%) — 대신 배치 감속을 채택.
  • 배치 휴식 정책 (cores/regime_policy.py, Rev.3→Rev.5): CORRECTION에서 KR은 오후
    (종가확인)만, US는 midday만 가동. 매도/청산 루프는 절대 쉬지 않음. 데이터 오류 시 fail-open.
  • 구독자 휴식 공지: LIVE 배치 스킵 시 구독 채널에 5개 언어로 휴식 사유 발송 (#426).
  • 운영 상태: MARKET_PULSE_MODE=live.

2. 약세·횡보장 매수 하드게이트 & 파일럿 재진입 ⭐ (#429 #430)

  • US 약세장 모멘텀추격 차단 (버그픽스): REGIME_WEAK_NO_TOPDOWN이 KR에만 구현되어 있어
    플래그가 켜져 있어도 미국장은 횡보약세에서 top-down 추격을 계속하던 비대칭을 미러링으로 수정.
  • UNDER_PRESSURE 감속 (Rev.5): 조정 판정 전 압박 구간에서 US 아침 배치만 휴식.
  • 레짐 적응 매수 하한선 (REGIME_MIN_SCORE_FLOOR): strong_bear ≥9점, moderate_bear/sideways
    ≥8점 미만 셋업은 LLM이 사자고 해도 거부하는 하드게이트. LLM min_score와 max() 결합.
  • 파일럿 재진입 (Post-FTD) (PULSE_PILOT_REEXPOSURE): 조정 종료 후 5거래일간 배치당 신규
    진입 1종목(주도주 우선) + 중복매수 동결. 금액은 항상 100% 정상 — 최초 구현(금액 절반)은
    시뮬-실계좌 괴리를 만들어 당일 재설계(#430). 의사결정 레이어에서 작동해 sim/real parity 보장.
  • 모든 게이트 env-gated + fail-open(판정 오류 시 정상 매수).

3. 루프 리네임 — loop_a/b/c 암호 청산 (#428)

  • tools/loop_a_hardstop.pytools/hardstop_seller.py (HARDSTOP_*)
  • tools/loop_b_trend_exit.pytools/trend_exit_seller.py (TREND_EXIT_*)
  • tools/loop_c_fill_chaser.pytools/fill_chaser.py (FILL_CHASER_*)
  • loop_publish.pysell_broadcast.py
  • 로거명·로그 프리픽스([LOOP_C][FILL_CHASER])·내부 상수·테스트 6파일 일괄 정리.
  • 하위호환 완비: 구 경로는 deprecation shim(경고 1줄 후 새 모듈 실행) — 기존 crontab 무수정
    동작. DB 테이블명·env legacy 별칭·Pub/Sub 프로토콜 불변. feature_status는 신·구 겸용 인식.

4. 매수 프롬프트 게이트 — 개별 추세·반복 손절 (#424)

  • 매수 프롬프트에 개별 종목 추세 게이트(20/50/200일선 정렬 T1/T2)와 반복 스탑아웃
    게이트
    (최근 5거래일 내 매도·유사 손실 패턴 시 추격 재진입 감속) 주입. KR+US, ko+en.

5. 배치-루프 교통정리 & 루프 매도 다국어 방송 (#422 #423)

  • 배치와 trend_exit(구 loop_b)가 같은 종목을 두고 충돌하지 않도록 신규매수 유예 규칙 추가,
    포트폴리오 최종요약은 충돌 시에도 강제 발송 (#422).
  • 루프발 매도 메시지도 배치 매도와 동일하게 다국어 채널 비동기 브로드캐스트 (#423).

6. 문서 · 운영

  • Subscriber 로컬 운영 하네스 (examples/messaging/SUBSCRIBER_OPS_HARNESS.md, 직커밋):
    AI 에이전트/사람 겸용 Phase별 셋업 런북. cron 타임존 환산 규칙(시스템 TZ ≠ 셸 TZ 실사고 반영),
    demo→SHADOW→LIVE 승격 게이트, 비밀값 불변식, 흔한 에러 표(APBK0952/EGW00123) 포함.
  • docs/FEATURE_FLAGS.md에 리네임 용어집 및 신규 플래그 3종 문서화.

변경 규모 요약 (PR별, 공평 비교)

PR 주제 규모
#425 Market Pulse 상태머신 + 6y 리플레이 검증기 9 files, +1,618
#426 구독자 휴식 공지(5개 언어) + Rev 정책 3 files, +149
#427 regime-policy Rev.4 (KR 오후 유지) 3 files, +17/−12
#428 loop_a/b/c 리네임 + shim 24 files, +2,486/−2,360
#429 약세장 하드게이트 4종 (US 미러 버그픽스 포함) 11 files, +616/−24
#430 파일럿 재진입 개수 스로틀 재설계 (sim/real parity) 7 files, +178/−47
#424 매수 프롬프트 게이트 (추세·반복손절) 4 files, +347
#423 루프 매도 다국어 브로드캐스트 4 files, +44/−6
#422 배치-루프 충돌 교통정리 4 files, +45/−6
(직커밋) Subscriber 운영 하네스 런북 1 file, +217

업데이트 방법

# 운영서버(main 전용): ssh root@<server>; cd /root/prism-insight; git pull --ff-only origin main
# subscriber: ~/work/restart_subscriber.sh  (pull + 프로세스 재기동 + Listening 검증)
# 신규 플래그(.env): REGIME_MIN_SCORE_FLOOR=true, PULSE_PILOT_REEXPOSURE=true
#   (REGIME_WEAK_NO_TOPDOWN, MARKET_PULSE_MODE=live 는 기존 플래그로 자동 활성)
# 구 loop_* 경로 crontab은 shim으로 무수정 동작. 신규 경로 전환은 선택.

알려진 제한사항

  • REGIME_MIN_SCORE_FLOOR: LLM 점수는 무보정 주관 척도라 절대 하한(8~9점)이 과차단할 수 있음.
    발동 로그([REGIME_MIN_SCORE_FLOOR]) 모니터링 중이며, 분포 데이터 기반 재보정 예정.
  • 파일럿 재진입: 다음 CORRECTION 종료 시점부터 최초 발동 — 그 전까지는 로그 없음이 정상.
  • fill_chaser의 KIS 정정/취소 TR은 실계좌 검증 완료, 모의계좌(VTTS)는 미검증.

텔레그램 공지

한국어

🚀 PRISM-INSIGHT v2.18.0 — 오닐 Market Pulse · 약세장 매수 절제 · 파일럿 재진입
(Release Note : https://github.com/dragon1086/prism-insight/releases/tag/v2.18.0)

이번 릴리즈는 '확실한 기회가 없으면 기다린다'(오닐)를 코드로 옮기는 데 집중했습니다.

📡 1) Market Pulse — 오닐 M 상태머신 (최대 비중)
· 분산일 카운팅 → 조정 → 팔로우스루(FTD) 상태머신을 6년 리플레이로 검증 후 LIVE 가동
· 조정장에는 분석 배치가 하루 1회로 스스로 감속 (KR 오후, US 미드데이만)
· 매도·손절 루프는 어떤 국면에도 쉬지 않습니다

🛡️ 2) 약세·횡보장 매수 하드게이트
· 미국장이 약세장에서도 모멘텀 추격을 계속하던 비대칭(버그) 수정
· 약세장일수록 매수 문턱(점수 하한)을 자동으로 올리는 하드 게이트
· 조정 판정 전 압박 구간에도 US 아침 배치 휴식

🎯 3) 파일럿 재진입 (조정 탈출 직후)
· 5거래일간 배치당 신규 진입 1종목만(주도주 우선), 비중 싣기(중복매수)는 동결
· 금액은 항상 100% — 시뮬레이터와 실계좌가 한 주도 어긋나지 않습니다

🔧 4) 내부 품질
· 암호명 loop_a/b/c를 hardstop / trend_exit / fill_chaser로 정리 (하위호환 유지)
· 루프발 매도도 다국어 채널로 방송, 배치-루프 충돌 교통정리

📊 새 게이트는 모두 fail-open 설계 — 판정 오류 시 항상 정상 매수로 동작합니다.

English

🚀 PRISM-INSIGHT v2.18.0 — O'Neil Market Pulse · weak-market buy restraint · pilot re-entry
(Release Note : https://github.com/dragon1086/prism-insight/releases/tag/v2.18.0)

This release turns O'Neil's "when there is no clear opportunity, wait" into code.

📡 1) Market Pulse — O'Neil M state machine (biggest theme)
· Distribution-day counting → Correction → Follow-Through-Day, validated on 6 years of replay, now LIVE
· During corrections, analysis batches throttle themselves to once a day (KR afternoon, US midday only)
· Sell/stop-loss loops never rest, in any regime

🛡️ 2) Hard gates against buying in weak/sideways markets
· Fixed an asymmetry where the US side kept momentum-chasing in weak regimes
· A hard floor that raises the buy-score bar as the regime weakens
· US morning batch also rests in the pre-correction UNDER_PRESSURE state

🎯 3) Pilot re-entry (right after a correction ends)
· For 5 sessions: one new position per batch (leaders first), pyramiding frozen
· Position size stays 100% — simulator and real account never diverge by a single share

🔧 4) Internal quality
· Cryptic loop_a/b/c renamed to hardstop / trend_exit / fill_chaser (fully backward compatible)
· Loop-driven sells now broadcast to multilingual channels; batch-vs-loop conflicts resolved

📊 All new gates are fail-open by design — on any detection error they fall back to normal buying.