{
  "ticker": "042700.KS",
  "ticker_name": "한미반도체",
  "status": "success",
  "trade_date": "2026-04-15",
  "analysis_date": "2026-04-15",
  "decision": "{\n  \"rating\": \"OVERWEIGHT\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.64,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"042700.KS는 AI/HBM 장비 대표성, 영업이익률 33.3%, 순이익률 37.1%, ROE 34.8%, ROA 20.6%, 현금성자산 2762억원과 총차입금 25억원 수준의 낮은 레버리지 때문에 중기 투자 매력은 유지된다. 다만 2026-04-14 유효 종가 284000은 10일 EMA 276423, 볼린저 중심선 279825, VWMA 270018을 회복했지만 286000 박스 상단과 290000-300000 안착은 아직 확정되지 않았다. 따라서 오늘은 추격 매수하지 않고 WAIT가 맞다. 진입은 276000-280000 지지 확인 후 매도 압력이 줄고 반등 품질이 개선될 때 소규모 starter를 허용하거나, 286000 위 종가 돌파가 최근 387276-558026주 범위를 의미 있게 웃도는 거래량과 함께 나오고 290000 위 되밀림이 제한될 때 허용한다. 300000 위 수용은 추가 증액 조건이지 즉시 과대 비중 전환 조건은 아니다.\",\n  \"exit_logic\": \"기보유분은 276000 종가 이탈 시 단기 반등 구조가 훼손된 것으로 보고 축소한다. 270000 이탈은 VWMA와 전술 지지선 훼손으로 판단해 전술 노출을 컷한다. 252000 재시험 또는 이탈은 3월 말 이후 형성된 중기 베이스 훼손으로 보고 중기 bull case를 재검토한다. 다음 IR 또는 실적에서 HBM 장비 주문, 출하 시점, 재고와 재공품의 매출 전환, 고객 수요 가시성이 확인되지 않으면 투자 논리를 낮춘다.\",\n  \"position_sizing\": \"확인 전 신규 매수는 하지 않는다. 조건이 충족될 때도 평균진폭 18696원, 종가 대비 약 6.6%의 변동성을 감안해 정상 core보다 작은 starter로 시작한다. 276000-280000 지지 확인 진입은 가장 작은 1차 트랜치로 제한하고, 286000 돌파와 290000 위 유지가 확인되면 1차 비중을 허용한다. 300000 위 수용과 거래량 유지, 또는 IR·실적에서 HBM 수요의 숫자 확인이 동반될 때만 단계적으로 증액한다.\",\n  \"risk_limits\": \"042700.KS 총 노출은 기술적 확인과 유동성 개선 전까지 정상 core 비중보다 낮게 유지한다. 선행 PER 56.7배, 베타 2.245, 2025년 4분기 매출 830억원으로의 둔화, 낮아진 최근 거래량은 손실 속도가 빠를 수 있음을 뜻한다. 공매도 잔고 1조7973억원은 숏커버 연료가 될 수 있지만 확정 촉매 없이는 하락 압력 신호로도 작동할 수 있으므로 단독 bullish 근거로 쓰지 않는다. 일중 변동성 안에 너무 촘촘한 손절을 두지 말고 276000, 270000, 252000의 구조적 가격선을 기준으로 관리한다.\",\n  \"catalysts\": [\n    \"042700.KS가 276000-280000을 방어한 뒤 286000 위로 종가 돌파하고 거래량이 최근 387276-558026주 범위를 의미 있게 상회한다.\",\n    \"290000-300000 구간에서 되밀림이 제한되고 가격 수용이 확인되어 2026-03~2026-04 박스권 조정이 상방으로 해소된다.\",\n    \"IR 또는 다음 실적에서 HBM 장비 수요, 주문 가시성, 출하 일정, 고객 수요, 재고와 재공품의 매출 전환이 확인된다.\",\n    \"AI/HBM 가치사슬과 글로벌 반도체 위험 선호가 유지되어 고마진 장비주에 대한 프리미엄 밸류에이션이 지속된다.\",\n    \"회사별 긍정 뉴스나 수주 가시성이 공매도 잔고 1조7973억원의 일부 숏커버를 유발한다.\"\n  ],\n  \"invalidators\": [\n    \"042700.KS가 276000을 종가 기준으로 이탈해 10일 EMA와 볼린저 중심선 회복 논리가 약화된다.\",\n    \"270000을 거래량 증가와 함께 이탈해 VWMA 부근 전술 지지선이 훼손된다.\",\n    \"252000을 재시험하거나 이탈해 3월 말 이후의 post-correction base가 무너진다.\",\n    \"다음 실적에서 매출과 영업이익 둔화가 이어지고 주문 회복, 출하 타이밍, 재고의 매출 전환 설명이 부족하다.\",\n    \"HBM/AI 반도체 심리가 반전되거나 고객 집중, 주문 지연, 높은 밸류에이션 부담이 주된 내러티브가 된다.\"\n  ],\n  \"watchlist_triggers\": [\n    \"286000 돌파의 종가 품질과 거래량이 단순 558026주 상회에 그치는지, 의미 있는 거래대금 증가를 동반하는지 확인한다.\",\n    \"290000-300000 구간에서 안착하는지 또는 박스 상단 실패 돌파로 되밀리는지 관찰한다.\",\n    \"276000-280000 지지 테스트에서 10일 EMA 276423과 볼린저 중심선 279825 부근 매수세가 유지되는지 본다.\",\n    \"거래량이 최근 387276-558026주 수준에 머무는지, 2월 말 급등기 600만-670만주와는 차이가 크다는 점을 감안해 돌파 신뢰도를 조정한다.\",\n    \"2026-04-10 IR 관련 후속 발언, 다음 실적, HBM 장비 주문·출하·고객 수요·재고 전환 데이터를 확인한다.\",\n    \"공매도 잔고가 숏커버로 줄어드는지, 아니면 고평가와 실적 둔화 우려에 따른 추가 압력으로 남는지 추적한다.\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 5,\n    \"disclosures_count\": 2,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 0\n  }\n}",
  "started_at": "2026-04-15T13:09:52.815360+09:00",
  "finished_at": "2026-04-15T13:21:54.165475+09:00",
  "duration_seconds": 721.35,
  "metrics": {
    "llm_calls": 55,
    "tool_calls": 22,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 55
    }
  },
  "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_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
      }
    ]
  },
  "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"
  }
}