{
  "ticker": "058470.KQ",
  "ticker_name": "리노공업",
  "status": "success",
  "trade_date": "2026-04-17",
  "analysis_date": "2026-04-17",
  "decision": "{\n  \"rating\": \"OVERWEIGHT\",\n  \"portfolio_stance\": \"BULLISH\",\n  \"entry_action\": \"WAIT\",\n  \"setup_quality\": \"DEVELOPING\",\n  \"confidence\": 0.66,\n  \"time_horizon\": \"medium\",\n  \"entry_logic\": \"058470.KQ에 대한 중기 배분 관점은 긍정적으로 유지한다. 공격적 분석가와 중립적 분석가가 지적했듯이 2026-04-16 종가 115000은 10일 지수이동평균 111542, 50일 단순이동평균 106468, 200일 단순이동평균 66931을 모두 웃돌고, MACD가 2026-04-02 -389에서 2026-04-16 2326.95로 개선되며 히스토그램도 양수 전환했다. 또한 영업이익률 32.9%, 순이익률 29.2%, ROE 18.6%, 현금 및 단기투자자산 4552억 원, 총차입금 1억 원 수준의 사실상 무차입 구조는 품질 프리미엄을 뒷받침한다. 다만 보수적 분석가의 지적처럼 예상 PER 37, 2025-06 매출 1125억 원에서 2025-12 848억 원으로의 둔화, 외국인·기관 매도, 원/달러 1481.4원 부근, 2026-04-17 장중 데이터 부재, 116800-117300 저항권 부근 거래량 감소는 즉시 추격 매수를 정당화하지 못한다. 따라서 방향성은 BULLISH, 기존 보유는 유지 우위이나, 오늘 신규 진입 또는 증액은 WAIT로 제한한다. 신규 자금은 117300 위 일봉 종가 안착과 거래량 800000-1000000주 회복, RSI 60 상향, MACD 히스토그램 확대, 외국인·기관 수급 개선 중 복수 조건이 확인될 때만 starter 성격으로 검토한다. 대안적으로 111500-112000 지지 후 115000 위로 재회복하는 통제된 눌림 반등도 진입 후보가 될 수 있다.\",\n  \"exit_logic\": \"기존 노출은 058470.KQ가 111000-112000 전술 지지대를 유지하는 동안 보유한다. 111000 아래 일봉 종가는 단기 반등 실패로 보고 신규 위험을 중단하며 일부 축소 또는 손절을 실행한다. 106500 부근 50일 단순이동평균 이탈은 중기 추세 훼손으로 판단해 방어적 감축 또는 이탈을 우선한다. 121400-127000 저항권에 접근하면 추격 매수보다 손절 기준 상향과 부분 차익 실현을 우선한다. 116800-117300에서 거래량 없이 반복적으로 막히면 기존 보유도 일부 축소를 검토한다.\",\n  \"position_sizing\": \"확인 전에는 정상 비중보다 낮게 유지한다. ATR이 약 6516 KRW로 2026-04-16 종가 115000 대비 약 5.7%인 만큼, 작은 가격 흔들림도 손익에 크게 반영될 수 있다. 신규 자금은 지금 투입하지 않고, 조건 충족 후에도 starter 배분만 허용한다. starter는 1 ATR adverse move가 포트폴리오 허용 손실 안에 들어오도록 역산해 정하며, 117300 저항 돌파가 거래량 없이 나타나거나 RSI가 60을 회복하지 못하면 증액하지 않는다. 기존 보유자는 111000과 106500 기준을 전제로 통제된 규모만 유지한다.\",\n  \"risk_limits\": \"1차 전술 리스크 한도는 111000 아래 일봉 종가다. 2차 중기 리스크 한도는 106500 부근 50일 단순이동평균 하향 이탈이다. 116800-117300 저항 테스트에서 거래량이 800000주 미만에 머물거나, RSI가 60을 회복하지 못하거나, 외국인·기관 순매도가 이어지거나, 미국 반도체주 차익실현과 원/달러 1481.4원 부근의 위험회피가 지속되면 신규 추가는 금지한다. 예상 PER 37은 실적 재가속이 확인되지 않을 경우 멀티플 압축 위험이 크므로, 2025-06에서 2025-12로 이어진 매출 둔화가 더 진행되면 배분 의견을 낮춘다.\",\n  \"catalysts\": [\n    \"058470.KQ가 117300 위에서 일봉 종가로 안착하고 거래량이 800000-1000000주로 회복\",\n    \"RSI가 60을 상향 돌파하고 가격이 115000 위를 유지\",\n    \"MACD 히스토그램이 양수 구간에서 추가 확대\",\n    \"외국인과 기관 수급이 순매도에서 순매수 또는 누적 매수로 전환\",\n    \"미국 반도체주 차익실현 압력이 완화되고 업종 심리가 안정\",\n    \"다음 실적 또는 가이던스에서 2025-06부터 2025-12까지의 매출 둔화 이후 재가속 확인\",\n    \"건설중인자산과 설비투자가 수요 증가 또는 가동률 개선으로 연결된다는 증거\"\n  ],\n  \"invalidators\": [\n    \"058470.KQ 일봉 종가가 111000 아래로 하락해 단기 반등 실패 확인\",\n    \"106500 부근 50일 단순이동평균 아래 종가로 중기 추세 훼손\",\n    \"116800-117300 저항권에서 거래량 감소와 함께 반복적으로 거절\",\n    \"RSI가 60을 회복하지 못하고 MACD 히스토그램이 재차 약화\",\n    \"외국인·기관 동반 매도가 지속되고 KOSDAQ 위험회피가 확대\",\n    \"매출 또는 영업이익 둔화가 이어지며 회복 가이던스가 부재\",\n    \"건설중인자산 증가가 성장 투자가 아니라 감가상각 부담, 가동률 저하, 투자 회수 지연으로 해석될 증거\",\n    \"회사 고유의 부정 공시, 주문 약화, 고객 수요 악화, 경쟁력 훼손 신호\"\n  ],\n  \"watchlist_triggers\": [\n    \"주문 전 058470.KQ 현재가가 115000 및 117300 대비 어디에 있는지 확인\",\n    \"117300 위 일봉 종가와 거래량 800000주 이상 동반 여부\",\n    \"111500-112000 눌림 구간에서 지지와 반등이 나타나는지 확인\",\n    \"111000 전술 지지선 이탈 여부\",\n    \"106500 부근 50일 단순이동평균 유지 여부\",\n    \"MACD 히스토그램이 양수 구간에서 확대되는지 확인\",\n    \"RSI가 60 위로 올라선 뒤 유지되는지 확인\",\n    \"외국인·기관의 058470.KQ 및 KOSDAQ 순매수 전환 여부\",\n    \"원/달러가 1481.4원 부근에서 안정되는지 확인\",\n    \"미국 반도체 지수와 주요 반도체주의 차익실현 이후 반응\"\n  ],\n  \"data_coverage\": {\n    \"company_news_count\": 5,\n    \"disclosures_count\": 0,\n    \"social_source\": \"news_derived\",\n    \"macro_items_count\": 4\n  }\n}",
  "started_at": "2026-04-17T09:50:28.055845+09:00",
  "finished_at": "2026-04-17T10:03:13.710096+09:00",
  "duration_seconds": 765.65,
  "metrics": {
    "llm_calls": 67,
    "tool_calls": 22,
    "tokens_in": 0,
    "tokens_out": 0,
    "tokens_available": false,
    "calls_by_model": {
      "gpt-5.4": 67
    }
  },
  "tool_telemetry": {
    "total_tool_calls": 22,
    "vendor_calls": {
      "yfinance": 15,
      "naver": 3,
      "ecos": 1,
      "opendart": 1,
      "alpha_vantage": 2
    },
    "fallback_count": 5,
    "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_company_news",
        "vendor": "naver",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_social_sentiment",
        "vendor": "naver",
        "status": "fallback",
        "fallback": true,
        "note": "naver: empty or unusable result"
      },
      {
        "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_macro_news",
        "vendor": "alpha_vantage",
        "status": "success",
        "fallback": false,
        "note": null
      },
      {
        "method": "get_company_news",
        "vendor": "naver",
        "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_income_statement",
        "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",
    "intraday_snapshot_missing_same_day"
  ],
  "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": "058470.KQ",
      "attempted": true,
      "success": true,
      "checkpoint": "10:05",
      "interval": "5m",
      "attempted_at": "2026-04-17T10:40:42.755812+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-17T10:20:00+09:00"
    },
    {
      "ticker": "058470.KQ",
      "attempted": true,
      "success": true,
      "checkpoint": "selective_rerun",
      "interval": "5m",
      "attempted_at": "2026-04-17T10:56:44.430746+09:00",
      "provider": "yfinance_intraday",
      "market_data_asof": "2026-04-17T10:35:00+09:00"
    }
  ],
  "latest_intraday_snapshot_attempt": {
    "ticker": "058470.KQ",
    "attempted": true,
    "success": true,
    "checkpoint": "selective_rerun",
    "interval": "5m",
    "attempted_at": "2026-04-17T10:56:44.430746+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T10:35:00+09:00"
  },
  "intraday_snapshot_latest_attempt": {
    "ticker": "058470.KQ",
    "attempted": true,
    "success": true,
    "checkpoint": "selective_rerun",
    "interval": "5m",
    "attempted_at": "2026-04-17T10:56:44.430746+09:00",
    "provider": "yfinance_intraday",
    "market_data_asof": "2026-04-17T10:35:00+09:00"
  }
}