{
  "ticker": "012450.KS",
  "ticker_name": "한화에어로스페이스",
  "status": "success",
  "trade_date": "2026-04-16",
  "analysis_date": "2026-04-17",
  "decision": "{\n  \"rating\": \"OVERWEIGHT\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.72,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"012450.KS는 중기적으로 비중확대 가능한 상승 논리가 유지된다. 공격적 분석가가 지적한 대로 2026-04-15 종가 1,509,000 KRW는 10 EMA 약 1,485,000 KRW, 50 SMA 약 1,345,700 KRW, 200 SMA 약 1,057,250 KRW 위에 있어 추세는 훼손되지 않았고, MACD도 2026-04-01의 7,453에서 2026-04-16의 50,316까지 회복했다. 계약 공시, K-방산 실적 기대, 순차입금 감소, 2025-12-31 자유현금흐름 개선도 투자 논리를 지지한다. 다만 보수적·중립적 분석가가 공통으로 강조한 것처럼 주가는 50 SMA와 200 SMA 대비 크게 벌어져 있고, RSI는 59.50으로 과열은 아니지만 2026-04-07의 63.67에서 낮아졌으며, 4월 거래량은 3월 초 1.1백만 주 이상 급증 구간보다 약하다. 따라서 오늘은 추격 매수하지 않고 WAIT를 유지한다. 신규 진입은 1,559,000 KRW 상향 종가 돌파가 최근 4월 평균을 뚜렷하게 웃도는 거래량 및 다음 거래일 가격 안착 또는 실적·IR 확인과 동반될 때, 또는 1,485,000 KRW 부근으로 통제된 되돌림이 나오고 RSI가 55 위에서 안정될 때에만 소규모 시작 포지션으로 정당화된다.\",\n  \"exit_logic\": \"기존 보유분은 012450.KS가 1,485,000 KRW 부근 단기 추세 지지 위에 있고 계약·실적 모멘텀이 유지되는 동안 보유한다. 1,559,000 KRW 부근 반복 실패가 약한 거래량, RSI 55 하회, 또는 실적 발표 전후의 실망스러운 수급과 동반되면 전술 비중을 줄인다. 1,437,000-1,450,000 KRW 지지 구간을 종가 기준으로 이탈하면 의미 있게 축소하고, 50 SMA 부근인 약 1,345,000 KRW 아래로 종가가 내려가면 중기 OVERWEIGHT 논리를 재검토한다. 실적·IR에서 수출 마진, 수주잔고 전환, 현금 전환율, 가이던스가 기대를 충족하지 못하면 가격 지지 여부와 무관하게 추가 매수는 중단한다.\",\n  \"position_sizing\": \"오늘 신규 풀사이즈 진입은 금지한다. ATR이 약 81,756 KRW로 크고 주가가 중기 이동평균 대비 확장되어 있으므로, 유효한 돌파나 지지 확인 후에도 정상 비중보다 작은 시작 포지션만 허용한다. 기존 핵심 보유분은 유지할 수 있으나 실적·IR 확인 전 집중도 증가는 피한다. 돌파 확인 후 추가 비중은 거래량 후속 확인, 1,559,000 KRW 위 가격 안착, 마진과 현금흐름의 질 확인이 모두 충족될 때 단계적으로만 집행한다.\",\n  \"risk_limits\": \"전술 1차 위험선은 1,450,000 KRW이며, 정상 변동성을 감안한 넓은 손절 검토 구간은 약 1,425,000 KRW다. 1,437,000-1,450,000 KRW 지지대의 지속 이탈은 전술 축소 신호이고, 1,345,000 KRW 하회 종가는 중기 추세 훼손 신호다. 약 26.46배 PER의 밸류에이션 부담, 2025-09-30 분기 2.91조 KRW 보통주 발행과 주식 수 증가, 자본정책 논란, 높은 부채, 약 1.023의 유동비율, 설비투자 확대, 운전자본에 크게 의존한 2025-12-31 현금흐름 개선, 중동·방산 지정학 프리미엄 반전이 핵심 리스크다. 약한 거래량의 1,559,000 KRW 돌파는 매수 신호가 아니라 관찰 신호로 처리한다.\",\n  \"catalysts\": [\n    \"2026-04-01 및 2026-04-10 OpenDART 단일판매·공급계약 공시가 수주잔고와 매출 가시성을 강화\",\n    \"2026-04-15 실적 프리뷰와 IR에서 마진, 수주잔고 품질, 현금 전환율, 가이던스 확인 가능\",\n    \"주요 4개 K-방산 기업의 1분기 영업이익이 전년 대비 37.4% 증가한 1.2389조 KRW로 예상된다는 섹터 기대\",\n    \"중동 방공·미사일 방어 수요가 012450.KS의 수출 수주 기대를 지지\",\n    \"103.3십억 KRW 규모의 달 관련 프로젝트와 우주·항공 서사가 전통 방산을 넘어선 플랫폼 가치평가를 지지\"\n  ],\n  \"invalidators\": [\n    \"실적 또는 IR에서 마진 품질, 수출 수익성, 수주잔고 전환, 현금흐름 지속성이 확인되지 않음\",\n    \"추가 증자, 지배구조 이슈, 자본정책 실책으로 희석 우려가 재부각됨\",\n    \"공급계약이 저마진, 지연, 또는 운전자본 부담이 큰 구조로 드러남\",\n    \"지정학 프리미엄이 약해지는 동안 신규 수주나 실적 상향이 이를 대체하지 못함\",\n    \"1,437,000-1,450,000 KRW 지지대의 지속 이탈 또는 1,345,000 KRW 50 SMA 하회 종가로 추세가 훼손됨\"\n  ],\n  \"watchlist_triggers\": [\n    \"1,559,000 KRW 위 종가 돌파와 최근 4월 평균을 뚜렷하게 웃도는 거래량 동반\",\n    \"돌파 후 다음 거래일에도 1,559,000 KRW 위 가격 안착 또는 지지 재확인\",\n    \"1,485,000 KRW 부근 되돌림에서 지지 확인 및 RSI 55 이상 안정\",\n    \"1,600,000 KRW 부근 Bollinger 상단 접근 시 3월식 거래 참여 회복 여부 확인\",\n    \"실적·IR 이후 2025-12-31 현금흐름 개선이 단순한 시점 차이나 운전자본 효과만이 아니라는 증거\",\n    \"새 OpenDART 계약 또는 수주 발표에서 규모, 마진 품질, 납기 일정이 명확하게 확인됨\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 5,\n    \"disclosures_count\": 5,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 2\n  }\n}",
  "started_at": "2026-04-17T09:11:18.932072+09:00",
  "finished_at": "2026-04-17T09:25:41.727863+09:00",
  "duration_seconds": 862.8,
  "metrics": {
    "llm_calls": 58,
    "tool_calls": 23,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 58
    }
  },
  "tool_telemetry": {
    "total_tool_calls": 23,
    "vendor_calls": {
      "yfinance": 16,
      "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_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_company_news",
        "vendor": "naver",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_macro_news",
        "vendor": "alpha_vantage",
        "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_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"
  ],
  "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"
  },
  "intraday_snapshot_attempts": [
    {
      "ticker": "012450.KS",
      "attempted": true,
      "success": true,
      "checkpoint": "10:05",
      "interval": "5m",
      "attempted_at": "2026-04-17T10:40:18.981401+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-17T10:20:00+09:00"
    },
    {
      "ticker": "012450.KS",
      "attempted": true,
      "success": true,
      "checkpoint": "selective_rerun",
      "interval": "5m",
      "attempted_at": "2026-04-17T10:56:22.358710+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-17T10:35:00+09:00"
    }
  ],
  "latest_intraday_snapshot_attempt": {
    "ticker": "012450.KS",
    "attempted": true,
    "success": true,
    "checkpoint": "selective_rerun",
    "interval": "5m",
    "attempted_at": "2026-04-17T10:56:22.358710+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T10:35:00+09:00"
  },
  "intraday_snapshot_latest_attempt": {
    "ticker": "012450.KS",
    "attempted": true,
    "success": true,
    "checkpoint": "selective_rerun",
    "interval": "5m",
    "attempted_at": "2026-04-17T10:56:22.358710+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T10:35:00+09:00"
  }
}