실시간 수급과 장 마감 확정 수급의 차이
결론부터 말하면, 장중 수급 화면은 해당 시각의 추정·잠정 관측값으로 저장하고 장 마감 확정 통계는 별도 레코드로 추가해야 한다. 장중 값을 나중에 “확정”으로 이름만 바꿔 덮어쓰면 차이와 오류를 검증할 수 없다.
장중 값은 빠르게 변하는 상황을 보는 데 쓰고, 마감 후 글·통계·모델 입력은 공식 확정값으로 다시 맞춘다. 둘은 우열이 아니라 사용 시점과 확정 상태가 다른 데이터다.
원리를 보여 주기 위해 실제 시장 수치가 아닌 100·150·120백만원의 장중 합성 관측과 90백만원의 합성 확정값을 사용했다. 장중 값과 확정값의 차이는 각각 10·60·30백만원이며, 계산 스크립트와 결과에 synthetic: true를 명시했다.
이 글로 해결할 수 있는 것
- 장중 추정값과 마감 확정값을 한 컬럼에 섞지 않는다.
- 기준시각, 상태, 단위와 출처를 포함한 저장 구조를 만든다.
- 확정 후 차이를 계산하고 알림 품질을 검증한다.
왜 장중과 마감 숫자를 분리하는가
장중 화면은 속도가 중요하고 데이터 제공자의 산출·갱신 방식이 개입할 수 있다. 장 마감 통계는 그날의 분석과 장기 저장 기준이 된다. 제공자 문서가 “실시간”이라고 해도 확정 여부, 갱신 주기와 분류 정의를 따로 확인한다.
최소 저장 필드
{
"source": "provider-name",
"market": "KOSPI",
"investor_class": "foreign",
"metric": "net_purchase",
"value": 120,
"unit": "million_krw",
"as_of": "2026-08-22T15:20:00+09:00",
"status": "estimate",
"collected_at": "..."
}값과 함께 상태를 저장해야 화면과 분석 코드가 추정치를 확정치처럼 표시하지 않는다.
합성 reconciliation 결과
| 기준시각 | 상태 | 합성 값(백만원) | 합성 확정값과 차이 |
|---|---|---|---|
| 10:00 | estimate | 100 | +10 |
| 12:00 | estimate | 150 | +60 |
| 15:20 | estimate | 120 | +30 |
| 마감 확정 | final | 90 | 0 |
이 숫자는 설명을 위해 만든 값이며 실제 날짜나 시장을 나타내지 않는다. 실행 코드는 content/evidence/investor_flow_reconciliation_demo.py, 결과는 content/evidence/investor_flow_reconciliation_20260822.json에 있다.
확정값을 받았을 때 처리 순서
- 원래 estimate 레코드를 보존한다.
- 출처와 시각이 명확한 final 레코드를 append한다.
- 같은 시장·분류·단위끼리 차이와 비율을 계산한다.
- 반복적으로 큰 차이가 나는 제공자·시간대의 알림 기준을 조정한다.
- 글과 장기 분석에는 final만 기본 선택한다.
알림에서 피할 표현
장중 추정치 하나만 보고 “외국인 매집 확정”, “기관 이탈 완료”처럼 확정 표현을 쓰지 않는다. 화면에는 “15:20 기준·제공자 추정·마감 후 재확인”처럼 독자가 상태를 알 수 있는 문구를 둔다.
한계와 투자정보 고지
실제 제공자별 장중 산출식과 갱신 주기는 해당 서비스 문서를 확인해야 한다. 이 글의 합성 예는 저장·검증 원리를 설명할 뿐 현재 시장 수급이나 가격 방향을 제시하지 않는다. 특정 금융상품의 매수·매도를 권유하지 않는다.
출처와 변경 이력
- KRX Data Marketplace
- KRX OPEN API 이용방법
- 최종 검토: 2026-08-22
- 2026-08-22: estimate/final append와 합성 reconciliation 검증