{
  "ticker": "AAPL",
  "ticker_name": "Apple",
  "status": "success",
  "trade_date": "2026-04-14",
  "analysis_date": "2026-04-15",
  "decision": "{\n  \"rating\": \"HOLD\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.64,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"AAPL은 기존 보유분을 유지할 만큼 투자 가능하지만, 오늘 즉시 신규 매수를 실행할 정도로 진입이 확인되지는 않았다. 공격적 분석가는 2026-03-30 저점권 246.63 이후 259~260 부근까지 회복했고 200일선 250.89와 10일 EMA 257.46 위에 있으며 MACD가 -0.16에서 0.08, 0.24로 양수 전환한 점을 근거로 하락 모멘텀 종료를 주장했다. 중립 분석가도 이 회복은 인정했지만, 현재 259.20이 50일 SMA 260.86과 최근 고점 262.19 아래에 있어 공급 구간을 아직 돌파하지 못했다고 지적했다. 따라서 방향성은 우호적으로 유지하되, 신규 자금은 262.20 위 일봉 종가와 거래량 확대가 확인되거나, 254.87 VWMA 또는 251~252 지지권에서 반등 품질이 확인될 때만 소규모로 접근한다.\",\n  \"exit_logic\": \"전술 노출은 260.86~262.19 저항에서 반복 실패한 뒤 10일 EMA 257.46을 잃으면 줄인다. 251 아래 일봉 종가는 200일 SMA 250.89 방어 실패 가능성을 키우므로 전술 포지션은 축소하거나 종료한다. 실적 가이던스에서 iPhone 수요 둔화, 관세나 투입비용에 따른 마진 압박, 서비스 성장 둔화, Apple Pay 또는 broader services 규제 부담이 확인되면 기술적 지지가 유지되더라도 중기 보유 논리를 재검토한다.\",\n  \"position_sizing\": \"기존 핵심 보유분은 유지하되 추가 매수는 보류한다. 262.20 돌파와 거래량 확대가 동시에 나오면 정상 비중보다 작은 starter만 허용하고, 265~266 후속 안착 전에는 비중 확대를 제한한다. 돌파가 아니라 하락 재시험이 나오면 254.87 VWMA 또는 251~252 지지권에서 반등 캔들, 거래량 안정, 10일 EMA 회복 여부를 확인한 뒤 분할 진입을 고려한다. ATR 5.68로 단기 변동성이 작지 않고 후행 PER 32.8, 선행 PER 27.8, PBR 43.15가 안전마진을 제한하므로 초기 사이징은 보수적으로 유지한다.\",\n  \"risk_limits\": \"핵심 전술 위험선은 251이고 구조적 추세 확인선은 200일 SMA 250.89다. 신규 진입은 약 1 ATR 수준의 정상 변동을 허용하되, 251 아래 일봉 종가가 나오면 방어를 우선한다. 260.86~262.19 저항대로 추격 매수하지 않으며, 262.20 위 돌파라도 거래량이 약하거나 MACD 히스토그램 둔화가 이어진 뒤 257.46을 이탈하면 false breakout으로 간주한다. 금리 상승, 달러 강세, 유가와 인플레이션 압력, 관세와 공급망 비용, Apple Pay 규제 뉴스가 악화되면 노출을 재검토한다.\",\n  \"catalysts\": [\n    \"AAPL이 262.20 위에서 일봉 종가를 만들고 거래량이 확대되어 50일 SMA 260.86과 최근 고점 262.19를 동시에 회복하는 경우\",\n    \"265~266으로 후속 안착하고 이후 270 재시험이 진행되며 RSI가 과열권으로 급등하지 않는 경우\",\n    \"Q2 FY26 실적과 가이던스에서 iPhone 수요, 총마진, 관세와 투입비용 영향이 안정적으로 확인되는 경우\",\n    \"후행 12개월 잉여현금흐름 1063억 달러와 순이익 1178억 달러 수준의 현금창출력이 서비스 성장과 자사주 매입으로 이어지는 경우\",\n    \"Globalstar와 Amazon 관련 위성 연결성 변화가 Apple 생태계의 장기 옵션 가치를 키우면서 전략 통제력 훼손 없이 정리되는 경우\"\n  ],\n  \"invalidators\": [\n    \"AAPL이 251 아래로 일봉 종가를 만들고 200일 SMA 250.89 방어에 실패하는 경우\",\n    \"262.20 위 돌파가 약한 거래량으로 실패한 뒤 10일 EMA 257.46을 이탈하는 경우\",\n    \"MACD는 양수권을 유지하더라도 히스토그램 둔화가 이어지며 가격이 260.86~262.19 저항을 넘지 못하는 경우\",\n    \"실적 가이던스가 iPhone 수요 둔화, 관세나 투입비용에 따른 마진 압박, 서비스 성장 둔화를 시사하는 경우\",\n    \"Apple Pay 또는 broader services 규제가 서비스 monetization과 프리미엄 밸류에이션 신뢰를 훼손하는 경우\",\n    \"금리 상승, 달러 강세, 유가와 인플레이션 압력, 프리미엄 소비 둔화가 동시에 악화되는 경우\"\n  ],\n  \"watchlist_triggers\": [\n    \"상승 전환 관찰: 262.20 위 일봉 종가, 거래량 확대, MACD 양수권 유지\",\n    \"추가 확인: 265~266 안착 후 270 접근, RSI 과열 없이 추세 확장\",\n    \"하락 재시험 관찰: 254.87 VWMA 또는 251~252 지지권에서 반등 캔들과 거래량 안정 확인\",\n    \"위험 경보: 257.46 10일 EMA 이탈 후 260.86~262.19 재돌파 실패\",\n    \"방어 실행: 251 아래 일봉 종가 또는 250.89 200일 SMA의 결정적 이탈\",\n    \"이벤트 확인: Q2 FY26 실적, 관세와 투입비용 가이던스, Apple Pay 소송과 서비스 규제, Globalstar와 Amazon 조건 변화\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 3,\n    \"disclosures_count\": 0,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 1\n  }\n}",
  "started_at": "2026-04-15T21:01:33.258157+09:00",
  "finished_at": "2026-04-15T21:14:20.808771+09:00",
  "duration_seconds": 767.55,
  "metrics": {
    "llm_calls": 56,
    "tool_calls": 21,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 56
    }
  },
  "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
      }
    ],
    "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"
  }
}