자본시장과 결제 · 주문 상태 기계와 수량 불변식 · 실습
과체결 경보 스무 건 중 진짜는 몇 건인가
목표
체결 보고 스트림에서 금지된 상태 전이·수량 등식 위반·누적 역행·과체결·평균 단가 불일치를 각각 찾아내고, 그 가운데 중복 보고와 순서 뒤바뀜으로 설명되는 것을 걷어 내 진짜 결함만 남깁니다.
왜 중요한가
주문 자료는 사람이 눈으로 읽어 이상을 찾을 수 있는 크기가 아닙니다. 다행히 이 도메인에는 규칙이 있어 거름망을 만들 수 있습니다. 상태 전이표가 있고, 수량에는 등식이 있고, 평균 단가는 다시 계산할 수 있습니다. 어려운 것은 검사 자체가 아니라 걸러 낸 것을 설명하는 일입니다. 중복 보고는 합을 부풀려 과체결처럼 보이게 하고, 뒤바뀐 도착 순서는 멀쩡한 주문을 금지 전이로 만듭니다. 이 셋을 나누지 않고 "이상 30건" 이라고 넘기면 받은 사람은 아무것도 할 수 없습니다.
단계
1. python3 로 /root/orders/data 에 transitions.json·orders.csv·reports.csv 를 만듭니다.
2. 전이표를 /root/orders/reachable.json 으로 정리하고, 종결 상태를 /root/orders/terminal.txt 에, 표 자신의 모순을 /root/orders/graph_defects.txt 에 적습니다.
3. 받은 순서대로 읽었을 때의 금지 전이를 /root/orders/illegal.csv 에 적습니다.
4. 수량 등식이 깨진 보고를 /root/orders/qty_break.csv 에 적습니다.
5. 누적 체결 수량이 되돌아간 자리를 /root/orders/cum_back.csv 에 적습니다.
6. 주문 수량을 넘어선 주문을 /root/orders/overfill.csv 에 적습니다.
7. 평균 단가가 가중 평균과 다른 보고를 /root/orders/avgpx_break.csv 에 적습니다.
8. 주문마다 원인을 갈라 /root/orders/verdict.csv 에 적고, 원인별 수를 /root/orders/summary.json 에 요약합니다.
참고
- 3단계부터 7단계까지는 받은 순서(seq) 대로 읽습니다. 순서를 고치는 것은 8단계에서 합니다.
- 수량 등식은 살아 있는 주문에만 적용합니다. 종결 상태에서는 잔량이 0 이어야 합니다. 종결 상태 목록은
transitions.json에 있습니다. - 평균 단가는
decimal로 계산하고 소수 넷째 자리에서ROUND_HALF_UP으로 반올림합니다.float로 하면 멀쩡한 자료가 어긋난 것처럼 나옵니다. - 8단계 원인은 순서대로 판정합니다. 중복을 제거해 이상이 사라지면
중복보고, 거기에 더해 거래소 시각으로 정렬해 사라지면순서뒤바뀜, 그래도 남으면진짜결함이고defects칸에 남은 검사 이름을|로 이어 적습니다(중복보고·순서뒤바뀜은없음). - 흔한 실수 1: 등식을 상태와 무관하게 적용해 정상적인 취소를 전부 이상으로 올리는 것.
- 흔한 실수 2: 중복 보고를 제거하지 않고 과체결을 판정하는 것.
- 공개 문서: [FIX Standards](https://www.fixtrading.org/standards/), [Fiximate](https://fiximate.fixtrading.org/), [decimal](https://docs.python.org/3/library/decimal.html). 전이표와 열두 주문은 이 실습의 합성 자료입니다.
단계 8개
- 전이표와 열두 주문의 체결 보고 만들기
- 전이표를 읽고 표 자신의 모순 찾기
- 받은 순서대로 읽어 금지 전이 찾기
- 수량 등식이 깨진 보고 찾기
- 누적 체결 수량이 되돌아간 자리 찾기
- 주문 수량을 넘어선 주문 찾기
- 평균 단가를 다시 계산해 대조하기
- 중복과 순서 문제를 걷어 내고 진짜만 남기기