LabHub
学习 学习路径 课程

资本市场与清结算

二十条超量成交告警里,真的有几条

在 LabHub 中继续学习

한국어 원문으로 표시합니다.

목표

체결 보고 스트림에서 금지된 상태 전이·수량 등식 위반·누적 역행·과체결·평균 단가 불일치를 각각 찾아내고, 그 가운데 중복 보고와 순서 뒤바뀜으로 설명되는 것을 걷어 내 진짜 결함만 남깁니다.

왜 중요한가

주문 자료는 사람이 눈으로 읽어 이상을 찾을 수 있는 크기가 아닙니다. 다행히 이 도메인에는 규칙이 있어 거름망을 만들 수 있습니다. 상태 전이표가 있고, 수량에는 등식이 있고, 평균 단가는 다시 계산할 수 있습니다. 어려운 것은 검사 자체가 아니라 걸러 낸 것을 설명하는 일입니다. 중복 보고는 합을 부풀려 과체결처럼 보이게 하고, 뒤바뀐 도착 순서는 멀쩡한 주문을 금지 전이로 만듭니다. 이 셋을 나누지 않고 "이상 30건" 이라고 넘기면 받은 사람은 아무것도 할 수 없습니다.

단계

  1. python3/root/orders/datatransitions.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 에 요약합니다.

참고

전이표와 열두 주문의 체결 보고 만들기

python3/root/orders/datatransitions.json·orders.csv·reports.csv 를 만듭니다. 난수를 쓰지 않는 생성 스크립트를 그대로 쓰세요.

고객 자료를 그대로 가져올 수 없으니 같은 모양의 합성 자료를 만듭니다. 난수를 쓰지 않아야 누가 몇 번을 돌려도 같은 자료가 나오고 서로의 판정을 대조할 수 있습니다. 채점기는 자료를 표준형으로 바꿔 지문을 대조하므로 손으로 고치면 뒤 단계가 전부 막힙니다.

전이표를 읽고 표 자신의 모순 찾기

/root/orders/reachable.json 에 상태별 다음 상태 목록을, /root/orders/terminal.txt 에 종결 상태를 한 줄에 하나씩, /root/orders/graph_defects.txt 에 종결이라고 선언됐는데 나가는 전이가 남은 상태를 적으세요.

종결 상태는 더 갈 곳이 없어야 합니다. 표에서 종결로 선언한 상태의 다음 상태 목록이 비어 있지 않다면 그 표는 자기 모순이고, 그 상태를 지나는 잘못된 보고를 검사기가 통과시킵니다. 목록은 정렬해 두면 대조가 쉽습니다.

받은 순서대로 읽어 금지 전이 찾기

/root/orders/illegal.csv 에 첫 줄 order_id,from_seq,from_status,to_status 를 두고, 주문마다 seq 순서로 읽었을 때 표에 없는 전이를 적으세요.

주문별로 나눠 seq 오름차순으로 읽고 이웃한 두 보고를 견줍니다. 앞 상태의 다음 상태 목록에 뒤 상태가 없으면 금지 전이입니다. 종결 상태는 목록이 비어 있으므로 그 뒤에 오는 모든 보고가 걸립니다.

수량 등식이 깨진 보고 찾기

/root/orders/qty_break.csv 에 첫 줄 report_id,order_id,ord_status,expected_leaves,leaves_qty 를 두고, 살아 있는 주문에서 등식이 깨졌거나 종결 상태에서 잔량이 0 이 아닌 보고를 적으세요.

살아 있는 주문에서 기대 잔량은 주문 수량에서 누적 체결을 뺀 값이고, 종결 상태에서는 0 입니다. 종결 상태 목록은 자료에서 읽으세요. 취소로 끝난 주문을 전부 위반으로 올린다면 상태를 보지 않은 것입니다.

누적 체결 수량이 되돌아간 자리 찾기

/root/orders/cum_back.csv 에 첫 줄 order_id,seq,prev_cum,cum 을 두고, seq 순서로 읽을 때 바로 앞 보고보다 누적 체결이 작아진 지점을 적으세요.

누적 체결은 줄어들지 않습니다. 같은 값이 이어지는 것은 문제가 아니고 작아지는 것만 찾습니다. seq 는 되돌아간 쪽 보고의 것을 적으세요.

주문 수량을 넘어선 주문 찾기

/root/orders/overfill.csv 에 첫 줄 order_id,order_qty,max_cum,sum_last 를 두고, 누적 체결의 최댓값이나 체결 수량의 합이 주문 수량을 넘은 주문을 적으세요.

두 가지를 다 봅니다. 누적 체결이 주문 수량을 넘은 경우와, 체결 수량을 전부 더하면 넘는 경우입니다. 뒤쪽은 같은 보고가 두 번 들어와도 생기므로, 이 단계에서는 중복을 지우지 말고 있는 그대로 세세요. 가르는 일은 8단계에서 합니다.

평균 단가를 다시 계산해 대조하기

/root/orders/avgpx_break.csv 에 첫 줄 report_id,order_id,reported_avg,recomputed_avg 를 두고, 보고의 평균 단가가 그때까지의 가중 평균과 다른 보고를 적으세요.

그 보고까지의 체결 수량과 금액을 누적해 나누고 소수 넷째 자리에서 반올림합니다. decimal 을 쓰고 ROUND_HALF_UP 으로 맞추세요. 체결이 하나도 없는 보고의 평균은 0 입니다. 값은 소수 넷째 자리까지 적습니다.

중복과 순서 문제를 걷어 내고 진짜만 남기기

/root/orders/verdict.csv 에 첫 줄 order_id,cause,defects 를 두고 결함이 보이는 주문마다 한 줄씩 적고, /root/orders/summary.jsonorders·clean·중복보고·순서뒤바뀜·진짜결함·defects 를 요약하세요.

판정은 순서대로 합니다. 중복 보고를 지웠을 때 모든 검사가 조용해지면 중복보고, 거기에 더해 거래소 시각으로 정렬했을 때 조용해지면 순서뒤바뀜, 그래도 남으면 진짜결함 입니다. 중복 제거는 보고 식별자 기준이고, 정렬은 거래소 시각과 seq 순입니다. defects 칸에는 마지막까지 남은 검사 이름만 적습니다.