{
  "ticker": "012450.KS",
  "ticker_name": "한화에어로스페이스",
  "status": "success",
  "trade_date": "2026-04-16",
  "analysis_date": "2026-04-16",
  "decision": "{\n  \"rating\": \"OVERWEIGHT\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.67,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"012450.KS의 중기 배분 의견은 OVERWEIGHT로 유지한다. 공격적 분석가가 지적했듯 최신 종가 1,509,000은 10일 지수이동평균 약 1,477,851, 거래량가중평균 약 1,427,640, 50일 단순이동평균 약 1,341,320 위에 있어 추세가 훼손되지 않았고, RSI 58.74와 양의 MACD는 상승 추세가 아직 살아 있음을 보여준다. 다만 보수적·중립 분석가의 지적처럼 가격은 1,530,000-1,559,000 저항권에 가깝고, 거래량은 153,464로 감소했으며, MACD 히스토그램은 11,707.02에서 9,120.56으로 둔화되었다. 따라서 방향성은 BULLISH지만 오늘 즉시 추격 매수하지 않고 WAIT한다. 신규 진입은 1,559,000 위의 거래량 동반 일봉 종가 확인, 또는 1,477,000-1,427,000 구간의 질서 있는 조정과 수요 확인 후에만 정당화된다. 조건이 충족되면 소규모 STARTER는 가능하다.\",\n  \"exit_logic\": \"기존 보유분은 1,477,000 부근 10일 지수이동평균을 종가로 이탈한 뒤 빠르게 회복하지 못하면 일부 축소한다. 1,427,000 부근 거래량가중평균을 하향 이탈하면 최근 매수자 지지가 약해진 것으로 보고 추가 매수는 중단한다. 1,341,000 부근 50일 단순이동평균 아래 일봉 종가는 중기 추세 훼손 신호이므로 포트폴리오 태세를 재검토하고 방어적 축소 또는 청산 검토로 전환한다. 실적 발표와 기업설명회에서 매출 성장에도 영업이익률 압박이 지속되거나, 2026-04-10 공급계약의 수익성·납기·운전자본 조건이 불리하거나, 최근 자유현금흐름이 일회성 운전자본 효과에 과도하게 의존한 것으로 확인되면 투자 논리를 낮춘다.\",\n  \"position_sizing\": \"기존 보유자는 핵심 비중을 유지하되 저항권 돌파 전 공격적 증액은 피한다. 신규 자금은 정상 비중보다 작게 시작한다. 1,559,000 위 거래량 동반 종가가 확인되면 제한적 STARTER 또는 기존 보유분의 부분 ADD를 검토한다. 조정 진입은 1,477,000을 방어하고 RSI가 50 위에서 유지되며 MACD 히스토그램이 안정될 때만 단계적으로 집행한다. 1,427,000 부근 재시험은 명확한 수요와 악재성 공시 부재가 확인될 때만 더 작은 규모로 검토한다. ATR이 약 5.5%로 크고 실적, 공시, 방산 지정학 뉴스에 따른 갭 위험이 있어 초기 비중은 보수적으로 제한한다.\",\n  \"risk_limits\": \"1,477,000 아래에서는 가격이 해당 구간을 회복하고 거래량이 개선되기 전까지 추가 매수를 금지한다. 단기 위험 기준은 최근 종가에서 약 1 ATR 아래인 1,425,000 부근으로 둔다. 중기 투자 논리의 핵심 위험선은 50일 단순이동평균 부근 1,341,000이다. 1,559,000 돌파 시 거래량이 동반되지 않으면 추격하지 않는다. KOSPI 위험 선호가 급격히 약화되거나, 방산 프리미엄이 축소되거나, 공시가 수익성·현금흐름 가정을 훼손하면 즉시 비중과 등급을 재평가한다.\",\n  \"catalysts\": [\n    \"2026-04-10 단일판매·공급계약 공시가 수주와 매출 가시성을 높였으며, 계약 규모·마진·납기·통화 조건 확인이 추가 상승 촉매가 될 수 있음\",\n    \"2026-04-15에 공지된 실적 발표와 기업설명회에서 수주잔고의 질, 마진 회복, 지속 가능한 현금창출, 가이던스가 확인될 가능성\",\n    \"1,530,000-1,559,000 저항권을 거래량 동반 일봉 종가로 돌파할 경우 기술적 재가속 확인\",\n    \"K9/K9MH 해외 포병 조달 진전 또는 미국 현지화 속도 개선이 방산 성장 프리미엄을 높일 가능성\",\n    \"기관 위험 선호와 KOSPI 강세가 대형 방산 주도주로의 자금 유입을 지속시킬 가능성\"\n  ],\n  \"invalidators\": [\n    \"1,477,000 방어 실패 후 1,427,000 부근 거래량가중평균으로 약세가 이어지는 경우\",\n    \"1,341,000 부근 50일 단순이동평균 아래 일봉 종가로 중기 추세가 훼손되는 경우\",\n    \"매출 성장에도 영업이익률 압박이 지속되는 실적 발표\",\n    \"계약 공시의 경제성이 낮거나 납기 지연, 불리한 운전자본 조건, 약한 환위험 방어가 확인되는 경우\",\n    \"미국 포병 시장에서 경쟁사가 현지화, 생산 준비, 조달 신뢰도에서 materially 앞선다는 증거가 강화되는 경우\",\n    \"시장 위험 선호 반전 또는 지정학적 방산 프리미엄 축소로 밸류에이션 압축이 발생하는 경우\"\n  ],\n  \"watchlist_triggers\": [\n    \"1,559,000 위 거래량 동반 일봉 종가 확인 시 ADD 검토\",\n    \"1,477,000을 지키는 조정, RSI 50 이상, MACD 히스토그램 안정화 확인 시 STARTER 검토\",\n    \"1,427,000 부근 거래량가중평균 재시험에서 명확한 수요와 악재성 공시 부재 확인 시 단계적 진입 검토\",\n    \"실적 발표와 기업설명회에서 마진 회복, 수주잔고 품질, 지속 가능한 현금창출 확인\",\n    \"공급계약의 계약금액, 마진 구조, 납기, 통화 조건 후속 공시 확인\",\n    \"1,341,000 아래 일봉 종가 발생 시 포트폴리오 태세 하향 검토\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 2,\n    \"disclosures_count\": 5,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 1\n  }\n}",
  "started_at": "2026-04-16T10:06:42.957349+09:00",
  "finished_at": "2026-04-16T10:21:23.081420+09:00",
  "duration_seconds": 880.12,
  "metrics": {
    "llm_calls": 62,
    "tool_calls": 22,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 62
    }
  },
  "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_cashflow",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_income_statement",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_balance_sheet",
        "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_fundamentals",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_insider_transactions",
        "vendor": "alpha_vantage",
        "status": "success",
        "fallback": false,
        "note": null
      }
    ],
    "called_tools": [],
    "intraday_snapshot_used": false
  },
  "quality_flags": [
    "token_usage_unavailable",
    "intraday_snapshot_missing_same_day"
  ],
  "report_writer": {
    "status": "success",
    "scope": "ticker",
    "provider": "codex",
    "model": "gpt-5.4"
  },
  "provider": "codex",
  "models": {
    "quick_model": "gpt-5.4",
    "deep_model": "gpt-5.4",
    "output_model": "gpt-5.4"
  }
}