News & Events
[알고리즘 트레이딩/전략편] 38. API에서 순 주문 흐름 (Net Order Flow) 측정
- 2019년 1월 11일
- Posted by: 인사이트캠퍼스
- Category: 금융/AI/IT 기사
알고리즘 트레이딩 (Algorithmic Trading) – 전략 (38)
API에서 순 주문 흐름 (Net Order Flow) 측정
SOBI (Static Order Book Imbalance) 전략은 호가창의 잔량과 가격만을 이용한 정적 모형 (Static Model) 이었다. 잔량이외에도 주가에 영향을 미치는 요인들은 많다. 만약 특정 호가에 잔량 (Depth)이 부족하더라도 지정가 주문 유입량이 많으면 잔량은 눈에 보이는 것 보다 많은 것이다. 또한, 잔량이 풍부하더라도 취소 주문이나 체결 주문에 의한 유출량이 많다면 잔량은 금방 줄어든다. 이와 같이 지정가 주문, 취소 주문, 체결 주문 (상대호가 주문, 시장가 주문)의 연속적인 흐름을 고려한 모형을 동적 모형 (Dynamic Model)이라 한다. 동적 모형을 적용하여 SOBI 전략을 수정하면 DOBI (Dynamic Order Book Imbalance) 전략이 된다.
아래 그림은 각 호가창에서 발생하는 주문들의 흐름을 보여준다. 각 호가의 잔량은 그림과 같은 형태의 물탱크로 생각할 수 있다. 지정가 주문 강도가 높으면 호가의 Depth는 깊어진다. 반면에 취소 주문이나 체결 주문 강도가 높아지면 호가의 Depth는 얕아진다. 아래 그림은 편의상, 체결 주문에 의한 유출은 Bid, Ask 호가 1번에서만 발생하는 것으로 그렸다. 다량의 체결 주문이 발생하면 2번 호가는 1번으로 변경된 후 체결이 이루어질 것이므로 아래와 같이 묘사해도 무방하다.
각 주문들은 연속적인 흐름을 만들어 낸다. 이 흐름을 주문의 흐름 (Order Flow)이라 하자. 그럼 연속적인 주문 흐름을 어떻게 측정할 수 있을까? 참고로, 2010년 Rama Cont (외 2명)는 “A Stochastic model for order book dynamics” 라는 논문에서 주문 흐름을 아래와 같이 정의하고 측정하였다. 일정 시간 (T) 동안 각 주문의 발생량을 측정하고, T 시간 당 발생한 강도 (Intensity)로 표현하였다. 그리고 측정 단위 (Unit size)는 지정가 주문 수량으로 하였다 (지정가 주문 수량의 몇 배… 이런 식으로…). 이 논문에 대해서는 향후 시장미시구조 이론 편에서 자세히 살펴보기로 하고, 여기서는 간단한 방법으로 측정해 보기로 한다.
지정가 주문 수량이나 취소 주문 수량은 호가 틱에서 추출할 수 있고, 체결 주문 수량은 체결 틱에서 추출할 수 있다. 직전 호가 틱과 현재 호가 틱의 잔량의 변화와 체결 수량을 관찰하면 지정가 주문 수량과 취소 주문 수량을 파악할 수 있다. 만약 직전 1번 호가의 잔량이 15개였는데, 현재 1번 호가의 잔량은 13개였고, 체결 주문은 없었다면, 1번 호가에서 2개의 주문이 취소된 것이다. 거래소에서 제공하는 틱 데이터를 유실없이 그대로 사용할 수 있다면 이런 식으로 상당히 정확하게 주문의 흐름을 파악할 수 있다.
DMA (Direct Market Access) 서비스를 이용해서 거래소의 시세 데이터를 그대로 이용할 수 있다면 위와 같은 논리로 주문의 흐름을 파악할 수 있다. 그러나 증권사의 API 서비스는 HTS 망을 이용하므로 호가 틱의 상당 부분이 누락된다. 따라서 직전 호가와 현재 호가를 비교할 수 없으므로 주문의 흐름을 정확히 파악할 수 없다.
API에서는 호가 틱이 중간 중간 누락되는 것으로 보고, 각 호가 틱을 호가 Snap Shot으로 간주하여 주문의 흐름을 근사적으로 측정한다. 직전 스냅샷과 현재 스냅샷을 비교하여 총 유입량과 유출량을 측정한다. 만약 직전 스냅샷의 1번 호가의 잔량이 10개였는데, 현재 스냅샷의 1번 호가의 잔량이 8개였다면 총 유출량은 -2가 된다. 스냅샷 사이에서 발생한 지정가 수량과 취소 수량은 알 수 없지만 총 유입/유출량은 알 수 있다. 또한 체결 틱을 관찰하면 체결 주문량은 측정할 수 있다 (체결 틱은 거의 누락되지 않는다고 함).
위의 예시는 직전 스냅샷 (before)과 현재 스냅샷 (after)의 가능한 몇 가지 경우를 나열해 본 것이다. 호가 변경이 없는 경우와, 호가가 올라가거나 내려간 경우, 그리고 중간 호가가 생성된 경우와 삭제된 경우 등을 나열해 본 것이다. 위 그림처럼 각각의 경우에 대해 총 유입량과 유출량을 파악할 수 있다. 3. 호가가 올라간 경우는 1번 호가에는 7개의 주문이 유입되었고, 2번 호가에서는 2개의 주문이 유출되었다.
아래 그림은 위의 논리대로 API에서 주문 흐름을 측정하는 과정이다. 아래 프로그램은 이베스트투자증권의 XingAPI를 이용하여 만든, 스크립트 기능이 탑재된 API 프로그램이다 (XingScript). 아래 예시는 2015년 8월 20일 코스피200 지수 선물의 호가/체결 틱을 분석하여 주문 흐름을 측정하는 모습이다. 호가+체결 500틱 당 주문 흐름을 관찰하였고, 틱이 발생할 때마다 Sliding 시켜 (일종의) 이동 주문 흐름 (Moving Order Flow)을 관찰하였다.
측정 결과는 아래와 같았다. [09:02:33]의 500틱 동안의 주문 분포는 [그림-1]과 같고, [09:03:04]의 500틱 주문 분포는 [그림-2]와 같다. [09:02:33] ~ [09:03:04] 동안의 주문 흐름은 Bid측 1,2,3 호가에 순 (Net) 주문이 유입되었고, Ask측 1,2,3 호가에서는 -285개 주문이 유출되었음을 알 수 있다. 그 동안 주가 (Sliding 500틱 종가)는 233.55에서 233.60으로 0.05pt 상승하였다.
API로 주문 흐름을 측정하기 위해서는 이 방법이 최선인 듯하고, 그런대로 주가의 흐름과 잘 일치한다. 이 방법을 이용하면 주문의 흐름을 실시간으로 측정할 수 있고 전략에 활용이 가능해 보인다. SOBI 전략에 주문 흐름으로 생성한 신호 (Signal)를 추가하여 DOBI (Dynamic Order Imbalance) 전략을 수행해 볼 수 있다. DOBI 전략에 대해서는 다음 시간에 살펴보기로 한다.