{
  "ticker": "TSM",
  "ticker_name": "Taiwan Semiconductor Manufacturing",
  "status": "success",
  "trade_date": "2026-04-16",
  "analysis_date": "2026-04-17",
  "decision": "{\n  \"rating\": \"OVERWEIGHT\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.72,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"TSM에 대한 중기 배분 관점은 긍정적으로 유지한다. 공격적 분석가가 강조한 58% Q1 이익 성장, 상향된 매출 전망, 강한 3nm 및 인공지능 수요, 높은 수익성, 충분한 현금 창출력은 투자 가능한 상승 논리를 뒷받침한다. 다만 보수적 및 중립 분석가가 지적했듯이 주가는 2026-03-30의 316.50에서 2026-04-15의 375.10까지 급반등한 뒤 380-385 저항대와 384.63 부근의 상단 변동성 구간에 접근해 있고, RSI는 66.01에서 55.44로 식었으며 MACD도 7.39에서 7.11로 낮아졌다. 따라서 오늘 즉시 추격 매수하지 않고 WAIT를 유지한다. 신규 진입은 TSM이 362-365를 종가 기준으로 방어하면서 RSI가 50 위에서 안정되고 거래량이 진정될 때, 또는 380-385 위로 종가 돌파하고 MACD가 재상승하며 거래량이 최근 평균을 웃돌 때만 정당화된다. 조건 충족 시에는 소규모 시작 포지션이 가능하지만, 조건 전에는 관망이 우선이다.\",\n  \"exit_logic\": \"TSM이 353 아래로 종가 마감하면 전술 위험 경고로 보고 일부 위험을 줄인다. 350 아래에서 지속적으로 종가가 형성되면 50일 이동평균 및 VWMA 지지 실패로 판단해 전술 포지션을 크게 축소하거나 종료한다. 380-385에서 반복적으로 실패하면서 RSI가 50 아래로 내려가고 MACD가 약화되면 추가 매수를 보류하고 논리를 재평가한다. 인공지능 가속기, 3nm 주문, 자유현금흐름 전환, 마진 전망 중 하나라도 훼손되면 OVERWEIGHT 등급을 낮출 수 있다.\",\n  \"position_sizing\": \"기존 보유분은 중간 수준으로 유지하되, 신규 자금은 확인 신호 전까지 투입하지 않는다. ATR이 12.58로 높고 주가가 최근 고점과 저항대에 가까우므로 첫 진입은 정상 비중보다 작은 부분 트랜치로 제한한다. 362-365 지지 확인 또는 380-385 돌파 확인 중 하나가 발생하면 소규모 STARTER가 정당화될 수 있으며, 후속 종가와 거래량이 확인될 때만 단계적으로 추가한다. 저항 위에서 거래량과 MACD 확인 없이 비중을 늘리지 않는다.\",\n  \"risk_limits\": \"판단 기준은 장중 흔들림보다 종가 확인에 둔다. 362-365는 첫 전술 지지, 350-353은 핵심 방어 구간으로 설정한다. 353 하회 종가는 위험 축소 검토, 350 하회가 지속되면 강제 감축 기준이다. 각 트랜치의 손실 한도는 350 하회 시 계획된 포트폴리오 손실을 넘지 않도록 사전에 제한한다. 고변동성 국면이므로 385 위 추격 매수는 거래량 증가와 MACD 재상승이 동반될 때만 허용한다.\",\n  \"catalysts\": [\n    \"공격적 및 중립 분석가가 공통으로 지적한 58% Q1 이익 성장은 인공지능 및 첨단 공정 수요가 실적에 반영되고 있음을 보여준다.\",\n    \"상향된 매출 전망과 강한 3nm 수요는 TSM의 중기 성장 논리를 지지한다.\",\n    \"최대 $56 billion로 언급된 설비투자는 단기 자유현금흐름 부담 요인이지만, 중립 분석가의 평가처럼 첨단 공정 경쟁우위와 고객 수요를 반영하는 전략적 투자로도 해석된다.\",\n    \"주가가 10일 EMA 362.55, 50일 SMA 352.82, VWMA 353.01, 200일 SMA 295.56 위에 있어 추세 구조는 아직 훼손되지 않았다.\",\n    \"TSM 실적과 전망이 반도체 전반의 투자심리를 끌어올리고 있어, 시장은 TSM을 인공지능 공급망 핵심 지표로 보고 있다.\"\n  ],\n  \"invalidators\": [\n    \"인공지능 가속기 또는 3nm 주문 증가세가 둔화되거나 고객 재고 조정이 나타나는 경우.\",\n    \"대규모 설비투자가 자유현금흐름 전환, 마진, 투자수익률 기대를 예상보다 크게 압박하는 경우.\",\n    \"스마트폰 및 자동차 수요 약세가 확대되어 인공지능 및 고성능 컴퓨팅 강세를 상쇄하는 경우.\",\n    \"Taiwan 관련 지정학, 무역정책, 공급망 위험이 갑자기 재가격화되어 고멀티플 반도체주 할인율이 높아지는 경우.\",\n    \"TSM이 350-353 지지대를 반복적인 종가 기준으로 잃고 RSI와 MACD가 중립 이하로 약화되는 경우.\",\n    \"강한 실적과 상향 전망에도 주가가 계속 부정적으로 반응해 380-385가 축적이 아니라 분배 구간으로 확인되는 경우.\"\n  ],\n  \"watchlist_triggers\": [\n    \"매수 가능한 조정: TSM이 362-365를 종가 기준으로 방어하고 RSI가 50 위에서 안정되며 거래량이 진정되는 경우.\",\n    \"돌파 진입: TSM이 380-385 위에서 종가 마감하고 MACD가 재상승하며 거래량이 최근 평균을 웃도는 경우.\",\n    \"소규모 시작 포지션 조건: 위 두 조건 중 하나가 충족될 때 정상 비중보다 작은 첫 트랜치를 검토한다.\",\n    \"위험 경고: TSM이 353 아래로 종가 마감하거나 VWMA 및 50일 지지선이 거래량 증가와 함께 무너지는 경우.\",\n    \"모멘텀 경고: 380-385에서 반복 실패하고 RSI가 50 아래로 하락하며 MACD가 약화되는 경우.\",\n    \"심리 경고: 강한 뉴스에도 주가 반응이 계속 부진하거나 인공지능 및 3nm 수요 전망 하향이 나타나는 경우.\",\n    \"기본 점검: 다음 회사 업데이트에서 설비투자, 자유현금흐름 전환, 마진 설명을 확인한다.\"\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-17T20:34:40.249278+09:00",
  "finished_at": "2026-04-17T20:48:47.133505+09:00",
  "duration_seconds": 846.88,
  "metrics": {
    "llm_calls": 59,
    "tool_calls": 21,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 59
    }
  },
  "tool_telemetry": {
    "total_tool_calls": 21,
    "vendor_calls": {
      "yfinance": 18,
      "alpha_vantage": 3
    },
    "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": "yfinance",
        "status": "fallback",
        "fallback": true,
        "note": "yfinance: empty or unusable result"
      },
      {
        "method": "get_company_news",
        "vendor": "alpha_vantage",
        "status": "fallback",
        "fallback": true,
        "note": "alpha_vantage: Alpha Vantage request failed: HTTPSConnectionPool(host='www.alphavantage.co', port=443): Read timed out. (read timeout=15.0)"
      },
      {
        "method": "get_company_news",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_company_news",
        "vendor": "alpha_vantage",
        "status": "fallback",
        "fallback": true,
        "note": "alpha_vantage: Alpha Vantage request failed: HTTPSConnectionPool(host='www.alphavantage.co', port=443): Read timed out. (read timeout=15.0)"
      },
      {
        "method": "get_macro_news",
        "vendor": "alpha_vantage",
        "status": "fallback",
        "fallback": true,
        "note": "alpha_vantage: Alpha Vantage request failed: HTTPSConnectionPool(host='www.alphavantage.co', port=443): Read timed out. (read timeout=15.0)"
      },
      {
        "method": "get_company_news",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_macro_news",
        "vendor": "yfinance",
        "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"
  },
  "intraday_snapshot_attempts": [
    {
      "ticker": "TSM",
      "attempted": true,
      "success": true,
      "checkpoint": "05:05",
      "interval": "5m",
      "attempted_at": "2026-04-17T21:04:18.409122+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-16T15:55:00-04:00"
    },
    {
      "ticker": "TSM",
      "attempted": true,
      "success": true,
      "checkpoint": "selective_rerun",
      "interval": "5m",
      "attempted_at": "2026-04-17T22:26:21.374302+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-16T15:55:00-04:00"
    },
    {
      "ticker": "TSM",
      "attempted": true,
      "success": true,
      "checkpoint": "03:35",
      "interval": "5m",
      "attempted_at": "2026-04-18T04:41:53.225171+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-17T15:40:00-04:00"
    }
  ],
  "latest_intraday_snapshot_attempt": {
    "ticker": "TSM",
    "attempted": true,
    "success": true,
    "checkpoint": "03:35",
    "interval": "5m",
    "attempted_at": "2026-04-18T04:41:53.225171+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T15:40:00-04:00"
  },
  "intraday_snapshot_latest_attempt": {
    "ticker": "TSM",
    "attempted": true,
    "success": true,
    "checkpoint": "03:35",
    "interval": "5m",
    "attempted_at": "2026-04-18T04:41:53.225171+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T15:40:00-04:00"
  }
}