{
  "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 멀티클라우드 확장, Mizuho Bank의 Oracle Autonomous AI Database 채택, Bloom Energy 2.8 GW 전력 파트너십, 최근 매출 17.19 billion dollars와 영업이익 5.637 billion dollars, MACD 양전환과 50일선 회복은 AI/OCI 재평가 근거다. 다만 보수적·중립 분석가가 강조한 대로 2026-04-10 종가 138.09에서 2026-04-15 종가 169.81까지 급반등했고, RSI 70.88, 볼린저 상단 170.71 근접, ATR 약 8.16, 200일선 약 214.26 하회가 동시에 존재해 오늘 추격 매수는 부적절하다. 신규 진입은 대기한다. 정당화 가능한 스타터는 두 조건 중 하나가 충족될 때만 가능하다: 153-157 조정 후 50일선 150.54 위에서 고점을 낮추지 않는 매수 재유입이 확인되거나, 171 위 일간 종가와 평균 이상 거래량이 나온 뒤 1거래일 이상 유지되는 경우다.\",\n  \"exit_logic\": \"기존 보유분은 150-153 지지대가 유지되고 OCI 수요, AI 데이터센터 활용, 데이터베이스 채택 뉴스가 매출 전환을 계속 뒷받침하는 동안 보유한다. 50일선 150.54 아래로 종가 이탈한 뒤 빠르게 회복하지 못하면 축소한다. 171 돌파 실패 후 153 아래로 되밀리면 반등 피로 신호로 보고 위험을 줄인다. 실패한 반등 뒤 145를 하향 이탈하거나, 부채 조달형 데이터센터 투자가 OCI 성장, 영업현금흐름 회복, 고객 다변화로 연결되지 않는다는 증거가 나오면 중기 논리를 재검토하고 실질적으로 청산 또는 대폭 축소한다.\",\n  \"position_sizing\": \"오늘 신규 풀사이즈 진입은 하지 않는다. 기존 보유자는 부분 비중만 유지한다. 신규 스타터는 조건 충족 시 정상 비중의 1/4-1/3로 제한한다. 이는 보수적 분석가가 지적한 최근 분기 자유현금흐름 약 -11.484 billion dollars, 추적 자유현금흐름 약 -22.298 billion dollars, 총부채 약 153.117 billion dollars, 순부채 약 96.150 billion dollars, 부채비율 415 초과, ATR 약 8.16을 반영한 것이다. 정상 비중의 1/2 이상은 지지 재확인, 171 돌파 후 유지, 또는 경영진의 설비투자·활용률·자유현금흐름 회복 가시성이 개선된 뒤에만 고려한다.\",\n  \"risk_limits\": \"상단 볼린저 170.71 부근의 과열 종가를 추격하지 않는다. 조정 진입은 150 아래 종가를 1차 손상 기준으로 삼고, 돌파 진입은 160 부근 또는 153 재이탈을 위험 축소 기준으로 삼되 ATR을 감안해 주문 크기를 줄인다. 200일선 214.26 회복 전까지 장기 추세 복구는 미완성으로 본다. 데이터센터 금융 패키지 38 billion dollars의 미소화 대출 배분, 신용스프레드, 조달 비용, AI 인프라 대출 수요, 고객 집중, OCI 성장률, 설비투자 대비 현금흐름 전환을 지속 점검한다.\",\n  \"catalysts\": [\n    \"AWS 멀티클라우드 네트워킹 확장은 OCI 접근성과 기업 워크로드 이전 가능성을 높인다.\",\n    \"Mizuho Bank의 Oracle Autonomous AI Database 채택은 금융권 보안·복원력·거버넌스 수요에서 Oracle 데이터베이스 경쟁력을 확인해 준다.\",\n    \"Bloom Energy 2.8 GW 전력 파트너십은 AI 데이터센터 병목인 전력 확보 측면에서 실행력을 높일 수 있다.\",\n    \"최근 분기 매출 17.19 billion dollars와 영업이익 5.637 billion dollars, 영업이익률 약 32.8%는 성장 논리가 단순한 테마가 아님을 뒷받침한다.\",\n    \"MACD가 -3.81에서 +3.00으로 개선되고 가격이 50일선, 10일 지수이동평균, 거래량가중평균을 회복한 점은 단기 수급 개선을 보여준다.\"\n  ],\n  \"invalidators\": [\n    \"자유현금흐름이 깊은 음수로 남고 OCI 매출 전환 또는 활용률 개선 증거가 나타나지 않는다.\",\n    \"38 billion dollars 데이터센터 금융 패키지가 조달 스트레스, 신용스프레드 확대, 미소화 대출 부담, 투자자 수요 약화를 유발한다.\",\n    \"171 돌파에 실패한 뒤 150-153 지지대를 종가 기준으로 이탈한다.\",\n    \"다음 실적 주기에서 OCI 성장, 고객 다변화, AI 데이터베이스 채택, 운영현금흐름 회복이 기대에 못 미친다.\",\n    \"내부자 매도, 고객 집중, 높은 밸류에이션 우려가 강화되는 가운데 장기 추세가 200일선 214.26 아래에서 계속 훼손된다.\"\n  ],\n  \"watchlist_triggers\": [\n    \"171 위 일간 종가와 최근 평균을 웃도는 거래량이 동반되고, 그 수준이 1거래일 이상 유지된다.\",\n    \"153-157 구간으로 조정된 뒤 50일선 150.54 위에서 고점·저점 구조가 안정되고 매수세가 재유입된다.\",\n    \"10일 지수이동평균 156.88 위 종가가 지속되어 반등 탄력이 유지된다.\",\n    \"경영진이 설비투자, 자유현금흐름 회복 시점, OCI 성장, 데이터센터 활용률에 대해 더 명확한 지침을 제시한다.\",\n    \"38 billion dollars 대출 패키지의 배분, 미소화 물량, 조달 비용, 신용시장 반응에 대한 업데이트가 우호적으로 나온다.\",\n    \"200일선 214.26 방향으로 이동할 때 거래량과 시장 폭이 함께 개선된다.\"\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:06:49.249609+09:00",
  "finished_at": "2026-04-17T20:22:21.392028+09:00",
  "duration_seconds": 932.14,
  "metrics": {
    "llm_calls": 62,
    "tool_calls": 18,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 62
    }
  },
  "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_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
      }
    ],
    "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": "05:05",
      "interval": "5m",
      "attempted_at": "2026-04-17T21:03:55.220805+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-16T15:55:00-04:00"
    },
    {
      "ticker": "ORCL",
      "attempted": true,
      "success": true,
      "checkpoint": "selective_rerun",
      "interval": "5m",
      "attempted_at": "2026-04-17T22:26:06.255807+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-16T15:55:00-04:00"
    },
    {
      "ticker": "ORCL",
      "attempted": true,
      "success": true,
      "checkpoint": "01:35",
      "interval": "5m",
      "attempted_at": "2026-04-18T02:27:00.560122+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-17T13:25:00-04:00"
    }
  ],
  "latest_intraday_snapshot_attempt": {
    "ticker": "ORCL",
    "attempted": true,
    "success": true,
    "checkpoint": "01:35",
    "interval": "5m",
    "attempted_at": "2026-04-18T02:27:00.560122+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T13:25:00-04:00"
  },
  "intraday_snapshot_latest_attempt": {
    "ticker": "ORCL",
    "attempted": true,
    "success": true,
    "checkpoint": "01:35",
    "interval": "5m",
    "attempted_at": "2026-04-18T02:27:00.560122+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T13:25:00-04:00"
  }
}