자본시장과 결제 · 거래일·세션 시간·시간대 · 실습
전환 주말이 지나자 두 시장의 마감이 같은 시각에 놓였다
목표
네 시장의 지역시 체결 기록을 시간대 규칙으로 UTC 로 바꾸고, 서머타임 전환일의 특수한 시각을 가르고, 세션 구간과 거래일 라벨을 매긴 뒤, 시장별 마감이 UTC 에서 겹치는 날과 달력 자체의 모순을 찾아냅니다.
왜 중요한가
시각 변환을 고정 오프셋으로 해 두면 예외가 나지 않습니다. 그냥 한 시간 어긋난 값이 저장될 뿐이고, 그 사실은 전환 주말이 지나고 대사가 안 맞을 때에야 드러납니다. 자본시장에서는 이 어긋남이 곧바로 마감 배치와 집계에 닿습니다. 게다가 시장마다 전환 날짜가 달라서, 한쪽은 이미 여름 시각인데 다른 쪽은 아직 겨울 시각인 몇 주가 해마다 있습니다. 그 몇 주 동안만 두 시장의 마감이 같은 순간에 놓이는 일이 실제로 일어납니다.
단계
1. python3 로 /root/session/data 에 markets.json·calendar.json·trades.csv 를 만듭니다.
2. 지역시를 시간대 규칙으로 UTC 로 바꿔 /root/session/normalized.csv 에 trade_id,market,utc_ms 로 적습니다. 그 지역시에 존재하지 않는 시각은 넣지 않습니다.
3. 같은 체결을 겨울 오프셋 고정으로 바꿔 보고, 결과가 다른 것을 /root/session/fixed_diff.csv 에 적습니다.
4. 존재하지 않는 시각을 /root/session/nonexistent.csv 에, 두 번 있는 시각을 /root/session/ambiguous.csv 에 적습니다.
5. 체결마다 세션 구간을 /root/session/phase.csv 에 trade_id,phase 로 적습니다.
6. 달력일과 거래일이 갈리는 체결을 /root/session/tradingday.csv 에 적습니다.
7. 기준일마다 시장별 정규 마감을 /root/session/close_utc.csv 에, 마감이 가까운 시장 쌍을 /root/session/overlap.csv 에 적습니다.
8. 달력 자체의 모순을 /root/session/calendar_defects.csv 에 적고, 앞 단계의 수를 /root/session/summary.json 에 요약합니다.
참고
utc_ms는 UTC 기준 밀리초 정수입니다. 두 번 있는 시각은fold가 0 인 쪽, 즉 먼저 지나간 순간을 씁니다.- 3단계의 겨울 오프셋은 그 시간대의 2025-01-15 12:00 오프셋입니다. 그 값을 코드에 적지 말고 시간대에서 구하세요.
- 5단계 구간은
pre·regular·post·closed·holiday다섯입니다. 구간은 시작을 포함하고 끝을 포함하지 않습니다. 반일장은 정규 마감만 바뀌고, 휴장일은 다른 무엇보다 먼저 판정합니다. - 6단계에서 거래일이 달력일과 다를 수 있는 시장은
calendar.json의overnight_markets에 있습니다. 그 시장에서 개장 후 구간이 끝나는 시각보다 이른 체결은 전날 거래일입니다. - 7단계에서 자정을 넘는 세션의 마감은 다음 날에 있습니다. 가까움의 기준은
calendar.json의overlap_minutes이고, 시장 이름은 사전 순으로 앞선 쪽을market_a에 적습니다. - 8단계 모순은
휴장일에반일장정의와반일장마감이정규보다늦음두 가지입니다. - 흔한 실수 1: 존재하지 않는 시각을 그냥 변환해 저장하는 것. 예외가 나지 않고 한 시간 뒤 값이 됩니다.
- 흔한 실수 2: 휴장일 판정을 세션 구간 판정 뒤에 하는 것. 휴장일의 체결이 정규장으로 분류됩니다.
- 공개 문서: [IANA tz](https://www.iana.org/time-zones), [zoneinfo](https://docs.python.org/3/library/zoneinfo.html), [PEP 615](https://peps.python.org/pep-0615/), [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339). 시장 이름과 세션 시각은 이 실습의 합성 자료이고, 시간대 식별자만 실제 IANA 이름입니다.
단계 8개
- 네 시장의 세션 정의와 달력, 체결 자료 만들기
- 지역시를 시간대 규칙으로 UTC 로 바꾸기
- 고정 오프셋으로 바꿔 보고 어긋난 날 찾기
- 없는 시각과 두 번 있는 시각 가르기
- 체결마다 세션 구간 매기기
- 자정을 넘는 세션의 거래일 라벨 붙이기
- 시장별 마감을 UTC 로 모아 겹치는 배치 창 찾기
- 달력 자체의 모순을 찾고 전체를 요약하기