{
  "ticker": "042700.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.6,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"042700.KS에 대한 방향성은 우호적으로 유지한다. 공격적 분석가가 지적한 것처럼 2026-04-13 종가 276500원은 50일 SMA 257039원을 충분히 웃돌고, 10일 EMA 274739원과 VWMA 271293원 위에 있어 중기 상승 구조가 완전히 훼손된 상태는 아니다. 또한 HBM/TC본더 후공정 장비 사이클, 높은 영업이익률 약 33.3%, 매출총이익률 약 56.1%, 현금 2762억 원 수준과 낮은 차입금은 강세 논리를 뒷받침한다. 다만 보수적·중립적 분석가가 공통으로 지적한 대로 286000원 저항 확인 후 거래량이 2026-04-10의 1087130주에서 2026-04-13의 387276주로 줄었고, 종가도 286000원에서 276500원으로 밀려 즉시 추격 매수의 확률 우위는 부족하다. 따라서 현재는 매수 금지가 아니라 조건부 대기다. 286000원 위 종가 돌파와 거래량 회복이 동시에 확인되면 STARTER가 정당화될 수 있고, 대안으로 271000~274000원 구간 지지 확인 후 강한 반등이 나오면 소규모 진입을 검토한다.\",\n  \"exit_logic\": \"조건 충족 후 진입했다면 274000원대 10일 EMA와 271000원 VWMA를 종가 기준으로 재이탈할 때 단기 진입분을 우선 축소한다. 이는 중립적 분석가의 구분처럼 전술적 후퇴 신호다. 257000원대 50일 SMA 하회가 지속되면 중기 강세 구조 훼손으로 보고 잔여 포지션 정리 또는 투자 가정 재평가로 전환한다. 상방에서는 300000원 부근에서 일부 차익 실현을 검토하고, 321000원대 볼린저 상단 접근 시 추가 차익 실현 또는 추세 유지 여부를 재점검한다.\",\n  \"position_sizing\": \"현 시점 신규 비중은 보류한다. 286000원 위 종가 돌파와 거래량 회복이 확인될 경우에도 ATR 약 19400원, 종가 대비 약 7% 변동성, 베타 2.245를 감안해 평시 단기 트레이딩 비중의 0.33배 이하 STARTER로 제한한다. 300000원 위 안착과 함께 신규 수주, IR 코멘트, 2026년 가이던스, 고객사 투자 확인 중 하나 이상이 동반될 때만 0.50배까지 단계적 증액을 검토한다. 확인 전 레버리지와 평균단가 상승 매수는 금지한다.\",\n  \"risk_limits\": \"핵심 위험은 기대치 리스크다. PER 54배 수준의 프리미엄은 HBM/TC본더 성장 가시성이 유지될 때만 정당화되며, 2025-12-31 매출이 1662억 원 수준에서 830억 원 수준으로 감소하고 영업이익도 678억 원에서 276억 원으로 둔화된 점은 확인이 필요한 부담이다. 단기 리스크 한도는 271000~274000원 이탈 시 즉시 축소로 관리하고, 포지션 전체 손실은 대략 1 ATR 이내에서 제한한다. 257000원대 50일 SMA 하회 지속, 240000원대 볼린저 하단 접근, 거래량 없는 반등 실패, 신규 수주 부재 속 밸류에이션 디레이팅을 주요 방어 기준으로 둔다.\",\n  \"catalysts\": [\n    \"042700.KS가 286000원 위로 종가 돌파하고 거래량이 2026-04-10의 1087130주에 근접하거나 이를 상회하는 경우\",\n    \"300000원 회복 후 안착하며 매물 소화가 확인되는 경우\",\n    \"신규 수주, 고객사 확대, TC본더/HBM 장비 수요 확인 또는 2026년 실적 가이던스 상향\",\n    \"기업설명회에서 수주잔고, 고객 투자 일정, 증설 회수 속도에 대한 구체적 설명이 제시되는 경우\",\n    \"반도체 수출 증가와 SK하이닉스/HBM 투자 사이클 관련 우호적 데이터가 지속되는 경우\"\n  ],\n  \"invalidators\": [\n    \"042700.KS가 271000~274000원 단기 평균선 및 수급 구간을 종가 기준 이탈하고 빠르게 회복하지 못하는 경우\",\n    \"257000원대 50일 SMA 하회가 지속되어 중기 상승 구조가 훼손되는 경우\",\n    \"2025-12-31 매출 둔화가 일시적 매출 인식 문제가 아니라 신규 수주 둔화로 확인되는 경우\",\n    \"PER 54배 수준의 프리미엄을 정당화할 신규 수주, 고객사 투자, 가이던스 개선이 나오지 않는 경우\",\n    \"설비투자 증가가 고마진 매출 증가로 연결되지 않고 고정비 부담으로 전환되는 경우\",\n    \"MACD 양수권 유지 실패와 RSI 55~60 회복 실패가 동반되며 반등 모멘텀이 약화되는 경우\"\n  ],\n  \"watchlist_triggers\": [\n    \"042700.KS 종가 286000원 상향 돌파 여부와 거래량 회복 여부\",\n    \"2026-04-10 거래량 1087130주에 근접하거나 상회하는 매수세 유입 여부\",\n    \"271000~274000원 구간 지지 확인 후 반등 강도\",\n    \"300000원 회복 후 안착 여부\",\n    \"321000원대 볼린저 상단 접근 시 매물 소화 여부\",\n    \"257000원대 50일 SMA 방어 여부\",\n    \"MACD 양수권 유지와 RSI 55~60 회복 여부\",\n    \"OpenDART 신규 수주, IR 후속 자료, 2026년 실적 전망 업데이트 여부\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 3,\n    \"disclosures_count\": 2,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 1\n  }\n}",
  "started_at": "2026-04-14T11:48:24.184844+09:00",
  "finished_at": "2026-04-14T11:56:19.850979+09:00",
  "duration_seconds": 475.67,
  "metrics": {
    "llm_calls": 20,
    "tool_calls": 22,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 20
    }
  },
  "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_balance_sheet",
        "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_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"
  }
}