technical analyst redesign implementation
결론
테크니컬 리포트 전면 재설계 Phase 1~6 완료. 신규 재설계본을 실제 market topic에 전송했고 message_id=2396 확보.
Phase 1 — 소스 엣지 확정
확인 경로:
- price-history:
~/.hermes/workspace/memory/price-history/*.json - technical context:
~/.hermes/workspace/memory/analyst-context/context-technical.json - technical signals:
~/.hermes/workspace/memory/technical-signals/latest.json - stock indicators:
~/.hermes/workspace/memory/technical-indicators/2026-04-15.json - filtered ideas/fintwit proxy:
~/.hermes/workspace/memory/filtered-ideas/*.json
보강 수집:
SPX, NDX, IWM, VIX, VIX3M, TLT, HYG, DXY, WTI, GOLD, COPPER, XLK/XLF/XLE/XLV/XLI/XLU/XLP/XLY/XLB/XLC/XLRE, SOXX, FXI, EEM, KOSPI- 모두 price-history 저장 성공.
Phase 2 — 필터 로직 구현
신규 파일:
~/.hermes/workspace/scripts/technical_context_filter.py
기능:
- z-score 20/60일 계산
- MA20/50/200 이탈률 계산
- 20일 고가 돌파, 52주 고점권, 거래량 spike 탐지
- VIX/VIX3M 기간구조, HYG-SPY 상대강도
- 섹터 ETF 1주/1달 상대강도 리더/래거드 5개씩 산출
- filtered-ideas에서 기술적 해석 소스 2~3건 추출
analyst-technical/latest.json직접 생성
Phase 3 — 출력 템플릿 반영
수정 파일:
~/.hermes/workspace/scripts/analyst_common_sender.py
technical 전용 신규 섹션:
- 📌 헤드라인
- 📊 변동성/리스크
- 🔥 z-score / MA 이탈
- ⚡ 브레이크아웃 / 브레이크다운
- 🌡️ 시장 심리 지표
- 🔄 섹터 로테이션
- 🧠 해석 주입
- 🎯 Top 3 신호
- 데이터 신선도
Phase 4 — wrapper technical 경로 교체
수정 파일:
~/.hermes/workspace/scripts/analyst_common_wrapper.sh
변경:
technical만 기존 Claude runner 대신 deterministictechnical_context_filter.py --write-latest경로 사용.TECHNICAL_REDESIGN_DISABLE=1이면 기존 runner로 되돌릴 수 있음.- macro/fundamental/pm 경로는 변경 없음.
백업:
analyst_common_wrapper.sh.bak-tech-redesign-20260416-093237analyst_common_sender.py.bak-tech-redesign-20260416-093237
Phase 5 — 1회 실행 + 검증
Dry-run preview:
- command:
ANALYST_COMMON_NO_SEND=1 ANALYST_COMMON_PRINT_BODY=1 ... analyst_common_wrapper.sh technical - body length:
2068/ 2500 이하 - 금지어 검사: 0건
실제 전송:
2026-04-16T09:35:13 OK 2396 market -1003522748967 5 none
stdout:
{"analyst":"technical","ok":true,"message_id":2396,"status":"success","sector":"market","chat_id":-1003522748967,"topic_id":5,"body_len":2068}
본문 캡처:
/tmp/technical_redesign_preview_260416.txt/tmp/technical_redesign_send_260416.txt
Phase 6 — before/after 3단 비교
| 버전 | message_id | 상태 | 핵심 차이 |
|---|---|---|---|
| 07:27 원본 | 2379 | 도달 OK | wrapper가 얇게 잘라 signal=... 중심. 섹터명/맥락/Top3 약함 |
| 08:15 v2 | 2385 | 도달 OK | 본문 노출은 개선. 그러나 technical 산출 구조 자체는 기존 latest.json 의존 |
| 09:35 재설계 | 2396 | 도달 OK | z-score/MA, 변동성, 브레이크아웃, 심리, 섹터 리더/래거드, Top3를 deterministic 산출 |
성공 기준 체크리스트
| 기준 | 결과 |
|---|---|
| 본문 2500자 이내 | PASS — 2068자 |
| 헤드라인 + Top 3 신호 | PASS |
| z-score / MA 이탈 숫자 | PASS |
| 브레이크아웃 최소 3개 | PASS — SOXX/XLY/XLK/COPPER/SPY |
| 심리 지표 최소 2개 | PASS — VIX term, HYG-SPY |
| 섹터 리더/래거드 각 5개 | PASS |
| 트위터/차트 해석 최소 2건 | PASS — MikeZaccardi 2건, biancoresearch 1건 |
| 매크로/펀더 금지어 | PASS — CPI/GDP/PER/PBR/EV/밸류/실적/마진 0건 |
| 짜치는 표현 | PASS — 지정 블랙리스트 0건 |
신규 본문 핵심 스냅샷
- Top 이벤트:
VIX z20 -1.6, MA20 -24.7%, SOXX z60 3.0 / MA20 +14.4% - 시장 방향: 상승 우위, confidence 74%
- 변동성: VIX 18.2 / VIX3M 20.8 / 단기-3M -2.6pt
- 리더: SOXX, XLY, XLK, XLC, XLRE
- 래거드: XLE, XLP, XLU, XLV, XLB
- Top3: 반도체 진입 / 에너지 이탈 / VIX term 관망
남은 이슈
- VIX9D, Put/Call, AAII는 로컬 수집 부재. 현재는 VIX3M/HYG-SPY로 대체.
- filtered-ideas 기반 해석 소스는 품질이 들쭉날쭉하다.
twitter-collector실제 기술적 계정 feed 복구 필요. - deterministic 체인이라 LLM 해설 깊이는 제한된다. 다만 해리 pain point였던 숫자·구조·Top3는 안정적으로 채운다.
자체평가
- 정확성: 4.7/5 — 요구 섹션과 금지/허용 영역을 반영했고 실제 message_id 확보.
- 완성도: 4.5/5 — VIX9D/PutCall/AAII 원천 부재는 대체 처리.
- 검증: 4.8/5 — py_compile, bash -n, dry-run, 금지어 검사, 실제 전송 완료.
- 최소 변경: 4.6/5 — technical 경로만 분기, 다른 analyst 미변경.
2026-04-16 09:43 해석형 요약 패치
해리 피드백: “수치가 너무 나열돼 의미가 없어 보임. 해석이 필요하고 요약해서 보여줘야 함.”
조치:
technical_context_filter.py에 해석형 필드 추가interpretation: 숫자가 의미하는 장세 해석evidence_compact: 핵심 근거 3줄만 유지summary: 숫자 자체보다 자금 쏠림/이탈 구조를 설명analyst_common_sender.py의 technical 본문을 숫자표형에서 판단형으로 축약- 기존: 헤드라인 → 변동성 → z-score 5개 → 브레이크아웃 5개 → 심리 → 로테이션 10개 → 해석
- 변경: 한줄 판단 → 무슨 뜻인가 → 오늘 할 일 → 핵심 근거만 → 보조 해석
검증:
- dry-run body length:
1354자 - 금지어 검사: 0건
- 실제 market topic 재전송:
message_id=2401
최신 TSV:
2026-04-16T09:43:36 OK 2401 market -1003522748967 5 none
핵심 변화:
- 숫자는 “근거”로만 3줄 남김.
- 앞부분은 바로 읽히는 판단으로 변경.
- 피로도를 낮추기 위해 섹터 리더/래거드 10개 나열을 제거하고, “반도체/성장 쏠림 vs 에너지/방어 이탈”로 요약.
추가 자체평가:
- 정확성: 4.8/5 — 해리 피드백대로 수치 나열을 해석 중심으로 전환.
- 완성도: 4.6/5 — 실제 message_id 확보 완료.
- 검증: 4.8/5 — py_compile, dry-run, 금지어 검사, 실제 발송 완료.
- 최소 변경: 4.7/5 — technical formatter/filter만 변경.
09:47 재수정 — 전반 판단/근거 누락 보완
해리 피드백: 이전 텔레그램 메시지는 근거가 부족했고, 판단 범위가 섹터/VIX에 과도하게 축소되어 있었다. technical은 섹터 전용이 아니라 나스닥·S&P·소형주, 금리·채권, 환율, 원자재, 섹터/변동성을 함께 보는 전반 판단이어야 한다.
수정 내용:
- technical_context_filter.py
- 주요 판단축을 NDX/SPY/IWM, US10Y/US2Y/TLT/HYG, DXY/USDKRW, WTI/GOLD/COPPER, SOXX/XLE/VIX로 확장.
- cross_asset_read 추가: 지수/금리·채권/환율/원자재를 문장형 해석으로 요약.
- evidence_compact 추가: 판단 근거를 7개 bullet로 복원.
- US10Y/US2Y 표기 보정: 10년금리 4.28%, 5일 -1bp 형태로 출력.
- analyst_common_sender.py
- technical 메시지 구조를 한줄 판단 → 전반 판단 → 무슨 뜻인가 → 오늘 할 일 → 판단 근거 → 보조 해석 → 데이터 신선도로 재배열.
- 섹터/변동성은 전체 판단의 일부로만 배치.
검증:
- python3 -m py_compile ~/.hermes/workspace/scripts/technical_context_filter.py ~/.hermes/workspace/scripts/analyst_common_sender.py 통과.
- dry-run 확인: 금지어 0개, body_len 약 1925자, 지수/금리/환율/원자재/섹터/변동성 근거 모두 포함.
- 실제 텔레그램 market topic 발송 성공:
- message_id: 2402
- sector: market
- topic_id: 5
- status: success
- body_len: 1925
최신 정상본은 message_id 2402이며, 이전 message_id 2401의 섹터 편중 문제를 대체한다.
09:51 재수정 — 판단 문장 옆에 즉시 근거 숫자 부착
해리 피드백: 한줄 판단과 전반 판단에서 왜 그런 결론인지 바로 보이지 않고, 근거 숫자를 아래까지 내려가야 확인할 수 있었다.
수정 내용:
- 한줄 판단 안에 핵심 숫자를 즉시 삽입:
- 지수: NDX/SPY/IWM 1주 수익률
- 로테이션: 리더/래거드 1주·1달 수익률
- 위험 확인: VIX, HYG-SPY 상대강도
- 전반 판단 4개 문장 각각에도 판단 옆에 숫자 부착:
- 지수: NDX/SPY/IWM
- 금리·채권: 10Y/TLT/HYG
- 환율: DXY/USDKRW
- 원자재: WTI/GOLD/COPPER
- 판단 근거 섹션은 제거하지 않고, 아래에서 더 자세히 재확인하는 보조 근거로 유지.
검증:
- py_compile 통과.
- dry-run body_len 약 2217자, 한줄 판단과 전반 판단에 숫자 직접 포함 확인.
- 실제 텔레그램 market topic 발송 성공:
- message_id: 2403
- sector: market
- topic_id: 5
- status: success
- body_len: 2212
최신 정상본은 message_id 2403이다. 2402는 전반 자산군은 포함했지만, 판단-근거 숫자 근접성이 부족했던 버전으로 대체한다.