{
  "ticker": "095340.KQ",
  "ticker_name": "ISC",
  "status": "success",
  "trade_date": "2026-04-14",
  "analysis_date": "2026-04-16",
  "decision": "{\n  \"rating\": \"OVERWEIGHT\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.68,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"095340.KS는 중기 관점에서 투자 가능한 우위가 남아 있다. 공격적 분석가와 중립 분석가가 공통적으로 지적했듯 2025년 12월 분기 매출은 723억 원으로 6월 517억 원, 9월 645억 원에서 연속 증가했고, 영업이익은 219억 원, 영업이익률은 약 30.4%로 개선되었다. 현금 및 단기투자자산 3,439억 원 대비 총차입금 212억 원의 순현금 구조와 최근 자유현금흐름 개선도 중기 하방 완충 요인이다. 다만 오늘 신규 매수는 보류한다. 보수적 분석가와 중립 분석가가 강조한 것처럼 가격은 10일 지수이동평균선 약 KRW 239,800 및 거래량가중평균선 약 KRW 248,900-250,000 아래에 있고, RSI는 48.56으로 50을 회복하지 못했으며, MACD는 2026-04-01의 21,104에서 2026-04-14의 10,684로 둔화되고 히스토그램은 -4,868로 악화되었다. 따라서 방향성은 긍정적이지만 즉시 진입은 미완성이다. KRW 239,800 위 종가 회복은 소규모 탐색 진입을 검토할 수 있는 첫 신호이고, KRW 248,900-250,000 위 종가 안착과 거래량 증가, RSI 50 회복, MACD 히스토그램 개선이 함께 나올 때 정상적인 추가 진입을 허용한다.\",\n  \"exit_logic\": \"기존 보유분은 095340.KS가 KRW 213,500 최근 저점을 종가 기준으로 지키고 50일 이동평균선 부근 KRW 203,218을 훼손하지 않는 한 유지한다. KRW 213,500 종가 이탈 후 반등 거래량이 약하면 1차 감축하고, KRW 203,218 부근 50일선의 지속 이탈은 상승 추세 훼손으로 보고 추가 감축 또는 청산한다. 다음 실적에서 매출 증가세 둔화, 영업이익률이 최근 약 30% 수준에서 크게 하락, 자유현금흐름 약화, 매출채권 698억 원 및 재고 250억 원 증가가 현금 회수 문제로 이어지는 신호가 확인되면 투자 논리를 재평가한다.\",\n  \"position_sizing\": \"신규 자금은 지금 전액 진입하지 않는다. ATR이 종가 대비 약 11.2%로 높다는 보수적 분석가의 지적을 반영해 확인 전에는 정상 성장주 비중보다 작게 운용한다. KRW 239,800 위 종가 회복 시에만 소규모 탐색 포지션을 허용하고, KRW 248,900-250,000 회복과 거래량 확장, RSI 및 MACD 개선이 동반될 때 단계적으로 추가한다. 기존 보유자는 축소에서 정상 이하 수준의 비중을 유지할 수 있지만, 거래량가중평균선 아래에서는 추가 매수를 금지한다.\",\n  \"risk_limits\": \"1차 위험선은 KRW 213,500 종가 이탈이다. 2차 추세 위험선은 50일 이동평균선 부근 KRW 203,218이다. KRW 239,800 아래에 머물거나 외국인·기관 수급 혼선, 공매도 과열 부담, 거래량가중평균선 저항이 지속되는 동안 비중을 늘리지 않는다. 단일 종목 위험은 정상 성장주 한도보다 낮게 유지하고, 손절 폭을 좁게 잡기보다 포지션 크기를 줄여 높은 변동성에 대응한다.\",\n  \"catalysts\": [\n    \"095340.KS가 KRW 239,800 위에서 종가를 형성해 단기 지수이동평균선 회복을 확인한다.\",\n    \"095340.KS가 KRW 248,900-250,000 위로 거래량을 동반해 안착하고 RSI 50 회복 및 MACD 히스토그램 개선이 함께 나타난다.\",\n    \"AI 서버, HBM, 첨단 패키징, 반도체 테스트 수요가 실적 기대를 계속 높인다.\",\n    \"미래에셋자산운용 보유 증가와 상장지수펀드 편입 효과가 일회성 수급이 아니라 지속적인 기관 수요로 이어진다.\",\n    \"다음 분기 실적에서 매출 성장, 약 30% 영업이익률, 건전한 자유현금흐름과 현금 전환이 확인된다.\",\n    \"공매도 과열 이후 긍정적 실적 또는 업종 뉴스가 나오며 숏커버가 발생한다.\"\n  ],\n  \"invalidators\": [\n    \"095340.KS가 KRW 213,500 아래에서 종가를 형성하고 빠르게 회복하지 못한다.\",\n    \"KRW 203,218 부근 50일 이동평균선을 지속적으로 이탈해 조정이 추세 훼손으로 바뀐다.\",\n    \"RSI가 50 아래에 머물고 MACD 히스토그램이 계속 악화되는 가운데 반등이 KRW 239,800 아래에서 반복적으로 실패한다.\",\n    \"다음 실적에서 매출 둔화, 영업이익률의 의미 있는 하락, 자유현금흐름 약화, 매출채권 또는 재고 부담 확대가 확인된다.\",\n    \"AI/HBM 반도체 투자심리가 약화되거나 상장지수펀드 및 기관 수급이 지속 매도로 전환된다.\",\n    \"대량거래 이후 가격이 거래량가중평균선 아래에 계속 머물러 분배 물량 부담이 확인된다.\"\n  ],\n  \"watchlist_triggers\": [\n    \"KRW 239,800 위 종가 회복은 소규모 탐색 진입 검토 신호로 본다.\",\n    \"KRW 248,900-250,000 위 종가 안착과 거래량 증가는 고확신 추가 진입 신호로 본다.\",\n    \"변동성 확대 중에도 KRW 213,500을 종가 기준으로 지키는지 확인한다.\",\n    \"거래량가중평균선 위에서 가격이 안정되는지 관찰한다.\",\n    \"공매도 과열 후속 변화와 외국인·기관 순매수 전환 여부를 추적한다.\",\n    \"다음 분기 매출채권, 재고, 영업이익률, 자유현금흐름을 통해 성장의 질을 점검한다.\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 5,\n    \"disclosures_count\": 1,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 0\n  }\n}",
  "started_at": "2026-04-16T03:28:53.886716+09:00",
  "finished_at": "2026-04-16T03:44:12.112175+09:00",
  "duration_seconds": 918.23,
  "metrics": {
    "llm_calls": 59,
    "tool_calls": 22,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 59
    }
  },
  "tool_telemetry": {
    "total_tool_calls": 22,
    "vendor_calls": {
      "yfinance": 15,
      "naver": 3,
      "ecos": 1,
      "opendart": 1,
      "alpha_vantage": 2
    },
    "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": "success",
        "fallback": false,
        "note": null
      },
      {
        "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_cashflow",
        "vendor": "yfinance",
        "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_insider_transactions",
        "vendor": "yfinance",
        "status": "fallback",
        "fallback": true,
        "note": "yfinance: empty or unusable result"
      },
      {
        "method": "get_fundamentals",
        "vendor": "yfinance",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_insider_transactions",
        "vendor": "alpha_vantage",
        "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"
  }
}