(Feature 1) Order Flow Imbalance
OFI(Order Flow Imbalance)의 정의와 직관, 수식 유도를 설명합니다. 호가창 변화로 매수/매도 압력을 수치화하는 대표적인 트레이딩 피쳐입니다.
이전 글: 피쳐 정규화 - EWMA 기반 Z-Score와 스케일 안정화
이 글은 금융수학 시리즈의 글입니다.
OFI(Order Flow Imbalance)는 호가창 최우선 호가의 변화를 추적하여 매수/매도 압력을 하나의 스칼라로 수치화한 지표입니다. 체결, 취소, 주문 제출 모두를 반영하며, 가격 변화에 대해 높은 설명력을 가집니다.
피쳐에 관한 이야기는 몇 번의 글에 걸쳐 해보려 하는데요. 첫 번째로 Order Flow Imbalance(OFI)를 빼놓을 수 없습니다. 트레이더들이 이 피쳐를 언제부터 인지하기 시작했는지, 학계에서 언제부터 다루기 시작했는지 정확히 알 수는 없지만, 제가 아는 한 Cont, Kukanov & Stoikov (2011)1가 학술적으로 잘 다듬어진 형태의 가장 초창기 논문입니다.
재밌는 점은, 이 논문은 주가를 예측하는 논문이 아니라는 점입니다. 논문1의 결과는 일정 기간 동안의 중간가격 변화량이 같은 기간의 OFI로 상당 부분 설명된다는 것입니다. 수식으로는 다음과 같습니다:
\[\Delta P_t = \beta \cdot \text{OFI}_t + \varepsilon_t\]그리고 이 논문 이후에, OFI를 이용해 미래 주가를 예측하는 연구들이 활발히 진행됐습니다. 지금도 많은 트레이더들이 사용하고 있고 — 아마 논문 이전에도 사용했겠죠 — 실제로 데이터 분석을 해보면 여전히 유의미합니다. 그럴수밖에 없는것이 OFI는 상당히 많은 정보를 담고 있는 피쳐입니다. 체결, 취소, 주문 제출, 이 모든 것의 누적을 하나의 값으로 표현하는 것이니까요. 더불어 상당수의 트레이더들이 이 피쳐를 참고합니다. 이래저래 여러 면에서 설명력이 없을 수가 없는 피쳐입니다. 그래서 피쳐에 관한 첫 번째 이야기로 OFI를 골랐습니다.
논문1을 보면 OFI를 도출하는 부분이 있는데, OFI 수식 자체보다 이 부분이 많은 영감을 줍니다. 호가창 모델을 상당히 단순화한 뒤 유도를 거쳐 OFI와 가격의 관계를 도출합니다. 그림을 빼면 한 쪽이 채 되지 않습니다. 한번 시작해 볼까요?
Stylized Model: Intuition
가정은 다음과 같습니다:
- 최우선 호가 이외의 호가 수량은 전부 $D$이다
- 지정가 주문 제출과 취소는 전부 최우선 호가에서만 일어난다
수식을 다음과 같이 정의합니다:
| 기호 | 의미 |
|---|---|
| $M^B$, $M^A$ | bid / ask 시장가 주문 (market order) |
| $L^B$, $L^A$ | bid / ask 지정가 주문 (limit order) |
| $C^B$, $C^A$ | bid / ask 취소 주문 (cancel order) |
매수 최우선 호가의 가격 변화 $\Delta P^B$는 $L^B - C^B - M^A$가 각 레벨의 수량 $D$를 얼만큼 가져갈 수 있는지로 표현됩니다. $\Delta P^A$도 마찬가지입니다. 수식으로 표현하면:
\[\Delta P^B \approx \frac{L^B - C^B - M^A}{D} \tag{1}\] \[\Delta P^A \approx \frac{L^A - C^A - M^B}{D} \tag{2}\]그러면 중간가 $P$의 가격 변화를 표현해 보겠습니다:
\[\Delta P = \Delta \frac{P^B + P^A}{2} = \frac{(L^B - C^B - M^A) + (L^A - C^A - M^B)}{2D} + \varepsilon\]여기서 $\varepsilon$는 truncation error입니다. 식 $(1)$, $(2)$의 approximation, 그리고 단순화된 호가창 가정 등에서 나오는 오차입니다.
자, 끝났습니다. 그러면, 일정 기간 동안 mid-price의 가격 변화는 다음과 같이 표현할 수 있습니다:
\[\Delta P = \beta \cdot \text{OFI} + \varepsilon\] \[\text{OFI} = L^B - C^B - M^A + L^A - C^A - M^B\]저희는 시장에서 지정가 주문, 취소 주문, 시장가 주문을 구별하기 어렵기 때문에 직접 사용하기는 어렵습니다. 금융적 직관을 좀 더 살려서 다듬어 봅시다. 다음 섹션에서 나오는 수식이 실제로 사용하게 되는 피쳐입니다.
Formula
호가창 이벤트 $n$에서의 최우선 매수호가 $(P_n^B, q_n^B)$를 관측한다고 합시다. 이벤트 $n-1$에서 $n$으로 넘어갈 때 매수 쪽의 순 기여량을 $e_n^B$, 매도 쪽의 순 기여량을 $e_n^A$로 정의합니다. 이전 이벤트와 비교하면서 어떤 일이 발생하는지 추적해 봅시다.
매수호가가 올라간 경우 ($P_n^B > P_{n-1}^B$)
기존 best bid 위에 새 지정가 매수가 들어온 것입니다. 새 가격의 물량 $q_n^B$는 전부 신규 유입으로:
\[e_n^B = q_n^B\]이 부분에 매수 쪽 압력이 표현되는데요, 이런 경우는 두 가지에서 발생할 수 있습니다. 첫 번째는 비어 있는 호가에 제출한 경우, 두 번째는 매도 호가에 제출한 경우입니다. 두 번째 경우에는 더 강한 매수 압력으로 체결에 관한 정보가 있어야겠죠? 그 부분은 $e_n^A$에서 표현됩니다. (아래에서 확인합니다.)
매수호가가 동일한 경우 ($P_n^B = P_{n-1}^B$)
가격은 그대로인데 물량만 바뀌었습니다. 지정가 주문 유입(+)과 취소/체결(-)의 합산입니다:
\[e_n^B = q_n^B - q_{n-1}^B\]매수호가가 내려간 경우 ($P_n^B < P_{n-1}^B$)
이전 best bid의 물량이 전량 소진되어 가격이 하락한 것입니다. 취소와 체결에 의해 발생할 수 있습니다. 사라진 물량 $q_{n-1}^B$ 전체가 유출입니다:
\[e_n^B = -q_{n-1}^B\]이 세 경우를 indicator function으로 합치면 하나의 식으로 표현할 수 있습니다:
\[e_n^B = \mathbf{1}_{\{P_n^B \geq P_{n-1}^B\}} \cdot q_n^B - \mathbf{1}_{\{P_n^B \leq P_{n-1}^B\}} \cdot q_{n-1}^B \tag{3}\]$P_n^B = P_{n-1}^B$일 때 양쪽 indicator가 모두 1이 되어 $q_n^B - q_{n-1}^B$가 나옵니다. 나머지 두 경우는 한쪽만 1이 됩니다.
매도 쪽 $e_n^A$도 같은 논리를 방향만 뒤집어 유도합니다:
- $P_n^A < P_{n-1}^A$ (매도호가가 내려옴): 더 싸게 팔겠다는 의지. 새 물량 $q_n^A$ 전부가 매도 압력 → $e_n^A = q_n^A$
- $P_n^A = P_{n-1}^A$: 물량 변화만 반영 → $e_n^A = q_n^A - q_{n-1}^A$
- $P_n^A > P_{n-1}^A$ (매도호가가 올라감): 기존 물량 전량 소진 → $e_n^A = -q_{n-1}^A$
하나의 식으로 합치면:
\[e_n^A = \mathbf{1}_{\{P_n^A \leq P_{n-1}^A\}} \cdot q_n^A - \mathbf{1}_{\{P_n^A \geq P_{n-1}^A\}} \cdot q_{n-1}^A \tag{4}\]이벤트별 OFI는 매수 쪽 기여에서 매도 쪽 기여를 뺀 값입니다:
\[\text{e}_n = e_n^B - e_n^A \tag{5}\]일정 시간 구간 $[t, t+\Delta t]$ 동안 발생한 $N$개 이벤트에 대해 집계하면:
\[\text{OFI}_t = \sum_{k=1}^{N} \text{e}_{n_k} \tag{6}\]이것이 실제로 사용하는 OFI입니다. $L$, $C$, $M$을 구분할 필요 없이, 호가 스냅샷의 가격과 수량 변화만 추적하면 됩니다.
EWMS 적용
이전 글에서 설명드렸듯이, EWMS를 활용하면 합 형태의 피쳐를 메모리 $O(1)$로 계산할 수 있습니다. 식 $(6)$의 단순합 대신, 과거 이벤트에 지수 감쇠를 적용한 가중합입니다. 불규칙 간격의 틱데이터를 다루는 일반적인 경우의 업데이트 순서는 다음과 같습니다:
\[\begin{aligned} &1.\quad \lambda_t = 2^{-\Delta t / h} \\ &2.\quad \overline{\text{OFI}}_t = e_t + \lambda_t \cdot \overline{\text{OFI}}_{t-1} \end{aligned}\]$e_t$는 식 $(5)$의 이벤트별 값이고, $h$는 반감기입니다. $\Delta t$가 작으면 $\lambda_t$는 1에 가까워 직전 누적값이 거의 유지되고, $\Delta t$가 크면 $\lambda_t$는 0에 가까워 과거 누적이 크게 감쇠됩니다.
두 경우 확인
이전에 $e_n^B = q_n^B$ ($P_n^B > P_{n-1}^B$)에서 슬쩍 넘어간 부분을 확인해 봅시다. 매수호가가 올라가는 경우는 두 가지가 있습니다.
경우 1: 빈 호가에 bid 주문을 낸 경우
스프레드 안쪽 빈 가격에 지정가 매수를 제출한 것입니다. 매도 쪽은 변화가 없습니다.
- $e_n^B = q_n^B$ (신규 매수 유입)
- $P_n^A = P_{n-1}^A$, $q_n^A = q_{n-1}^A$ → $e_n^A = 0$
매수 압력만 반영됩니다.
경우 2: 매도 호가를 전부 체결시키며 최우선 매수호가를 갱신한 경우
공격적인 매수 시장가가 들어와서 기존 ask 물량을 전부 소진시킨 것입니다. 매도호가가 올라갑니다.
- $e_n^B = q_n^B$ (신규 매수 유입)
- $P_n^A > P_{n-1}^A$ → $e_n^A = -q_{n-1}^A$ (기존 매도 물량 전량 소멸)
매수 유입과 매도 소멸이 합산되어 경우 1보다 훨씬 큰 값이 나옵니다. 더 강한 매수 압력이 더 큰 OFI로 표현되는 것입니다.
결론
시장 미시구조의 대표적인 피쳐 중 하나인 OFI에 대해 알아봤습니다. OFI는 체결, 취소, 주문 제출에 대한 정보를 포함하고 있는 피쳐입니다.
단점도 있습니다. 체결과 취소는 각각 고유한 정보인데 OFI에서는 합쳐져 있습니다. 그런데 체결 정보는 모든 거래소가 제공해 주지만, 취소 주문은 그렇지 않습니다. 다만 호가창 변화와 체결 내역을 대조하면 얼추 취소 주문을 골라낼 수 있습니다.
취소 주문도 골라내야 되고, 체결 내역도 봐야 되고, OFI도 봐야 되고, 그리고 식 $(6)$을 보면 타임 프레임이 있습니다. 어떤 $N$의, 다시 말해 얼만큼 누적시킨 OFI가 어떤 $T$에 대해, 다시 말해 얼만큼의 타임 프레임의 가격 변화에 효과적인지는 데이터 분석을 해봐야 알 수 있습니다.
컴퓨팅 파워도 중요하고, 가진 자원을 효율적으로 잘 사용할 수 있도록 만드는 개발자로서의 능력도 중요한 것 같습니다.
다음 글에서는 OBI, Microprice, TFI 등 기본적인 시장 미시구조 피쳐들을 빠르게 훑어봅니다: 기본 피쳐 — OBI, Microprice, TFI
