recipes.fundamental.disclosure.eventRadar.index Recipes Recipe observed

Event Radar Incubator 진입점

Company.disclosure, liveFilings, gather 원자료, scan primitive, observed viz skill만으로 단기 이벤트와 시장 반응을 묶어 촉매 후보를 찾는 L1/L1.5 스킬팩 진입점이다. 트리거 - '이벤트 레이더', '촉매 체크', '공시와 주가 반응'.

이 스킬

Event Radar Incubator 진입점

Company.disclosure, liveFilings, gather 원자료, scan primitive, observed viz skill만으로 단기 이벤트와 시장 반응을 묶어 촉매 후보를 찾는 L1/L1.5 스킬팩 진입점이다. 트리거 - '이벤트 레이더', '촉매 체크', '공시와 주가 반응'.

Recipes observed recipes.fundamental.disclosure.eventRadar.index

이어 가기

절차

실행 순서

  1. 1

    공개 호출 블록에 L2/L3 호출 문자열이 없어야 한다.

  2. 2

    RunPython은 `buildEventRadarMemo` 결합과 `emit_result(...)` 발급에만 쓴다.

  3. 3

    visualRefs는 observed 상태의 viz skill만 포함한다.

  4. 4

    `deepDive`, `falsifierLedger`, `engineCandidateMemo`, `visualDecisionPack`이 모두 있어야 한다.

예시

이런 질문이 들어오면 이 skill 을 쓴다

  • 삼성전자 이벤트 레이더로 촉매 체크
  • 공시와 주가 반응만으로 단기 이벤트 봐줘
  • analysis 없이 catalyst candidate 정리

출력

기대 결과

  • L2 금지 조건을 통과한 event radar ledger
  • event별 supporting evidence와 counter evidence
  • observed viz surface 선택표
  • 엔진 환류 후보와 recipe 보존 계약

공개 호출 방식

AI 도구 실행 순서는 EngineCall 우선이다. Company.disclosure, Company.liveFilings, Company.gather, scan.market, scan.insider, scan.capital은 엔진 surface로 호출한다. 아래 Python 블록은 확보한 L1/L1.5 근거를 buildEventRadarMemo로 묶는 RunPython fallback 절차다.

import dartlab
from dartlab.synth.eventRadar import buildEventRadarMemo

target = "005930"
c = dartlab.Company(target)

def rows(value, limit=30):
    if hasattr(value, "head") and hasattr(value, "to_dicts"):
        return value.head(limit).to_dicts()
    if isinstance(value, list):
        return value[:limit]
    return []

def gather_rows(axis, limit=30):
    try:
        return rows(c.gather(axis), limit=limit)
    except Exception:
        try:
            return rows(dartlab.gather(axis, target=target), limit=limit)
        except Exception:
            return []

try:
    filings = rows(c.disclosure(days=45), limit=50)
except TypeError:
    filings = rows(c.disclosure(), limit=50)
except Exception:
    filings = []

try:
    live_filings = rows(c.liveFilings(days=7), limit=20)
except Exception:
    live_filings = []

memo = buildEventRadarMemo(
    target=target,
    market=str(getattr(c, "market", "KR")),
    companyName=str(getattr(c, "corpName", target)),
    filings=[*live_filings, *filings],
    newsRows=gather_rows("news", limit=20),
    priceRows=gather_rows("price", limit=40),
    flowRows=gather_rows("flow", limit=40),
    insiderRows=gather_rows("insiderTrading", limit=20),
    ownershipRows=gather_rows("ownership", limit=20),
    dividendRows=gather_rows("dividends", limit=20),
    splitRows=gather_rows("splits", limit=20),
    consensusRows=gather_rows("consensus", limit=12),
)

emit_result(
    table=memo["tables"]["deepDive"],
    values=memo["headline"],
    date=memo["asOf"],
    sources=memo["sources"],
)

호출 동작

1. 결론 도출

radarScore, eventCount, openFalsifierCount, decisionStatus를 뽑는다. 점수는 이벤트 강도와 반응의 우선순위이지 매수·매도 결론이 아니다.

2. 핵심 근거 수집

근거는 filing/news/price/flow/insider/ownership/dividend/split/consensus/scan primitive row에서만 나온다. 답변에는 target, date, sourceRef, tableRef, valueRef, executionRef가 있어야 한다.

3. 메커니즘 분석

graph LR
  A["filing/news"] --> B["event inbox"]
  C["price/flow"] --> D["reaction ledger"]
  E["insider/ownership"] --> F["holder signal"]
  G["dividend/split"] --> H["capital action"]
  I["consensus"] --> J["drift watch"]
  B --> K["falsifier ledger"]
  D --> K
  F --> K
  H --> K
  J --> K
  K --> L["engine candidate memo"]

4. 반례·한계

정기 공시, 중복 기사, 시장 전체 변동, stale consensus, 계획 매도, 기계적 배당·분할은 반드시 falsifier로 남긴다.

5. 후속 모니터링

3개 이상 target selfRun에서 반복되고, falsifier가 닫히며, observed viz binding이 안정되면 engineCandidateMemo에 승격 후보로 남긴다.

대표 반환 형태

memo : dict

key의미
headlinetarget, radarScore, eventCount, openFalsifierCount, decisionStatus
tables.sourceCoverageAudit입력 source별 row coverage
tables.eventInbox공시·뉴스 이벤트 분류
tables.priceFlowReaction가격·거래량·수급 반응
tables.insiderOwnershipSignal내부자·주요주주 변화
tables.capitalActionMonitor배당·분할·자사주·증자 이벤트
tables.consensusDriftWatch컨센서스 변화
tables.falsifierLedger반증 조건
tables.engineCandidateMemo엔진 환류 후보
tables.visualDecisionPackobserved viz 선택

연계 절차

  1. recipes.fundamental.disclosure.eventRadar.sourceCoverageAudit - 원자료 coverage 확인.
  2. recipes.fundamental.disclosure.eventRadar.eventInbox - 공시·뉴스 이벤트 분류.
  3. recipes.fundamental.disclosure.eventRadar.priceFlowReaction - 가격·거래량·수급 반응.
  4. recipes.fundamental.disclosure.eventRadar.insiderOwnershipSignal - 내부자·주요주주 변화.
  5. recipes.fundamental.disclosure.eventRadar.capitalActionMonitor - 배당·분할·자사주·증자 이벤트.
  6. recipes.fundamental.disclosure.eventRadar.consensusDriftWatch - 컨센서스 변화.
  7. recipes.fundamental.disclosure.eventRadar.falsifierLedger - 반증 ledger.
  8. recipes.fundamental.disclosure.eventRadar.engineCandidateMemo - 엔진 환류 후보.
  9. recipes.fundamental.disclosure.eventRadar.visualDecisionPack - observed viz 선택.
  10. recipes.fundamental.disclosure.eventRadar.deepDive - 전체 실행.

기본 검증

  • 공개 호출 블록에 L2/L3 호출 문자열이 없어야 한다.
  • RunPython은 buildEventRadarMemo 결합과 emit_result(...) 발급에만 쓴다.
  • visualRefs는 observed 상태의 viz skill만 포함한다.
  • deepDive, falsifierLedger, engineCandidateMemo, visualDecisionPack이 모두 있어야 한다.

런타임

실행 환경별 호환성

환경상태비고 / 제한
Local Python supported
Server supported
MCP supported
Web AI supported
Pyodide limited
  • 브라우저 snapshot 범위에서는 live filing, price, flow, consensus row가 제한될 수 있다.

실패 회피

흔한 실패 · 절대 금지

흔한 실패
  • 정기 공시를 새로운 촉매로 오해
  • 시장 전체 급락을 개별 이벤트 반응으로 단정
  • 내부자 거래의 계획 매도나 데이터 지연을 반증하지 않음
  • 가격 차트에 tableRef/evidenceBinding을 붙이지 않음
절대 금지
  • c.analysis, c.credit, c.quant, c.macro, c.industry, c.story를 호출하지 않는다.
  • 이벤트를 투자 결론으로 바로 단정하지 않는다.
  • observed 상태가 아닌 viz skill을 visualRefs에 연결하지 않는다.
  • RunPython에서 엔진이 이미 제공하는 수집 기능을 재구현하지 않는다.