{
  "ticker": "NET",
  "ticker_name": "Cloudflare",
  "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.62,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"NET의 중기 투자 의견은 OVERWEIGHT로 유지한다. 공격적 분석가는 33.6% 매출 성장, 73.6% 매출총이익률, $190.4 million 영업현금흐름, $99.4 million 잉여현금흐름, OpenAI·Wiz·AI 보안·에이전트 인프라 서사가 재평가를 만들 수 있다고 봤고, 이는 투자 가능한 강세 논리다. 다만 보수적·중립 분석가가 지적했듯 현재 가격은 VWMA $192.70, 10일 EMA $193.83, 50일 SMA $194.37, 200일 SMA $202.01 아래에 있고 MACD도 아직 음수이며 RSI 49.58은 확정적 강세가 아니다. 따라서 오늘 즉시 신규 진입은 보류하되, $192.70-$194.37 구간을 거래량 동반 종가로 회복하면 축소된 초기 진입을 검토한다. $202.01 회복과 지지 확인은 더 높은 확신의 추가 조건이다.\",\n  \"exit_logic\": \"신규 전술 포지션은 NET이 $192.70-$194.37 저항에서 실패한 뒤 $184.02 아래로 내려가면 축소하거나 보류한다. $166.99를 결정적으로 이탈하면 4월 반등 구조가 실패한 것으로 보고 전술 노출을 종료한다. 다음 실적에서 30%+ 성장 둔화, 잉여현금흐름 질 악화, 영업손실 개선 지연, SBC 부담 확대, AI·보안·에이전트 인프라 서사가 매출 기여로 확인되지 않는 경우 중기 OVERWEIGHT도 재검토한다.\",\n  \"position_sizing\": \"확인 전 신규 자금 투입은 하지 않는다. $194.37 위에서 거래량을 동반한 종가 확인이 나오면 ATR 13.84와 beta 1.875를 감안해 일반 성장주 비중의 약 1/3에서 1/2만 초기 배정한다. 거래량이 평균 수준이거나 소프트웨어 업종 흐름이 약하면 1/3에 가깝게 제한하고, 거래량이 명확히 강하며 RSI가 55 위로 올라서고 MACD 히스토그램이 개선되면 1/2까지 허용한다. 의미 있는 추가는 $202.01 회복 후 지지 확인 또는 실적에서 성장·마진·SBC 관리가 검증된 뒤에만 한다. 기존 보유자는 핵심 비중은 유지할 수 있으나 저항 아래에서 공격적 추가는 피한다.\",\n  \"risk_limits\": \"$184.02를 근접 위험선, $166.99를 주요 스윙 무효화선으로 둔다. ATR 13.84가 높으므로 손절선을 지나치게 촘촘히 두기보다 포지션 크기를 줄여 1 ATR 역방향 움직임이 통상 포트폴리오 손실 한도를 넘지 않게 한다. forward P/E 136.9, P/B 47.6, PEG 2.38, 반복된 내부자 매도, SBC $123.6 million, 주식 수 증가, 부채 민감도, 고베타 소프트웨어 조정 위험을 상시 반영한다.\",\n  \"catalysts\": [\n    \"NET이 $192.70-$194.37 위에서 거래량을 동반해 종가를 형성하며 VWMA, 10일 EMA, 50일 SMA 구간을 회복\",\n    \"$202.01 부근 200일 SMA를 지속적으로 회복하고 이후 지지 재확인\",\n    \"OpenAI, Wiz, AI 보안, 에이전트 인프라 협력이 고객 증가나 매출 기여로 확인\",\n    \"다음 실적에서 30%+ 매출 성장, 잉여현금흐름 지속성, 영업손실 축소, 건설적 가이던스 확인\",\n    \"Baird $260, TD Cowen $265 목표가처럼 프리미엄 밸류에이션을 지지하는 추가 분석가 상향 또는 고품질 클라우드 보안주로의 업종 순환\"\n  ],\n  \"invalidators\": [\n    \"$192.70-$194.37 회복 실패 후 $184.02 아래로 이탈\",\n    \"$166.99 결정적 하향 이탈로 4월 반등이 실패한 과매도 반등으로 확인\",\n    \"실적 실망, 가이던스 약화, AI·에이전트 협력이 측정 가능한 성장으로 이어지지 않는 증거\",\n    \"SBC 또는 희석이 매출 및 잉여현금흐름 개선보다 빠르게 증가\",\n    \"금리·인플레이션·지정학 위험 또는 고베타 소프트웨어 전반 매도로 인한 밸류에이션 압축\"\n  ],\n  \"watchlist_triggers\": [\n    \"$194.37 위 일간 종가와 최근 평균을 웃도는 거래량\",\n    \"$202.01 위 일간 종가와 이후 지지 재확인\",\n    \"RSI가 55 위를 유지하고 MACD 히스토그램이 양의 전환 쪽으로 개선\",\n    \"$184.02 위에서 눌림이 지지되고 거래량 구조가 개선\",\n    \"다음 실적의 매출 성장률, 순매출유지율 또는 대형 고객 성장, 잉여현금흐름률, 매출 대비 SBC, 영업이익률, 부채 만기 관련 발언\"\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-17T19:41:10.787769+09:00",
  "finished_at": "2026-04-17T19:55:10.895304+09:00",
  "duration_seconds": 840.11,
  "metrics": {
    "llm_calls": 58,
    "tool_calls": 18,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 58
    }
  },
  "tool_telemetry": {
    "total_tool_calls": 18,
    "vendor_calls": {
      "yfinance": 15,
      "alpha_vantage": 3
    },
    "fallback_count": 1,
    "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": "alpha_vantage",
        "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": "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
      }
    ],
    "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": "NET",
      "attempted": true,
      "success": true,
      "checkpoint": "05:05",
      "interval": "5m",
      "attempted_at": "2026-04-17T21:03:35.533460+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-16T15:55:00-04:00"
    },
    {
      "ticker": "NET",
      "attempted": true,
      "success": true,
      "checkpoint": "selective_rerun",
      "interval": "5m",
      "attempted_at": "2026-04-17T22:25:51.369778+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-16T15:55:00-04:00"
    },
    {
      "ticker": "NET",
      "attempted": true,
      "success": true,
      "checkpoint": "05:05",
      "interval": "5m",
      "attempted_at": "2026-04-18T06:01:10.609330+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-17T15:55:00-04:00"
    }
  ],
  "latest_intraday_snapshot_attempt": {
    "ticker": "NET",
    "attempted": true,
    "success": true,
    "checkpoint": "05:05",
    "interval": "5m",
    "attempted_at": "2026-04-18T06:01:10.609330+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T15:55:00-04:00"
  },
  "intraday_snapshot_latest_attempt": {
    "ticker": "NET",
    "attempted": true,
    "success": true,
    "checkpoint": "05:05",
    "interval": "5m",
    "attempted_at": "2026-04-18T06:01:10.609330+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T15:55:00-04:00"
  }
}