{
  "ticker": "005380.KS",
  "ticker_name": "현대차",
  "status": "success",
  "trade_date": "2026-04-14",
  "analysis_date": "2026-04-14",
  "decision": "{\n  \"rating\": \"NO_TRADE\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.62,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"005380.KS에 대한 방향성은 조건부로 긍정적이다. 공격적 분석가는 200일 SMA 319586 대비 2026-04-13 종가 478500으로 장기 추세가 훼손되지 않았고, RSI가 38.8에서 46.8로 회복했으며 MACD 히스토그램이 양전환한 점을 근거로 반등 준비 구간이라고 봤다. 중립 분석가도 forward PER 약 9.96, Genesis 국내 누적 100만대, AI·로보틱스·미래 모빌리티 선택권, KOSPI 대형주 위험선호 흐름을 긍정적으로 평가했다. 다만 보수적 분석가가 지적한 대로 종가는 아직 10일 EMA 약 484420, VWMA 약 482719, 50일 SMA 약 508508 아래에 있고 RSI도 50 미만이며 ATR 약 28045는 종가의 약 5.9%로 여전히 높다. 따라서 오늘 즉시 매수하지 않고, 005380.KS가 484400 위에서 거래량 증가와 함께 종가를 만들 때만 소규모 시작 포지션을 검토한다. 508500 위를 회복하고 유지하면 추가 또는 비중확대가 정당화된다.\",\n  \"exit_logic\": \"기존 보유자는 핵심 보유분만 유지하되, 005380.KS가 종가 기준 445500 아래로 이탈하면 매매성 노출은 축소 또는 청산한다. 482700-484400 회복 시도가 실패한 뒤 하락 거래량이 확대되거나, 508500 부근 50일 SMA에서 재차 거절되며 모멘텀이 악화되면 비중을 줄인다. 2분기 생산 차질, 중동 물류 부담, 마진 회복 지연, 추가 대규모 음의 자유현금흐름이 확인되면 긍정적 관점을 철회한다.\",\n  \"position_sizing\": \"오늘 신규 전체 포지션은 열지 않는다. 기존 보유자는 변동성과 현금흐름 리스크를 반영해 정상 비중보다 낮게 유지한다. 005380.KS가 484400 위에서 평균 이상 거래량으로 마감하면 정상 비중보다 현저히 작은 시작 포지션만 허용한다. 508500 위를 지속적으로 유지할 때만 단계적으로 추가하며, 다음 실적에서 영업마진 회복, 운전자본 정상화, 자유현금흐름 개선이 확인되기 전까지 집중 비중은 피한다.\",\n  \"risk_limits\": \"주요 구조적 무효화 기준은 종가 기준 445500이다. 시작 포지션은 포트폴리오 손실 허용액의 작은 일부만 위험에 노출하고, 469500-508500 박스권 내부의 일반 변동성에 휘둘리는 과도하게 좁은 손절은 피한다. 484400 돌파 후 VWMA 아래로 빠르게 되돌아가거나 하락일 거래량이 뚜렷하게 커지면 즉시 재평가한다. ATR 약 28045와 beta 약 1.576을 감안해 위험선호 반전 시 손실 확대 가능성을 별도로 관리한다.\",\n  \"catalysts\": [\n    \"005380.KS가 484400 위에서 최근 평균을 웃도는 거래량으로 마감해 10일 EMA·VWMA 회복을 확인\",\n    \"005380.KS가 508500 부근 50일 SMA를 회복하고 유지해 최근 거절 구간을 돌파\",\n    \"RSI가 50 위로 올라서고 MACD 개선이 이어져 매수 주도권 확인\",\n    \"Genesis 국내 누적 100만대가 프리미엄 믹스와 마진 방어 서사를 강화\",\n    \"AI, 로보틱스, 소프트웨어 중심 차량, 미래 모빌리티 전략에 대한 투자자 후원이 확대\",\n    \"다음 실적에서 영업마진 회복, 운전자본 정상화, 자유현금흐름 개선 확인\",\n    \"KOSPI 대형주 위험선호 흐름과 지정학적 완화 기대가 유지\"\n  ],\n  \"invalidators\": [\n    \"005380.KS가 종가 기준 445500 아래로 이탈\",\n    \"482700-484400 회복 실패 후 하락 거래량 확대\",\n    \"508500 부근 50일 SMA에서 재차 거절되고 모멘텀 악화\",\n    \"공급업체 화재 또는 중동 물류 이슈가 2분기 생산·배송·마진에 중대한 부담으로 확대\",\n    \"영업마진 추가 악화 또는 또 한 번의 대규모 음의 자유현금흐름 발생\",\n    \"forward earnings 하향으로 낮은 PER이 가치 함정으로 재평가\",\n    \"Korea 대형주 위험선호 흐름 또는 지정학적 낙관론 반전\"\n  ],\n  \"watchlist_triggers\": [\n    \"005380.KS 종가가 484400 위이고 거래량이 최근 평균 이상이면 STARTER 검토\",\n    \"005380.KS 종가가 508500 위에서 유지되면 ADD 또는 OVERWEIGHT 검토\",\n    \"RSI가 50 위로 상승하고 MACD 개선이 지속되면 매수 주도권 확인\",\n    \"005380.KS 종가가 445500 아래이면 방어적 전환 및 매매성 노출 EXIT 검토\",\n    \"OpenDART 내부자 또는 주요 주주 공시에서 의미 있는 순매수·순매도 확인\",\n    \"중동 해운, 수출 물량, 공급업체 화재 이후 생산 정상화 관련 업데이트 확인\",\n    \"다음 실적에서 마진, 운전자본, 자유현금흐름 개선 여부 확인\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 4,\n    \"disclosures_count\": 1,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 1\n  }\n}",
  "started_at": "2026-04-14T10:47:18.543477+09:00",
  "finished_at": "2026-04-14T11:00:43.828994+09:00",
  "duration_seconds": 805.29,
  "metrics": {
    "llm_calls": 66,
    "tool_calls": 22,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 66
    }
  },
  "tool_telemetry": {
    "total_tool_calls": 22,
    "vendor_calls": {
      "yfinance": 15,
      "naver": 3,
      "ecos": 1,
      "opendart": 1,
      "alpha_vantage": 2
    },
    "fallback_count": 4,
    "events": [
      {
        "method": "get_stock_data",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_indicators",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_social_sentiment",
        "vendor": "naver",
        "status": "fallback",
        "fallback": true,
        "note": "naver: empty or unusable result"
      },
      {
        "method": "get_company_news",
        "vendor": "naver",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_social_sentiment",
        "vendor": "yfinance",
        "status": "fallback",
        "fallback": true,
        "note": "yfinance: empty or unusable result"
      },
      {
        "method": "get_macro_news",
        "vendor": "ecos",
        "status": "fallback",
        "fallback": true,
        "note": "ecos: ECOS API key is not configured."
      },
      {
        "method": "get_disclosures",
        "vendor": "opendart",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_macro_news",
        "vendor": "alpha_vantage",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_company_news",
        "vendor": "naver",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_income_statement",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_cashflow",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_insider_transactions",
        "vendor": "yfinance",
        "status": "fallback",
        "fallback": true,
        "note": "yfinance: empty or unusable result"
      },
      {
        "method": "get_balance_sheet",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_fundamentals",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_insider_transactions",
        "vendor": "alpha_vantage",
        "status": "success",
        "fallback": false,
        "note": null
      }
    ]
  },
  "quality_flags": [
    "token_usage_unavailable"
  ],
  "report_writer": {
    "status": "fallback",
    "scope": "ticker",
    "provider": "codex",
    "model": "gpt-5.4",
    "reason": "writer_failed",
    "error": "1 validation error for CodexChatModel\ncodex_workspace_dir\n  Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]\n    For further information visit https://errors.pydantic.dev/2.12/v/string_type"
  },
  "provider": "codex",
  "models": {
    "quick_model": "gpt-5.4",
    "deep_model": "gpt-5.4",
    "output_model": "gpt-5.4"
  }
}