{
  "ticker": "TSM",
  "ticker_name": "Taiwan Semiconductor Manufacturing",
  "status": "success",
  "trade_date": "2026-04-14",
  "analysis_date": "2026-04-15",
  "decision": "{\n  \"rating\": \"OVERWEIGHT\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.7,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"TSM에 대한 중기 배분 관점은 여전히 긍정적이다. 공격적 분석가가 지적한 것처럼 가격은 10일 EMA 359.54, 50일 SMA 351.56, 200일 SMA 294.12를 모두 상회하고, MACD가 -6.38에서 6.44로 반전했으며, 2026-03-30 저점 316.50에서 369달러대까지 약 16.8% 회복했다. 4월 8일 거래량 16,356,900주 급증도 실제 매수 수요를 뒷받침한다. 다만 보수적·중립 분석가가 공통으로 강조한 대로 현재 가격은 볼린저 상단 378.90과 384.67-386.64 이전 고점권에 가까워 즉시 추격 매수의 보상 대비 위험이 낮다. 따라서 방향성은 BULLISH, 기존 또는 부분 노출은 유지 가능한 OVERWEIGHT이나, 오늘의 신규 진입은 WAIT가 적절하다. 진입은 359.54-351.56 지지 구간에서 매도 압력이 소화되고 회복이 확인되거나, 378.90 위 종가 돌파가 거래량 재확대와 함께 확인될 때만 정당화된다.\",\n  \"exit_logic\": \"TSM이 359.54 아래로 종가 이탈하고 다음 세션에서도 회복력이 약하면 단기 모멘텀 훼손으로 보고 일부 축소한다. 351.56 아래에서 2거래일 이상 머물면 중기 추세 회복 시나리오가 약해졌으므로 OVERWEIGHT 노출을 줄인다. 378.90 돌파 후 384.67-386.64 구간에서 거래량이 줄고 가격이 되밀리면 실패한 돌파로 간주해 추가 매수는 중단하고 일부 이익을 보호한다. 실적이나 가이던스가 AI/HPC 수요, 선단 공정 가동률, 매출총이익률, capex 효율에 대해 높아진 기대를 충족하지 못하면 투자 논리를 재검토한다.\",\n  \"position_sizing\": \"확인 전에는 완전한 비중 확대가 아니라 부분 OVERWEIGHT만 유지한다. 신규 자금은 평소보다 작은 tranche로 시작하고, 359.54-351.56 지지 확인 또는 378.90 위 거래량 동반 종가 돌파가 나온 뒤 단계적으로 늘린다. ATR 12.64로 변동성이 높기 때문에 같은 손실 한도를 유지하려면 주식 수를 줄여야 한다. 돌파 매수는 풀 사이즈가 아니라 검증용 첫 추가로 제한하고, 지지선 부근에서 안정화가 확인될 때 더 선호한다.\",\n  \"risk_limits\": \"단기 거래 위험선은 359.54 종가 이탈, 중기 배분 위험선은 351.56 아래 2거래일 체류로 설정한다. 378.90-386.64 저항 구간에서는 거래량 확인 없이 추가하지 않는다. RSI 66.01은 아직 70 이상 과열은 아니지만 저항대 접근과 결합하면 추격 위험이 커진다. 유가 상승, 달러 강세, 금리 인하 기대 약화, 대만 지정학 헤드라인, 반도체 업종 디리스킹이 심화되면 허용 비중을 낮춘다. 손절은 너무 좁게 두지 않되, 총 포트폴리오 손실 한도는 ATR 상승을 반영해 엄격히 관리한다.\",\n  \"catalysts\": [\n    \"1분기 매출이 전년 대비 약 35% 증가해 약 USD 35.6B 수준으로 보고되었다는 점은 AI 수요가 실제 매출로 연결되고 있음을 뒷받침한다.\",\n    \"TTM 이익률 45.1%, 영업이익률 53.9%, ROE 35.1%는 공격적 분석가가 강조한 고마진·고품질 성장 논리를 지지한다.\",\n    \"가격이 10일 EMA 359.54, 50일 SMA 351.56, 200일 SMA 294.12 위에 있고 MACD가 -6.38에서 6.44로 반전한 점은 추세 회복을 뒷받침한다.\",\n    \"4월 8일 거래량 16,356,900주와 365.90까지의 강한 상승은 단순한 얇은 반등보다 강한 수급 유입 가능성을 보여준다.\",\n    \"378.90 위 거래량 동반 종가 돌파가 나오면 384.67-386.64 이전 고점권 재시험과 추가 모멘텀 확장 가능성이 열린다.\"\n  ],\n  \"invalidators\": [\n    \"실적과 가이던스가 절대적으로는 양호해도 높아진 AI/HPC 기대, 마진 방어, capex 효율 기대를 넘지 못하는 경우.\",\n    \"TSM이 351.56 아래에서 2거래일 이상 머물며 50일 SMA 회복에 실패하는 경우.\",\n    \"4월 8일 이후 거래량이 9백만 주대로 줄어든 흐름이 이어지고, 378.90 돌파 시도에서 거래량 재확대가 나타나지 않는 경우.\",\n    \"매출총이익률이 capex, 감가상각, 가격 압박, 가동률 문제로 예상보다 크게 훼손되는 경우.\",\n    \"대만 지정학 리스크, 공급망 차질, 반도체 업종 디리스킹, 유가·달러·금리 압박이 동시에 심화되는 경우.\",\n    \"Intel, 미국 내 파운드리 확대, 고객 다변화 압력이 TSM의 장기 가격 결정력과 밸류에이션 프리미엄을 빠르게 낮춘다는 증거가 확인되는 경우.\"\n  ],\n  \"watchlist_triggers\": [\n    \"TSM이 378.90 위에서 종가를 형성하고 최근 9백만 주대 거래량을 넘어서는 명확한 거래량 확대가 동반되는지 확인한다.\",\n    \"TSM이 384.67-386.64 구간을 시험할 때 거래량이 유지되고 종가가 무너지지 않는지 확인한다.\",\n    \"TSM이 359.54 부근으로 눌릴 때 장중 회복과 매도 압력 소화가 나타나면 starter 또는 소규모 추가를 검토한다.\",\n    \"TSM이 351.56을 시험하더라도 부정적 회사 뉴스 없이 빠르게 안정화되면 중기 지지 확인으로 본다.\",\n    \"RSI가 70을 넘고 가격이 384.67-386.64 부근에서 정체하면 추격 매수 대신 일부 이익 보호와 비중 점검을 우선한다.\",\n    \"실적 가이던스에서 AI/HPC 수요, 선단 공정 가동률, 마진 회복력, capex 효율이 확인되면 WAIT에서 STARTER 또는 ADD로 전환할 수 있다.\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 4,\n    \"disclosures_count\": 0,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 1\n  }\n}",
  "started_at": "2026-04-15T22:10:40.736049+09:00",
  "finished_at": "2026-04-15T22:22:56.954664+09:00",
  "duration_seconds": 736.22,
  "metrics": {
    "llm_calls": 53,
    "tool_calls": 21,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 53
    }
  },
  "tool_telemetry": {
    "total_tool_calls": 21,
    "vendor_calls": {
      "yfinance": 15,
      "naver": 3,
      "ecos": 1,
      "opendart": 1,
      "alpha_vantage": 1
    },
    "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": "fallback",
        "fallback": true,
        "note": "opendart: empty or unusable result"
      },
      {
        "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_cashflow",
        "vendor": "yfinance",
        "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_insider_transactions",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_fundamentals",
        "vendor": "yfinance",
        "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"
  }
}