{
  "ticker": "TSM",
  "ticker_name": "Taiwan Semiconductor Manufacturing",
  "status": "success",
  "trade_date": "2026-04-14",
  "analysis_date": "2026-04-15",
  "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\": \"TSM의 방향성은 우호적이다. 공격적 분석가는 Q1 매출 약 35% 증가, 영업이익률 약 54%, 순이익률 약 45%, 영업현금흐름 725.5 billion TWD, 자유현금흐름 364.0 billion TWD, AI 고급 공정 병목 지위를 근거로 구조적 강세를 강조했다. 중립 분석가도 주가가 10일 EMA 359.85, VWMA 346.26, 50일 SMA 351.59, 200일 SMA 294.13 위에 있고 MACD가 양수라는 점을 확인했다. 다만 보수적 분석가와 중립 분석가가 지적했듯 2026-03-30의 316.50에서 2026-04-13의 369.57까지 빠르게 반등했고, RSI 66.59, MACD 히스토그램 5.20, ATR 12.64로 단기 보상 대비 위험이 압축되어 있다. 따라서 현 가격대 추격 매수는 보류한다. 359.85 위에서 거래량이 식고 MACD가 유지되는 건 관찰 조건이며, 346-352 지지권에서 매도 압력이 흡수되거나 이벤트 리스크 해소 후 369.57 상향 돌파가 확인될 때만 소규모 스타터를 검토한다.\",\n  \"exit_logic\": \"기존 보유분은 TSM이 10일 EMA 부근인 359.85 위를 유지하고 MACD가 양수인 동안 중립보다 높은 비중을 유지할 수 있다. 359.85 아래 종가와 MACD 히스토그램 둔화가 동시에 나오면 일부 축소한다. 346-352 지지권 아래 종가, 특히 346 하향 이탈은 회복 추세 실패로 보고 실질 축소 또는 청산한다. 실적 가이던스, AI 주문 가시성, 고급 공정 가동률, 마진, capex 효율, 자유현금흐름이 기대에 못 미치면 기술적 가격대와 무관하게 즉시 재평가한다.\",\n  \"position_sizing\": \"오늘 신규 풀사이즈 진입은 하지 않는다. 조건이 충족될 경우에도 스타터는 정상 비중의 최대 1/3을 기본으로 하고, 346-352 지지권에서 수요 확인 또는 이벤트 이후 돌파 품질이 매우 높을 때만 1/2까지 허용한다. ATR 12.64 기준 1.5 ATR adverse move는 약 19 USD per ADR이므로, 해당 손실 폭이 정상 단일 종목 위험 예산 이내에 들어오도록 수량을 역산한다. 기존 보유자는 추가 매수보다 위험 예산 보존을 우선한다.\",\n  \"risk_limits\": \"346-352는 핵심 위험 관리 구간이다. 이 구간 아래에서는 신규 매수와 추가 매수를 금지한다. 359.85 회복 실패와 MACD 히스토그램 하락이 함께 나타나면 단기 모멘텀 훼손으로 간주한다. ATR 12.64로 변동성이 높으므로 촘촘한 장중 손절보다 종가와 이벤트 기반 위험 관리를 사용한다. 실적, 가이던스, Taiwan 지정학, 공급망 집중, AI 반도체 수요 둔화, capex 과잉 신호가 나오는 기간에는 스타터 규모도 보수적으로 제한한다.\",\n  \"catalysts\": [\n    \"Q1 매출이 전년 대비 약 35% 증가해 약 1.13 trillion TWD를 기록했다는 점은 AI 수요가 실제 매출로 반영되고 있음을 보여준다.\",\n    \"공격적 분석가가 강조한 Nvidia, ASML, 데이터센터, 고급 공정 수요 연결성은 TSM의 AI 공급망 병목 지위를 강화한다.\",\n    \"주가가 10일 EMA 359.85, VWMA 346.26, 50일 SMA 351.59, 200일 SMA 294.13 위에 있고 MACD가 양수라는 점은 중기 상승 추세가 아직 훼손되지 않았음을 시사한다.\",\n    \"영업이익률 약 54%, 순이익률 약 45%, 강한 영업현금흐름과 개선된 자유현금흐름은 프리미엄 밸류에이션을 일부 뒷받침한다.\",\n    \"기술주 위험 선호와 Nasdaq 강세가 유지되면 반도체 ADR 자금 흐름에 우호적일 수 있다.\"\n  ],\n  \"invalidators\": [\n    \"346-352 지지권 아래 종가는 회복 실패와 중기 기술적 지지 상실로 본다.\",\n    \"실적 가이던스 또는 경영진 코멘트에서 AI 주문 둔화, 고급 공정 가동률 약화, 마진 압박이 확인되는 경우.\",\n    \"큰 capex와 construction-in-progress 증가가 성장 투자가 아니라 과잉설비로 해석되고 자유현금흐름이 악화되는 경우.\",\n    \"Taiwan 지정학 리스크, 생산 차질, 공급망 집중 리스크가 새롭게 확대되어 할인율이 상승하는 경우.\",\n    \"AI 중심의 낙관론이 과도하게 crowded 된 상태에서 PC, smartphone, broader hardware 수요 약화가 드러나는 경우.\"\n  ],\n  \"watchlist_triggers\": [\n    \"조건부 스타터: TSM이 359.85 위에서 며칠간 안정적으로 소화하고 거래량이 과열되지 않으며 RSI가 70을 크게 넘지 않고 MACD가 양수를 유지할 때 정상 비중의 약 1/3 검토.\",\n    \"우선 매수 후보: 346-352 지지권 재시험 후 매도 압력 흡수, 거래량 개선, MACD 양수 유지가 함께 확인될 때.\",\n    \"돌파 후보: 이벤트 리스크 해소 후 369.57 위 고거래량 종가가 나오고, 마진·capex·AI 주문 가시성에 부정적 신호가 없을 때.\",\n    \"주의 신호: 359.85 아래 종가와 MACD 히스토그램 둔화가 동시에 나타나면 스타터 계획을 보류한다.\",\n    \"약세 전환 신호: 346 아래 종가는 VWMA·50일 SMA 지지 붕괴로 보고 신규 진입 관심을 중단한다.\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 4,\n    \"disclosures_count\": 0,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 10\n  }\n}",
  "started_at": "2026-04-15T03:11:38.302867+09:00",
  "finished_at": "2026-04-15T03:24:44.936018+09:00",
  "duration_seconds": 786.63,
  "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": 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_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": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_fundamentals",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      }
    ]
  },
  "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"
  }
}