{
  "ticker": "VRT",
  "ticker_name": "Vertiv",
  "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.73,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"VRT에 대한 방향성 판단은 강세다. 공격적 분석가는 가격이 10일 EMA 282.73, 50일 SMA 250.08, 200일 SMA 179.72 위에 있고 세 평균선이 상승 중이며, MACD가 4.14에서 12.73으로 확대되고 히스토그램이 -0.19에서 4.12로 전환된 점을 근거로 모멘텀 재가속을 강조했다. 또한 2025-12-31 분기 매출 28.8억 달러, 영업이익 6.069억 달러, 순이익 4.456억 달러, 자유현금흐름 8.839억 달러, 순부채 감소가 성장과 현금창출을 뒷받침한다. 다만 보수적 및 중립 분석가가 지적한 대로 종가 299.96은 10일 EMA보다 약 17포인트, 50일 SMA보다 약 50포인트 높고, RSI 70.41, ATR 13.92, 베타 2.05가 동시에 존재해 현재 가격에서 추격 매수의 손실 경로가 빠르다. 따라서 즉시 진입은 보류한다. 진입은 조건부로만 허용한다. 첫째, $282-$286 조정 구간에서 10일 EMA 부근 지지, 거래량 둔화 또는 안정화, 양호한 MACD 히스토그램이 확인되면 부분 진입을 검토한다. 둘째, $312.46 위 종가 돌파와 평균 이상 거래량, 이후 $300-$312 구간 유지가 확인되면 돌파형 부분 진입을 검토한다. 즉, 방향성은 강세이나 오늘의 실행 신호는 아직 완성되지 않았다.\",\n  \"exit_logic\": \"조건부 진입 이후에는 $282 종가 이탈을 단기 방어 신호로 보고 신규 진입분 축소 또는 철회를 우선한다. $268 VWMA를 지속적으로 이탈하면 보수적 분석가의 지적처럼 평균회귀와 수급 악화 위험이 커지므로 포지션을 대폭 줄이거나 종료한다. $250 부근 50일 SMA 종가 이탈은 중기 강세 논리 훼손으로 간주한다. 실적, 백로그, book-to-bill, 마진, 자유현금흐름이 기대에 못 미치거나 BMarko 통합 비용과 Ohio 확장 부담이 마진을 압박하는 증거가 나오면 가격 기준과 별도로 thesis를 재검토한다.\",\n  \"position_sizing\": \"현재 $300 부근에서는 신규 풀사이즈 진입을 하지 않는다. 조건이 충족될 경우 첫 진입은 의도 포지션의 25%-30%가 적절하다. 중립 분석가의 균형안처럼 40%는 $312.46 돌파 후 거래량, 시장 환경, 재테스트가 모두 우호적일 때만 허용한다. 보수적 분석가가 제시한 15%-25%는 변동성 방어에는 유효하지만, VRT의 강한 추세와 현금흐름 개선을 충분히 반영하기에는 다소 작다. 추가 매수는 지지 재확인, 돌파 후 재테스트 성공, 또는 다음 실적에서 백로그·마진·자유현금흐름 품질이 확인된 뒤에만 단계적으로 진행한다.\",\n  \"risk_limits\": \"단일 종목 포트폴리오 위험은 사전에 정한 낮은 한도로 제한한다. ATR 13.92와 베타 2.05를 감안해 손절 폭은 정상 변동성을 허용하되 추세 실패는 방치하지 않는다. 단기 거래는 진입가에서 약 1 ATR 하방 또는 $282 종가 이탈을 1차 방어선으로 사용하고, 스윙 거래는 $268 VWMA 지속 이탈을 강한 감축 기준으로 삼는다. 실적 발표, 대형 수주 발표, 인수 관련 업데이트 전에는 손실 한도 없이 추가하지 않는다. Nasdaq 100 상승세나 금리 인하 기대가 반전되어 고성장 AI 인프라 종목 전반의 위험선호가 약화되면 즉시 노출을 재평가한다.\",\n  \"catalysts\": [\n    \"AI 데이터센터 전력·냉각 수요가 추가 수주와 백로그 증가로 확인되는 경우\",\n    \"BMarko 인수와 Ohio 확장이 생산능력 확대 및 매출 전환 속도 개선으로 이어지는 경우\",\n    \"2025-12-31 분기의 강한 매출, 영업이익, 순이익, 자유현금흐름 흐름이 다음 실적에서도 유지되는 경우\",\n    \"Citi 목표가 $340 상향 같은 추가 분석가 목표가 상향 또는 기관 누적 매수 신호가 이어지는 경우\",\n    \"$312.46 위 종가 돌파, 평균 이상 거래량, 이후 $300-$312 구간 유지가 동시에 확인되는 경우\",\n    \"Nasdaq 100 강세, 성장주 위험선호, 금리 인하 기대가 유지되는 경우\"\n  ],\n  \"invalidators\": [\n    \"백로그 성장 또는 book-to-bill 코멘트가 기대에 미치지 못하는 경우\",\n    \"높은 Forward PE 38.1과 TTM PER 90.18을 정당화할 EPS 성장 경로가 약해지는 경우\",\n    \"BMarko 통합 비용, Ohio 확장 비용, 부품 인플레이션, 가격 압박으로 gross margin 또는 operating margin이 압축되는 경우\",\n    \"영업권 및 무형자산 증가가 실제 수익성 기여보다 손상 또는 통합 리스크로 부각되는 경우\",\n    \"내부자 매도 이후 추가적인 고위 임원 매도 또는 수급 약화 신호가 이어지는 경우\",\n    \"AI 데이터센터 capex 서사가 약화되거나 주요 고객의 프로젝트 지연이 확인되는 경우\",\n    \"$268 VWMA 지속 이탈 또는 $250 부근 50일 SMA 종가 이탈이 발생하는 경우\"\n  ],\n  \"watchlist_triggers\": [\n    \"매수 가능한 조정: $282-$286에서 10일 EMA 부근 지지, 거래량 안정화, MACD 히스토그램 양호 유지\",\n    \"돌파 조건: $312.46 위 종가 돌파와 평균 이상 거래량, 다음 세션에서 $300-$312 구간 유지\",\n    \"경고 조건: $282 종가 이탈 또는 RSI 70.41 부근에서 하락 전환하며 거래량 증가\",\n    \"리스크오프 조건: Nasdaq/growth selloff 중 VRT가 1 ATR 이상 상대적으로 부진한 흐름\",\n    \"펀더멘털 조건: 다음 실적에서 매출 성장, 마진 내구성, 자유현금흐름 품질, 백로그 강도가 재확인\",\n    \"중기 훼손 조건: $268 VWMA 지속 이탈 또는 $250 부근 50일 SMA 이탈\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 3,\n    \"disclosures_count\": 0,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 2\n  }\n}",
  "started_at": "2026-04-15T03:24:44.943987+09:00",
  "finished_at": "2026-04-15T03:37:13.241248+09:00",
  "duration_seconds": 748.3,
  "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_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": "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_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": "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"
  }
}