{
  "ticker": "ORCL",
  "ticker_name": "Oracle",
  "status": "success",
  "trade_date": "2026-04-16",
  "analysis_date": "2026-04-17",
  "decision": "{\n  \"rating\": \"HOLD\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.62,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"ORCL의 중기 방향성은 건설적이다. 공격적 분석가는 AWS 멀티클라우드 확장, AI 인프라 수요, Bloom Energy 전력 협력, DENSO 채택, 보고된 $553B 백로그, 최근 매출 $17.19B 및 정상화 EBITDA $8.393B 개선, 49.99M·59.78M·42.85M의 고거래량 반등, MACD 2.98 전환을 근거로 초기 재평가 가능성을 강조했다. 그러나 보수적·중립적 분석이 지적한 대로 RSI 70.79, 170.64 볼린저 상단 근접, ATR 8.16, 200일 SMA 214.26과의 큰 괴리, TTM 자유현금흐름 약 -$22.3B, 분기 자유현금흐름 약 -$11.48B, 총부채 약 $153.1B, 순부채 약 $96.2B, 이자비용 약 $1.18B, $38B 데이터센터 금융 리스크 때문에 오늘 신규 진입은 추격 매수로 판단된다. 기존 보유는 유지 가능하지만, 신규 자금은 156.84 10일 EMA 또는 150.54 50일 SMA 부근의 저거래량 지지 확인, 또는 170.64 및 172.56 상향 돌파 후 거래량 유지와 즉시 되돌림 부재가 확인될 때까지 대기한다.\",\n  \"exit_logic\": \"기존 노출은 ORCL이 150 부근을 종가 기준으로 지키고 AI·클라우드 백로그 전환 논리가 훼손되지 않을 때만 유지한다. 150 하회 종가, 150.54 50일 SMA 이탈과 매도 거래량 확대, 170-180 구간 반복 실패와 모멘텀 둔화, 또는 CAPEX·부채·리스·$38B 금융 패키지가 클라우드 매출과 현금흐름 가시성으로 이어지지 않는다는 증거가 나오면 축소 또는 청산한다. 172.56 돌파 후 거래량이 급감하거나 돌파선을 빠르게 반납하면 실패한 돌파로 보고 추가 매수하지 않는다.\",\n  \"position_sizing\": \"기존 포지션은 중간 이하로 유지한다. 신규 진입은 확인 이후에만 정상 비중보다 작은 시작 물량으로 제한한다. ATR 8.16과 베타 약 1.60 수준의 변동성을 감안해 레버리지는 사용하지 않고, 지지 확인 또는 돌파 지속성이 확인된 뒤에만 단계적으로 추가한다. 돌파 진입은 풀백 지지 진입보다 더 작게 시작한다.\",\n  \"risk_limits\": \"150 종가 이탈은 단순 관찰이 아니라 강제 위험 축소 검토 지점이다. 150 하회가 거래량 확대, 자유현금흐름 악화, 신용 스프레드 확대, 부채 조달 우려, CAPEX 상승, $38B 데이터센터 금융 패키지 관련 부정적 뉴스와 동반되면 즉시 비중을 줄인다. 신규 거래의 손실 한도는 최소 1 ATR의 정상 변동성을 허용하되 포트폴리오 위험 한도를 넘지 않게 설정하고, 악재성 하락에서는 물타기를 금지한다.\",\n  \"catalysts\": [\n    \"AWS 멀티클라우드 네트워킹 확장은 Oracle Database와 OCI의 기업 접근성을 높여 백로그 전환 가능성을 강화한다.\",\n    \"보고된 $553B 백로그와 AI 인프라 수요는 중기 클라우드 매출 재평가의 핵심 근거다.\",\n    \"Bloom Energy와의 데이터센터 전력 협력은 인프라 병목 완화 가능성을 제공한다.\",\n    \"최근 분기 매출 $17.19B와 정상화 EBITDA $8.393B 개선은 단순 테마주가 아니라 수익성 있는 핵심 사업 기반이 있음을 보여준다.\",\n    \"고거래량 반등, VWMA 152.21 상회, MACD 2.98 전환은 단기 하락 모멘텀이 끊겼다는 기술적 증거다.\"\n  ],\n  \"invalidators\": [\n    \"ORCL이 150 아래로 종가 마감하고 150.54 50일 SMA를 빠르게 회복하지 못한다.\",\n    \"$553B 백로그가 클라우드 매출 성장, 마진 유지, 자유현금흐름 회복으로 연결되지 않는다.\",\n    \"TTM 자유현금흐름 약 -$22.3B와 분기 자유현금흐름 약 -$11.48B가 개선되지 않는 가운데 부채·리스·이자비용이 더 빠르게 증가한다.\",\n    \"$38B 데이터센터 금융 패키지, 신용 스프레드, 조달 수요가 주가에 부정적 헤드라인으로 작용한다.\",\n    \"AI 인프라 수요 둔화 또는 AWS·Microsoft·Google 등 하이퍼스케일러 경쟁으로 가격과 마진 압박이 커진다.\"\n  ],\n  \"watchlist_triggers\": [\n    \"강세 진입 조건: ORCL이 170.64와 172.56 위에서 종가 마감하고 거래량이 최근 평균 이상으로 유지된다.\",\n    \"선호 진입 조건: ORCL이 156.84 또는 150.54 부근으로 조정된 뒤 낮은 거래량으로 지지되고 RSI가 대략 60 이상을 유지한다.\",\n    \"위험 조건: ORCL이 150 또는 VWMA 152.21 아래로 종가 이탈하고 매도 거래량이 확대된다.\",\n    \"기본 조건: 다음 회사 업데이트에서 CAPEX, 자유현금흐름 회복 시점, 클라우드 성장률, 이자비용에 대한 더 명확한 가이던스가 나온다.\",\n    \"심리 조건: AWS, Bloom Energy, 주요 기업 AI·클라우드 고객 수주 관련 후속 뉴스가 이어지거나 반대로 평판·인력·거버넌스 악재가 확대된다.\"\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-17T01:31:10.157611+09:00",
  "finished_at": "2026-04-17T01:44:55.184292+09:00",
  "duration_seconds": 825.03,
  "metrics": {
    "llm_calls": 59,
    "tool_calls": 18,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 59
    }
  },
  "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_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_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": "ORCL",
      "attempted": true,
      "success": true,
      "checkpoint": "01:35",
      "interval": "5m",
      "attempted_at": "2026-04-17T02:52:26.658456+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-16T13:50:00-04:00"
    },
    {
      "ticker": "ORCL",
      "attempted": true,
      "success": true,
      "checkpoint": "selective_rerun",
      "interval": "5m",
      "attempted_at": "2026-04-17T03:59:50.637162+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-16T14:55:00-04:00"
    },
    {
      "ticker": "ORCL",
      "attempted": true,
      "success": true,
      "checkpoint": "03:35",
      "interval": "5m",
      "attempted_at": "2026-04-17T04:48:14.969829+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-16T15:45:00-04:00"
    }
  ],
  "latest_intraday_snapshot_attempt": {
    "ticker": "ORCL",
    "attempted": true,
    "success": true,
    "checkpoint": "03:35",
    "interval": "5m",
    "attempted_at": "2026-04-17T04:48:14.969829+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-16T15:45:00-04:00"
  },
  "intraday_snapshot_latest_attempt": {
    "ticker": "ORCL",
    "attempted": true,
    "success": true,
    "checkpoint": "03:35",
    "interval": "5m",
    "attempted_at": "2026-04-17T04:48:14.969829+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-16T15:45:00-04:00"
  }
}