← 리포트 목록
oil_supply_monitor 가격 신선도 + macro 입력 chain 점검
2026-04-24
oil
[oil-supply-monitor, macro, freshness, yfinance, hermes]
Executive Summary
oil_supply_monitor가격 provenance 2026-04-17 정체의 직접 원인은 yfinance 현재 실패가 아니라oil_supply_monitor.py안의2026-04-17provenance hardcode였다.- 패치 후 강제 실행 완료: WTI/Brent provenance가
2026-04-17→2026-04-23으로 갱신됐고, WTI95.85, Brent105.07이 state에 반영됐다. - macro 입력 chain은 Hermes
market-indicators가 오늘 13:05 KST 기준 최신이다. 다만 ron-pipeline MCP는 OpenClaw memory를 우선 읽고 있어 Hermes 우선으로 패치했다.
1. 진단 결과
1.1 가격 stale 원인
문제 상태:
| 지표 | Before provenance | After provenance | After 값 |
|---|---|---|---|
| WTI | 2026-04-17 | 2026-04-23 | 95.85 |
| Brent | 2026-04-17 | 2026-04-23 | 105.07 |
| JKM | 2026-04-17 | 2026-04-23 | 16.39 |
| Singapore crack proxy | 2026-04-17 | 2026-04-23 | 49.18 |
확인한 직접 원인:
collect_spot_prices()자체는/opt/homebrew/bin/python3.11에서CL=F,BZ=F,HO=F,RB=F,NG=F를 정상 수집했다.- 그러나
_apply_verified_source_overrides()가 provenance 날짜를2026-04-17로 고정해 state/snapshot에 낡은 출처처럼 남겼다. - 과거 로그에는
possibly delistedyfinance 에러가 있었지만, 현재 가격 stale의 핵심 원인은 fetch 실패가 아니라 provenance hardcode였다.
1.2 wiki 연속 실패
강제 실행 로그에 wiki 연속실패 43회 감지 → 대체 쿼리 활성화가 남아 있다. 이 작업에서는 가격 신선도가 핵심이라 중단 대신 가격 수집 경로를 분리·검증했다. 실행은 정상 종료됐고 wiki 실패는 가격 갱신을 막지 않았다.
2. 수정 내역
2.1 백업
/Users/ron/.hermes/workspace/scripts/pipeline/oil_supply_monitor.py.bak-price-provenance-20260424/Users/ron/.hermes/workspace/scripts/shared/telegram.py.bak-oil-import-os-20260424/Users/ron/.openclaw/mcp-servers/ron-pipeline/index.js.bak-indicators-hermes-20260424
2.2 코드 변경
/Users/ron/.hermes/workspace/scripts/pipeline/oil_supply_monitor.pycollect_spot_prices()가 값뿐 아니라_dates,_tickers를 반환하도록 보강.- WTI/Brent/JKM/Crack provenance를 hardcoded
2026-04-17대신 yfinance 실제data_date로 기록. -
CL futures chain provenance도 curve item의
data_date를 우선 사용. -
/Users/ron/.hermes/workspace/scripts/shared/telegram.py -
os.environ사용부가 있는데import os가 없어 oil monitor import 시 실패하던 문제 수정. -
/Users/ron/.openclaw/mcp-servers/ron-pipeline/index.js get_latest_indicators가 OpenClaw market-indicators만 읽던 로직을 Hermes 우선, OpenClaw fallback으로 변경.- Hermes 경로:
/Users/ron/.hermes/workspace/memory/market-indicators/ - OpenClaw fallback:
/Users/ron/.openclaw/workspace/memory/market-indicators/
3. 강제 재실행 검증
실행 명령:
PYTHONPATH=/Users/ron/.hermes/workspace/scripts:/Users/ron/.hermes/workspace/scripts/shared:/Users/ron/.hermes/workspace/scripts/pipeline \
/opt/homebrew/bin/python3.11 /Users/ron/.hermes/workspace/scripts/pipeline/oil_supply_monitor.py
증거:
- 로그:
/Users/ron/.hermes/logs/oil_supply_monitor_manual_20260424_freshness_fix.log - stderr:
/Users/ron/.hermes/logs/oil_supply_monitor_manual_20260424_freshness_fix.err.log - state:
/Users/ron/.hermes/workspace/memory/oil-supply-monitor/state.json - snapshot:
/Users/ron/knowledge-agent/500-signals/에너지/260424_oil-supply-snapshot.md
결과:
- exit code:
0 - state mtime:
2026-04-24 13:17:24 KST - WTI provenance:
yfinance CL=F, date2026-04-23, methodapi - Brent provenance:
yfinance BZ=F, date2026-04-23, methodapi - Telegram market 발송 및 차트 발송 완료 로그 확인
- 품질 평가:
5.0/5.0
잔여 stderr:
CLH26.NYM,NGH26.NYM등 과거/전쟁전 커브용 일부 ticker 404가 남았다.- 현물 WTI/Brent 수집에는 영향 없음.
4. macro 입력 chain 점검
4.1 market-indicators
Hermes 최신 파일:
/Users/ron/.hermes/workspace/memory/market-indicators/2026-04-24.json- mtime:
2026-04-24 13:05:43 KST collected_at:2026-04-24T13:05:43.213066
핵심 지표:
| 지표 | 값 | data_date |
|---|---|---|
| WTI | 95.85 | 2026-04-23 |
| BRENT | 105.07 | 2026-04-23 |
| DXY | 98.80 | 2026-04-23 |
| VIX | 19.31 | 2026-04-23 |
OpenClaw 쪽 동일 날짜 파일은 mtime 02:00:59 KST로 Hermes보다 낡았다. 그래서 MCP도 Hermes 우선으로 바꿨다.
4.2 ron-pipeline MCP get_latest_indicators
- 기존:
/Users/ron/.openclaw/workspace/memory/market-indicators만 읽음. - 수정 후: Hermes market-indicators 우선, 없을 때만 OpenClaw fallback.
- 검증:
node --check /Users/ron/.openclaw/mcp-servers/ron-pipeline/index.js통과. - 주의: 이미 떠 있는 MCP 프로세스는 재시작/새 세션에서 반영될 수 있다.
4.3 DART / EDGAR
오늘 산출물 존재:
- DART:
/Users/ron/knowledge-agent/100-inbox/124 dart-edgar/2026-04-24_dart_latest.json, mtime06:00:48 KST - EDGAR:
/Users/ron/knowledge-agent/100-inbox/124 dart-edgar/2026-04-24_edgar_latest.json, mtime06:11:07 KST
판정: 오늘 데이터 산출 확인.
4.4 ETF / price-history / KIS
- price-history sample:
/Users/ron/.hermes/workspace/memory/price-history/SPY.json, mtime2026-04-24 13:00:05 KST - 관련 Hermes cron은 존재하고 enabled 상태다.
- 현재 Codex 세션에는
kis-apiMCP tool이 직접 노출되어 있지 않아 live MCP 호출은 못 했다. - 파일 mtime 기준 price-history chain은 오늘 갱신 확인. 단, 내부
data_date필드 표준화는 별도 과제다.
5. 검증 명령 결과
python3 -m py_compile scripts/pipeline/oil_supply_monitor.py scripts/shared/telegram.py→ 통과node --check /Users/ron/.openclaw/mcp-servers/ron-pipeline/index.js→ 통과collect_spot_prices()단독 호출 → WTI/Brent/HH/JKM/HO/RB 모두 2026-04-23 기준 수집oil_supply_monitor.py강제 실행 → exit 0, state/snapshot 갱신
Remaining Risks
- wiki fetch 연속 실패 43회는 아직 남아 있다. 가격 critical path는 회피됐지만 wiki/news fetch는 별도 안정화가 필요하다.
- 과거 futures ticker 일부 404가 stderr에 남는다. 현재 현물 가격 갱신에는 영향 없지만 chart/history 품질에는 영향 가능.
- Hermes cron jobs state의 last_run 표시가 실제 파일 mtime보다 낡게 보이는 잡들이 있다. scheduler state audit가 필요하다.
- ron-pipeline MCP 패치는 코드 검증까지 완료했지만, 이미 떠 있는 MCP 프로세스에는 재시작/새 세션이 필요할 수 있다.
자체평가
- 정확성: 4.5/5 — stale 원인 특정, 가격 provenance 갱신, macro chain 주요 경로 확인.
- 완성도: 4.2/5 — wiki 43회 실패와 futures 404는 별도 리스크로 남김.
- 검증: 4.5/5 — py_compile, node check, 단독 fetch, 강제 실행, state 확인 완료.
- 최소 변경: 4.5/5 — 가격 provenance와 MCP 경로 우선순위 중심의 제한적 수정.
종합: 4.4/5
DONE