{
  "ticker": "005930.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.67,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"005930.KS의 방향성은 여전히 건설적이다. 2026-04-13 종가 201000은 10일 EMA 196894, VWMA 189832, 50일 SMA 185087, 200일 SMA 114387 위에 있고, 예상 PER 7.24, 현금 및 단기투자 125.85조원, 유동비율 2.328, 영업이익률 21.32%, 자유현금흐름 16.04조원이 중기 회복 논리를 뒷받침한다. 그러나 즉시 진입은 보류한다. 종가가 210500 돌파 trigger 아래에 있고, 2026-04-09 거래량 42320839 이후 2026-04-10 18244459, 2026-04-13 19603415로 거래량이 식었으며, MACD 히스토그램도 1973.95에서 1685.53으로 축소되었다. 따라서 현재 결론은 약세가 아니라 전술적 대기다. 210500 위 종가, 최근 평균을 명확히 웃도는 거래량, RSI 60 상회, MACD 히스토그램 재확대가 동시에 확인되면 부분 진입을 허용한다. 또는 196900-189800 구간 눌림에서 지지가 확인되고 매도 거래량이 안정되며 부정적 실적 뉴스가 없으면 starter가 정당화될 수 있다.\",\n  \"exit_logic\": \"기존 보유분은 005930.KS가 10일 EMA 부근 196900 위를 유지하고, 가능하면 VWMA 부근 189800 위에 머무는 동안만 유지한다. 196900 아래 종가와 RSI 50 하회가 동시에 나오면 4월 반등 실패 신호로 보고 위험을 줄인다. 189800 이탈 시 신규 진입 계획을 중단하고 기존 노출을 더 축소한다. 50일 SMA 부근 185087을 거래량 동반으로 이탈하면 중기 강세 논리를 보류하고 실질적으로 exit 또는 대폭 축소한다. 돌파 진입이 체결된 뒤 218000-223000에 접근하면 거래량과 momentum이 더 확장되지 않는 한 일부 이익 실현 또는 stop 상향을 검토한다.\",\n  \"position_sizing\": \"오늘은 신규 full-size 진입을 하지 않는다. 210500 돌파 조건이 모두 충족되면 의도한 총 노출의 20%-25%만 starter로 시작한다. 210500 위에서 1-2거래일 유지되거나 돌파 후 되돌림이 196900 위에서 지지되면 단계적으로 추가한다. 눌림 진입은 196900-189800 지지 확인 시 15%-20% 탐색 비중으로 제한한다. ATR 10845, 일간 변동성 약 5.4%가 크므로 leverage는 쓰지 않고, 정상적인 1 ATR noise보다 지나치게 촘촘한 stop은 피한다.\",\n  \"risk_limits\": \"189800을 1차 위험 축소선, 185087을 중기 thesis risk line으로 둔다. 196900 이탈과 RSI 50 하회가 동시에 발생하면 단기 rebound 실패로 간주한다. 185087 아래에서는 신선한 earnings, FCF, semiconductor demand 확인 없이 평균단가를 낮추지 않는다. 210500 돌파 매수의 경우 upside가 218000-223000까지 약 3.6%-5.9%인 반면 ATR이 약 10845로 크다는 보수적 지적을 반영해 초기 위험은 작은 portfolio 손실로 제한한다.\",\n  \"catalysts\": [\n    \"AI data center 수요와 memory 가격 회복이 DRAM, NAND, HBM 기대를 높이는 점\",\n    \"2026-04-07 preliminary earnings와 향후 IR 세부 내용이 영업이익률 20%대 지속성을 확인할 가능성\",\n    \"semiconductor export momentum과 March ICT export 개선이 memory cycle 회복 논리를 강화하는 점\",\n    \"KOSPI risk appetite 회복 시 foreign 및 index-driven demand가 005930.KS로 유입될 가능성\",\n    \"210500 위 종가와 거래량 증가가 확인되면 218000-223000 재시험 가능성이 열리는 점\"\n  ],\n  \"invalidators\": [\n    \"196900 아래 종가와 RSI 50 하회가 동시에 발생해 4월 rebound가 실패하는 경우\",\n    \"189800 VWMA와 185087 50일 SMA를 순차적으로 이탈해 pullback이 deeper correction으로 바뀌는 경우\",\n    \"다음 earnings 세부 내용에서 영업이익률이 20% 아래로 약화되거나 profit 증가에도 FCF가 악화되는 경우\",\n    \"HBM 또는 advanced packaging 경쟁력이 SK hynix, TSMC-linked supply chain peers 대비 계속 실망스러운 경우\",\n    \"labor, privacy, strike 관련 이슈가 생산 차질, ESG discount, 평판 리스크로 확대되는 경우\"\n  ],\n  \"watchlist_triggers\": [\n    \"상방 진입 trigger: 005930.KS가 210500 위로 종가 마감하고 거래량이 최근 평균을 명확히 웃돌며 MACD 히스토그램이 재확대되는지 확인\",\n    \"momentum trigger: RSI가 60을 넘고 가격이 10일 EMA 부근 196900 위에 머무는지 확인\",\n    \"눌림 starter trigger: 196900-189800 구간에서 지지, 거래량 안정, 부정적 earnings 또는 semiconductor news 부재가 동시에 확인되는지 확인\",\n    \"위험 축소 trigger: 196900 아래 종가와 RSI 50 하회가 동시에 발생하는지 확인\",\n    \"hard risk trigger: 185087 아래 종가 또는 semiconductor news flow가 recovery에서 estimate cuts로 전환되는지 확인\"\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-14T11:00:43.832915+09:00",
  "finished_at": "2026-04-14T11:12:28.198104+09:00",
  "duration_seconds": 704.37,
  "metrics": {
    "llm_calls": 63,
    "tool_calls": 22,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 63
    }
  },
  "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_cashflow",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_balance_sheet",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_income_statement",
        "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"
  }
}