KIS+KRX Corporate-Action & Symbol-Lifecycle Reliability Playbook
Date: 2026-02-25 (KST)
TL;DR
Most live-trading failures are not model failures — they are instrument-lifecycle failures:
- trading a name during suspension windows
- keeping stale orders across split/merge/reference-price events
- missing symbol metadata changes (code/status/unit/tick eligibility)
- replaying history with one price-adjustment policy and trading live with another
This playbook turns KIS + KRX operational reality into a deterministic control layer for Vellab.
1) Why this deserves its own risk module
For KR live execution, corporate actions and listing-status changes are not edge cases. They are recurring sources of:
- reject storms (invalid price/qty/session)
- ghost exposure (fills against stale assumptions)
- broken PnL attribution (split-adjusted history vs unadjusted live fills)
- monitoring blind spots (symbol looked valid yesterday, not now)
Treat lifecycle handling as pre-trade risk, not postmortem cleanup.
2) Event taxonomy (operator-centric)
Model events by operational impact, not legal wording.
2.1 Price/quantity remapping events
- stock split / reverse split
- bonus issue / rights-related entitlement changes
- events that force reference-price re-anchoring
Execution impact:
- freeze new orders until internal reference snapshot is refreshed
- cancel stale resting orders
- recompute min tick / lot / notional checks from latest symbol metadata
2.2 Identity/continuity events
- symbol code/name changes
- merger, spin-off, relisting paths
Execution impact:
- preserve internal
instrument_idcontinuity map (old_code -> new_code) - keep strategy state tied to stable internal ID, never raw broker symbol only
2.3 Tradability state events
- trading halt / resumption
- management/designation states
- delisting / cleanup-trading windows
Execution impact:
- hard gate order routing by tradability state
- no “best effort” retries while state is non-tradable
3) Data planes you need (minimum viable)
Use at least three independent planes:
- Reference plane (daily/periodic):
- KIS stock info files + broker/reference metadata
- KRX data snapshots for status/market structure context
- Announcement plane (event-driven):
- KIND disclosures and trading-halt/resume notices
- Runtime plane (intra-day sanity):
- quote/trade stream anomalies (sudden non-tradable signatures, repeated rejects)
If any plane disagrees, route symbol to DEGRADED and require explicit reconciliation.
4) Internal symbol lifecycle state machine
Define a state machine in execution core:
ACTIVE -> PRE_EVENT -> FROZEN -> TRANSITION_APPLY -> RESUME_CHECK -> ACTIVE
terminal branch:
... -> RETIRED
State semantics
ACTIVE: normal tradabilityPRE_EVENT: event detected; only risk-reducing actions allowedFROZEN: block new opens; allow cancels/hedges only (policy-based)TRANSITION_APPLY: update symbol metadata, continuity map, reference policiesRESUME_CHECK: smoke-test with passive micro-order policy (optional)RETIRED: no routing allowed, archive-only
Do not use ad-hoc flags. Make transitions explicit and auditable.
5) Order-safety rules at boundaries
5.1 Freeze windows
When event time is known (or suspected), enforce preconfigured freeze windows:
T-Δbefore boundary: stop opening new positions- at boundary: auto-cancel incompatible resting orders
T+Δafter boundary: reopen only after metadata parity checks
5.2 Compatibility checks on re-open
Before re-enabling routing:
- symbol active status
- price ladder/tick-size validity
- orderable quantity constraints
- session/time eligibility
- account entitlement compatibility (product/account routing)
5.3 Reject-storm breaker
If symbol-level rejects exceed threshold in short window:
- force
FROZEN - snapshot request/response evidence
- require manual/automated reconciliation before resume
6) Position/PnL integrity policy
6.1 Dual-price policy in storage
Store both:
- raw execution prices (broker truth)
- analysis-adjusted prices (research/TCA convenience)
Never overwrite raw fills with adjusted values.
6.2 Bitemporal symbol master
For each instrument record keep:
valid_time(market-effective time)system_time(when your system learned it)
This avoids hindsight leakage in replay and makes incident reconstruction possible.
7) Vellab implementation blueprint (practical)
7.1 Core tables
instrument_master(current canonical state)instrument_events(append-only lifecycle events)instrument_aliases(old_code -> canonical_id)instrument_state_audit(state transitions with actor/reason)
7.2 Services
symbol-master-sync(reference plane)disclosure-ingestor(announcement plane)execution-gatekeeper(pre-trade enforcement)reconcile-worker(cross-plane mismatch resolver)
7.3 Hard invariants
- No order submission unless
state == ACTIVE - No direct routing by raw symbol string (must resolve canonical ID)
- Every state transition must be persisted with reason and source
8) Monitoring & alerts
Minimum metrics:
symbol_state_count{state}symbol_transition_total{from,to,source}order_reject_total{symbol,reason}symbol_metadata_mismatch_totalorders_blocked_by_lifecycle_total
Recommended alerts:
- any symbol stuck in
TRANSITION_APPLYbeyond TTL - reject burst on single symbol
- cross-plane mismatch persisting > N minutes
- routing attempt to
RETIREDsymbol (severity high)
9) Incident runbook (15-minute version)
- Contain: set symbol
FROZEN - Collect: latest reference snapshot + announcement + reject samples
- Compare: identify mismatch dimension (status/code/price-rule/session)
- Patch: apply event + alias mapping + metadata refresh
- Verify: dry-run validator on candidate orders
- Resume: controlled reopen (small-size policy), then full enable
- Postmortem: add failing pattern to lifecycle regression tests
10) One-line takeaway
In live KR trading, alpha can survive bad fills; it rarely survives broken symbol lifecycle handling — build lifecycle control as a first-class risk system.
References (starting points)
- KIS Developers portal: https://apiportal.koreainvestment.com/intro
- KIS Open API sample repository (
stock_info, auth/examples structure): - KIND trading halt/resume information page:
- KRX Data Marketplace (status/reference datasets):
- KRX regulation portal (market-operation framework):