{
  "ticker": "AAPL",
  "ticker_name": "Apple",
  "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.62,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"AAPL에 대한 방향성은 조건부 강세로 유지한다. 공격적 분석가는 200일 이동평균 250.88 위, 10일 지수이동평균 257.28 위, 거래량가중평균 254.54 위에 가격이 있고 RSI가 35.56에서 51.48로 회복되었으며 MACD가 -3.85에서 0.15로 개선된 점을 근거로 회복 초입을 강조했다. 그러나 보수적·중립적 분석가가 지적했듯이 가격은 아직 50일 이동평균 및 저항선 260.84 아래에 있고, RSI는 55를 넘지 못했으며 MACD 양전환도 약하고 히스토그램은 1.47에서 1.15로 둔화되었다. 따라서 오늘 즉시 매수하지 않고, 260.84 위 종가와 뚜렷한 거래량 증가, RSI 55 부근 이상, MACD 양호한 유지가 확인되거나 257.28 부근 조정 후 강한 반등이 나올 때만 진입을 검토한다. 방향성은 강세지만 진입 조건은 아직 미완성이다.\",\n  \"exit_logic\": \"이미 보유 중이라면 200일 이동평균 250.88 아래 종가가 나오고 MACD가 음전환하며 RSI가 45 아래로 내려갈 때 축소 또는 청산한다. 중기 관점의 더 넓은 무효화 기준은 2026-03-30 저점 부근 246.63 이탈이다. 270-272 저항 구간에 접근했는데 거래량 확인이 약하거나, 실적 및 가이던스에서 iPhone 수요, 서비스 성장, 마진 방어, AI 실행력이 기대에 못 미치면 일부 이익 실현 또는 손절 기준 상향이 필요하다.\",\n  \"position_sizing\": \"오늘 신규 풀사이즈 진입은 하지 않는다. 260.84 위 종가, 거래량 확장, RSI 55 부근 이상이 확인되면 실적 전에는 의도한 AAPL 비중의 20%-25% 수준으로 제한된 스타터만 허용한다. 실적 확인, 260.84 지지 재확인, 또는 270-272 돌파 후 강한 거래량과 가이던스 개선이 동반될 때 25%-33% 범위로 확대를 검토한다. ATR 5.64로 변동성이 여전히 크고 실적·뉴스 민감도가 높으므로 평소보다 작은 크기가 적절하다.\",\n  \"risk_limits\": \"초기 포트폴리오 위험은 실적 전 0.5%-0.75% NAV로 제한하고, 확실한 추세 확인 전에는 1.0%까지 늘리지 않는다. 돌파 진입 시 전술적 위험선은 250.88 아래로 두되 포지션 크기로 손실 한도를 맞춘다. 장기 보유 관점의 최종 무효화선은 246.63이다. 10일 지수이동평균 257.28 아래에서 안정화와 반등 없이 추가 매수하지 않으며, 200일 이동평균이 무너지면 물타기를 금지한다.\",\n  \"catalysts\": [\n    \"AAPL이 260.84 위에서 종가를 형성하고 최근보다 강한 거래량과 RSI 55 부근 이상을 동반하면 회복 시도가 매수 가능한 돌파로 전환될 수 있다.\",\n    \"Fiscal Q2 결과 또는 사전 코멘트에서 iPhone 수요 회복력, 서비스 성장, 마진 방어가 확인되면 높은 밸류에이션 부담을 완화할 수 있다.\",\n    \"기관 투자자 낙관론이 BofA 목표가 상향을 넘어 확산되고 이익 추정치가 상향되면 저항 돌파 가능성이 높아진다.\",\n    \"Nasdaq 100 위험선호, 낮아지는 인플레이션 압력, 금리 인하 기대가 유지되면 대형 고품질 성장주로 자금 유입이 이어질 수 있다.\",\n    \"AI 기능이 기기 교체주기, 서비스 참여도, 생태계 고착도를 높일 수 있다는 구체적 근거가 제시되면 재평가 여지가 생긴다.\",\n    \"Globalstar 관련 전략적 선택지가 시장에서 가치로 인정될 경우 부가 상승 요인이 될 수 있다.\"\n  ],\n  \"invalidators\": [\n    \"250.88 아래 종가와 MACD 음전환, RSI 45 하회가 동시에 나타나면 회복 구조가 훼손된다.\",\n    \"246.63 부근 2026-03-30 저점 이탈은 중기 회복 시나리오의 명확한 실패 신호다.\",\n    \"실적 또는 가이던스에서 iPhone 수요 약화, 서비스 성장 둔화, 마진 압박이 확인되면 프리미엄 밸류에이션이 취약해진다.\",\n    \"반도체 및 메모리 비용 상승이 하드웨어 마진을 실질적으로 압박하면 공격적 강세 논리가 약화된다.\",\n    \"AI 전략이 계속 모호하고 R&D 증가가 수익화 또는 제품주기 개선으로 연결되지 않으면 재평가 동력이 부족하다.\",\n    \"공급망, 노동, 지정학 리스크가 예상보다 큰 실행 비용으로 이어지면 200일 이동평균 지지 신뢰도가 낮아진다.\",\n    \"Nasdaq 100 위험선호가 꺾이고 대형 기술주가 자금 조달 매도로 전환되면 AAPL의 지수 비중이 하방 압력으로 작용할 수 있다.\"\n  ],\n  \"watchlist_triggers\": [\n    \"AAPL이 260.84 위에서 종가를 형성하고 거래량이 증가하며 RSI가 55를 넘으면 entry_action을 STARTER로 상향한다.\",\n    \"AAPL이 257.28 부근으로 조정된 뒤 MACD 양수를 유지하고 강한 반전 캔들과 비분배 거래량이 확인되면 작은 STARTER를 검토한다.\",\n    \"260.84 돌파 실패 후 257.28 아래 종가가 나오면 WAIT를 유지하고 250.88 지지 여부를 재평가한다.\",\n    \"260.84 돌파 후 성공적 재시험이 나오면 실적 전이라도 20%-25% 스타터의 질이 개선된다.\",\n    \"실적 이후 270-272 위 종가와 강한 거래량, iPhone·서비스·마진 가이던스 개선이 동반되면 ADD를 검토한다.\",\n    \"270-272 접근 시 거래량이 약하거나 실적 기대가 과도해 보이면 추가 매수보다 부분 차익 실현 또는 관망을 우선한다.\",\n    \"250.88 아래 종가 또는 부정적 실적 서프라이즈가 나오면 portfolio_stance를 NEUTRAL 또는 BEARISH로 낮추고 신규 롱을 중단한다.\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 2,\n    \"disclosures_count\": 0,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 2\n  }\n}",
  "started_at": "2026-04-15T00:12:53.859994+09:00",
  "finished_at": "2026-04-15T00:29:50.192014+09:00",
  "duration_seconds": 1016.33,
  "metrics": {
    "llm_calls": 61,
    "tool_calls": 21,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 61
    }
  },
  "tool_telemetry": {
    "total_tool_calls": 21,
    "vendor_calls": {
      "yfinance": 15,
      "naver": 3,
      "opendart": 1,
      "ecos": 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_disclosures",
        "vendor": "opendart",
        "status": "fallback",
        "fallback": true,
        "note": "opendart: empty or unusable result"
      },
      {
        "method": "get_macro_news",
        "vendor": "ecos",
        "status": "fallback",
        "fallback": true,
        "note": "ecos: ECOS API key is not configured."
      },
      {
        "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
      }
    ]
  },
  "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"
  }
}