{
  "ticker": "000660.KS",
  "ticker_name": "SK하이닉스",
  "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.69,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"000660.KS에 대한 방향성은 긍정적이지만, 즉시 신규 매수 근거는 아직 충분하지 않다. 공격적 분석가는 2026-03-31의 807000 부근에서 2026-04-13의 1040000까지 급반등했고 10일 EMA, VWMA, 상승 중인 50일 SMA 위에 있어 추세가 훼손되지 않았다고 봤다. 중립 분석가도 RSI 58.44와 MACD 20062의 플러스 전환은 과열보다 모멘텀 복구에 가깝다고 평가했다. 다만 보수적 분석가가 지적한 것처럼 가격은 1096000-1099000 저항과 Bollinger 상단 1095962 부근에 접근했고, 거래량은 2026-04-08의 6709356주에서 2026-04-13의 2769753주로 줄었다. 따라서 현재는 추격 매수하지 않고, 968000-970000 지지 재확인 또는 1096000-1099000 상향 돌파 후 종가 안착과 거래량 확장을 기다린다. 2026-04-14에 1121500-1128000 부근 장중 고가 보도가 있었더라도, 종가 확인과 강한 거래량 없이 단순 장중 돌파만으로는 매수하지 않는다. 조건이 충족되면 소규모 선발 진입은 정당화될 수 있다.\",\n  \"exit_logic\": \"기존 보유분은 968000-970000 단기 지지대를 종가 기준으로 유지하는 동안만 보유한다. 1096000-1099000 저항대에서 약한 거래량으로 재차 밀리면 일부 축소한다. 927000-929000을 종가 기준으로 이탈하면 VWMA와 상승 중인 50일 SMA 지지 실패로 판단해 청산 또는 의미 있는 감축을 실행한다. Q1 실적, IR 가이던스, HBM 수요, AI 추론용 메모리 수요, DRAM 및 NAND 가격, 마진, capex 규율이 높아진 기대에 못 미치면 차트가 완전히 붕괴되기 전이라도 노출을 재평가한다.\",\n  \"position_sizing\": \"신규 풀 포지션은 금지한다. 968000-970000 지지 확인 또는 1096000-1099000 돌파 후 종가 안착과 거래량 확인이 있을 때 정상 단일 종목 위험의 25%로 선발 진입한다. 지지 재확인이 매우 깨끗하고 MACD가 확장되며 실적 또는 IR 코멘트가 HBM, 가격, 마진, capex 규율을 뒷받침할 때만 50%까지 확대를 검토한다. ATR이 약 63469 KRW로 1040000 기준 약 6.1%이고 beta가 1.751이므로, 한 번의 정상 변동폭이 포트폴리오 손실 한도를 넘지 않도록 크기를 제한한다.\",\n  \"risk_limits\": \"저항대와 헤드라인 신고가만 보고 추격하지 않는다. 돌파 매수는 1099000 상회 종가, 2769753주를 명확히 넘는 거래량, 가능하면 6709356주에 가까운 참여가 있을 때만 고려한다. 지지 매수는 968000-970000을 종가 기준으로 방어하고 매도 거래량이 안정될 때만 허용한다. 927000-929000 종가 이탈은 핵심 위험 무효화 구간이다. 뉴스 파생 심리가 AI 메모리, HBM, DRAM 및 NAND 가격, 외국인 매수, ETF 유입에 과도하게 집중되어 있어 ‘좋지만 기대에는 부족한’ 실적도 급락 촉매가 될 수 있음을 반영한다. US ITC, 수출통제, 중국 관련 규제, ASML/MATCH Act 관련 압력이 가격 흐름의 중심 이슈로 부상하면 위험 한도를 즉시 낮춘다.\",\n  \"catalysts\": [\n    \"000660.KS의 Q1 2026 실적이 기록적 이익 기대를 확인하거나 초과\",\n    \"IR 코멘트가 HBM 수요, AI 추론용 메모리 수요, 가격, 마진, capex 규율을 뒷받침\",\n    \"HBM뿐 아니라 DRAM과 NAND 가격 강세가 지속\",\n    \"외국인 매수와 AI 반도체 ETF 유입이 1100000 KRW 돌파 서사 이후에도 유지\",\n    \"1096000-1099000 저항을 종가 기준으로 돌파하고 거래량이 2769753주를 크게 상회하며 가능하면 6709356주에 근접\"\n  ],\n  \"invalidators\": [\n    \"927000-929000 종가 이탈로 VWMA와 50일 SMA 지지 실패\",\n    \"Q1 실적 또는 가이던스가 높아진 시장 기대에 미달\",\n    \"HBM 또는 차세대 AI 메모리 수요 둔화, 가격 정점, 고객 채택 지연 징후\",\n    \"capex 확대가 향후 공급 과잉이나 마진 압박 신호로 해석되기 시작\",\n    \"US ITC, 수출통제, 중국 관련 반도체 규제가 투자 서사의 중심 위험으로 부상\",\n    \"1096000-1099000 돌파 후 거래량 부진과 함께 저항대 아래로 빠르게 재진입\"\n  ],\n  \"watchlist_triggers\": [\n    \"000660.KS가 968000-970000으로 되돌림을 보인 뒤 종가 기준 방어하고 거래량이 안정\",\n    \"000660.KS가 1096000-1099000 위에서 종가 안착하고 거래량이 2769753주를 명확히 상회하며 가능하면 6709356주에 근접\",\n    \"돌파 후 1096000-1099000을 재시험할 때 지지로 전환되는지 확인\",\n    \"RSI가 과열권으로 접근하는데 가격이 신고가를 만들지 못하면 소진 위험으로 감시\",\n    \"MACD가 지지 재확인 뒤 플러스 영역에서 재확장\",\n    \"Q1 또는 IR 이후 2026 영업이익 추정치가 상향 지속되고 둔화되지 않음\",\n    \"HBM, AI 추론용 메모리, DRAM 및 NAND 가격 관련 뉴스가 실제 실적 기대 상향으로 연결\"\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-14T10:34:09.111576+09:00",
  "finished_at": "2026-04-14T10:47:18.540390+09:00",
  "duration_seconds": 789.43,
  "metrics": {
    "llm_calls": 58,
    "tool_calls": 22,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 58
    }
  },
  "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_company_news",
        "vendor": "naver",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_social_sentiment",
        "vendor": "naver",
        "status": "fallback",
        "fallback": true,
        "note": "naver: empty or unusable result"
      },
      {
        "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": "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"
  }
}