콘텐츠로 이동

데이터 파이프라인 — 수집 → 분석 → 활용 연결

데이터 자산 목록

파일 내용 갱신 크기
data/chart_profiles/all_profiles.json 415종목 차트 DNA (존/캐릭터/저점추이) 주말 415종목
data/sector_strength/energy_theme_stocks.json 에너지 27테마→357종목 매핑 필요시 357종목
data/sector_strength/energy_supply_analysis.json 에너지 59종목 전쟁 전후 수급 주말 59종목
data/ats_main.valuechain 밸류체인 분류 (S228) PM 직접 편집 6 branch × 29 segment
(S228 폐기: 263테마 등락률은 ats_main.valuechain + 실시간 FDR 시세로 대체)
data/weekly_reports/weekly_YYYYMMDD.json 주간 전종목 상한가/등락률/거래대금 매주 2721종목
docs/trading_playbook/POLICY_TRACKER.md 글로벌 정책 추적 /rr시 40+항목
data/tracking/tracking_list.json PM 추적 종목 수시 -

활용 시점별 연결

1. /rs 일일 루틴에서

장전 프리마켓 (08:50~09:30)

입력: 뉴스 + POLICY_TRACKER
→ "오늘 영향받을 테마" 식별
→ theme_history에서 해당 테마 종목 추출
→ all_profiles.json에서 해당 종목 DNA 조회
→ "이 종목은 갭업 되메우기 잦으니 시초가 추격 주의" 같은 판단

장중 종가매매 분석 (14:00~15:30)

입력: 당일 상승률/거래대금 TOP
→ all_profiles.json에서 DNA 조회
→ "이 종목은 zone_solid라 지지 신뢰도 높음" / "zone_break라 추격 위험"
→ 시나리오 카드에 DNA 정보 포함

2. /rr 주말 리서치에서

테마 분석 시

입력: POLICY_TRACKER 순회 → 변화 있는 테마
→ energy_theme_stocks.json에서 관련 종목 전체 추출
→ all_profiles.json에서 각 종목 DNA/저점추이/존 조회
→ energy_supply_analysis.json에서 수급 확인
→ "이 테마에서 저점 올리면서 기관 매집 중인 종목 = X"

주간 리포트 시

입력: weekly_*.json (상한가/거래대금/상승률)
→ all_profiles.json과 교차
→ "이번 주 상한가 종목 중 zone_solid인 곳은 추적 가치, zone_break인 곳은 일회성 가능"

3. PM이 종목을 물어볼 때

"대한해운 어때?"

1. all_profiles.json → DNA/존/캐릭터 즉시 조회
2. energy_supply_analysis.json → 전쟁 전후 수급
3. theme_history → 소속 테마 + 테마 강도
4. POLICY_TRACKER → 관련 정책 상태
→ 통합하여 프로파일 보고

"에너지 관련 아직 안 움직인 종목?"

1. energy_theme_stocks.json → 에너지 357종목
2. all_profiles.json → 저점 UP + 52주선 아래 필터
3. energy_supply_analysis.json → 기관/외인 유입 확인
→ 바닥권 축적 종목 리스트


자동 연결 함수 (stock_lookup)

/rs/rr에서 종목 코드만 넣으면 모든 데이터를 한번에 조회하는 함수.

def stock_lookup(code):
    """종목 코드 → 모든 데이터 통합 조회"""
    result = {}

    # 1. 차트 프로파일
    profiles = load_json('data/chart_profiles/all_profiles.json')
    if code in profiles['profiles']:
        result['profile'] = profiles['profiles'][code]

    # 2. 에너지 테마 매핑
    energy = load_json('data/sector_strength/energy_theme_stocks.json')
    if code in energy['stocks']:
        result['energy_themes'] = energy['stocks'][code]['themes']

    # 3. 수급 (있으면)
    supply = load_json('data/sector_strength/energy_supply_analysis.json')
    for s in supply:
        if s['code'] == code:
            result['supply'] = s
            break

    # 4. 테마 강도
    # S228: theme_history 폐기. ats_main.valuechain 사용
    # 해당 종목이 속한 테마의 현재 상태

    return result

갱신 스케줄

시점 실행 갱신 대상
매일 장후 (16:00~) /rs POST_MARKET theme_history, latest.json
매주 토요일 /rr 시작 시 all_profiles.json (배치), weekly_*.json, energy_supply
TRACKER 변경 시 /rr POLICY_TRACKER.md
PM 요청 시 수시 energy_theme_stocks (테마 추가 시)

구현 우선순위

  1. stock_lookup 함수 — 종목 코드 → 통합 조회 (즉시 구현 가능)
  2. /rs 연결 — 장전/장중 루틴에서 자동으로 프로파일 참조
  3. 주말 배치 자동화 — all_profiles + weekly 자동 갱신
  4. 스크리닝 명령어 — "저점UP + 52주선아래 + 에너지테마" 같은 조합 필터

알려진 이슈 / 수정 대기

FIX-1. 단일 에이전트 API 실패 → 전체 루틴 exit 1 (재시도 로직 부재) [우선순위 HIGH]

증상 (2026-05-29 2회 발생, 동일 패턴) | 발생 | 루틴 | 실패 에이전트 | API 에러 | 결과 | |------|------|--------------|----------|------| | 5/29 오전 | morning_open | global-scanner | 400 thinking blocks cannot be modified | §1 글로벌 비어서 exit 1 | | 5/29 오후 | post_market(v4) | signal-scorecard | 529 Overloaded | UNIT 3 비어서 exit 1 |

근본 원인 (코드 근거) 1. call_agent에 재시도 없음 — scripts/evening/utils.py:161-184. subprocess.run을 1회만 호출, returncode != 0이면 즉시 [ERROR] 문자열 반환(L184). 일시적 API 529/400도 재시도 없이 실패 처리. 2. enforce 게이트가 빈 산출물(<200 bytes)을 잡고 sys.exit(1)scripts/run_morning_open.py:44-57 (post_market v4도 동일 P2-3 게이트). 3. assemble_report()가 enforce보다 먼저 실행(run_morning_open.py:94-98) → 리포트 파일은 나머지 섹션 포함해 정상 생성되나 exit code만 1. 1개 섹션만 [ERROR] returncode=1 텍스트로 비어있음.

영향: 데이터 손실 없음(5개 중 4~5개 성공). 단 누락 1개 섹션은 메인 세션이 캐시 데이터로 수동 보강해야 완결 → 자동 파이프라인 관점에선 "exit 1 + 수동 개입 필요".

제안 수정 (최소·정확) - scripts/evening/utils.py:161 call_agent재시도 래퍼 추가: - returncode != 0 또는 stdout에 529/Overloaded/400/thinking blocks 포함 시 → 백오프(5s, 15s) 후 최대 2~3회 재시도. - 529(Overloaded)는 잠시 후 재호출하면 대개 성공하는 전형적 일시 에러. - morning/postmarket가 이 함수를 공유하므로 1곳 수정으로 양쪽 적용. - (옵션, 명세 변경 → 별도 판단) enforce 게이트를 hard exit 대신 "경고 + 부분 산출 표시"로 완화.

상태: 미수정 (PM 기록 요청 2026-05-29). 수정 시 본 항목에 [DONE] + 커밋/날짜 기재.

FIX-2. (관찰) 보조 데이터 산출 결함 [우선순위 MEDIUM]

  • step_E/step_E3 테마그룹 0건 반환 지속 (5/28~5/29). 그룹핑 로직 점검 필요.
  • step_F 한글 종목명 cp949 인코딩 깨짐 → 종목명 오기 유발 (코드는 정상). 디코딩 수정 필요.
  • step_V/step_VV verdict_list 비어있음 (추적 verdict 0건 — 데이터 부재일 수 있음, 확인 필요).
  • 베이시스·프로그램 비차익 미수집(5/15 이후) — macro_series 수집원 점검.

상태: 관찰 중 (2026-05-29 기록).