BJF TRADING GROUP · SHARPTRADER OPTIMIZER
공개된 대부분의 레이턴시 차익거래 백테스트는 문서상으로는 놀라울 정도로 좋아 보이지만, 라이브로 전환되는 순간 무너집니다. 이유는 전략 로직이 나빠서가 아닙니다 — 표준 리테일 백테스터가 조용히 지연 없는 체결을 가정하기 때문입니다. 이 가이드는 밀리초 단위의 실행 시간이 계산을 정확히 어떻게 바꾸는지, 그리고 실제로 거래 가능한 결과를 만들기 위해 백테스트가 무엇을 모델링해야 하는지 설명합니다.
레이턴시 차익거래의 수익성은 50–200밀리초 창 안에 존재합니다. 빠른 피드와 느린 브로커 사이의 가격 불일치가, 느린 브로커의 호가가 업데이트되기 전까지 일반적으로 열려 있는 시간이 바로 이 정도입니다. 만약 실제 왕복 실행 시간 — 신호 감지부터 체결 확인까지 — 이 이 창의 대부분을 소비한다면, 남는 여유는 거의 없습니다. 표준 리테일 백테스터는 주문이 표시 가격에 즉시 체결된다고 가정하며, 이 문제 전체를 시뮬레이션에서 삭제합니다. 결과는 돈을 찍어내는 것처럼 보이는 백테스트와, 스프레드 이후 매 거래마다 손실을 내는 라이브 운용입니다.
이 글은 그 격차를 수치화하고, 밀리초가 실제로 어디에서 소모되는지 분해하며, 라이브 계좌에서 보게 될 숫자와 맞는 결과를 만들기 위해 백테스트 안에서 실행 시간을 어떻게 모델링해야 하는지 설명합니다.
보기: 실행 시간이 레이턴시 차익거래 백테스트를 어떻게 바꾸는지 — 동일한 전략을 0 ms, 50 ms, 150 ms 실행 레이턴시에서 틱 단위로 살펴봅니다.
레이턴시 차익거래 시스템에서 전략은 두 개의 가격 피드를 비교합니다 — 빠른 피드(일반적으로 Tier-1 애그리게이터 또는 LP 피드)와 느린 피드(거래 상대가 되는 브로커)입니다. 빠른 피드가 스프레드와 설정된 임계값을 더한 것보다 더 크게 느린 피드를 앞서면, 전략은 느린 쪽에 주문을 보내고 느린 가격이 수렴할 것으로 기대합니다.
기회는 두 가격이 어긋나 있는 동안에만 존재합니다. 브로커의 호가 엔진이 따라잡는 순간 — 보통 50~200밀리초 이내 — 엣지는 사라집니다. 주문은 그 일이 일어나기 전에 시장에 들어가 있어야 합니다.
이 맥락에서 “실행 시간”은 하나의 숫자가 아닙니다. 여러 레이턴시가 쌓인 구조이며, 각각이 몇 밀리초씩 기여합니다:
브로커와 다른 데이터센터의 표준 VPS에서 실행되는 전략의 경우, 현실적인 왕복 시간은 80–100ms 아래로 내려가는 일이 드뭅니다. 브로커와 코로케이션되어 cross-connect로 연결된 전략은 1–5ms까지 떨어질 수 있습니다. 이 한 자릿수 규모의 차이가 전부입니다.
깔끔한 신호를 상상해 보세요. 빠른 피드가 1.5핍 뛰었습니다. 느린 브로커는 아직 업데이트하지 않았습니다. 평균적으로 느린 브로커의 호가 엔진이 새 가격을 반영하기까지 80~150밀리초 정도가 있습니다. 그 창 안에서 두 가지 일이 동시에 일어납니다:
왕복 시간이 50ms를 소모하면, 가격 차이가 아직 ~70% 남아 있을 때 도착하여 대부분을 포착합니다. 왕복 시간이 150ms를 소모하면, 가격 차이는 이미 ~10%까지 붕괴한 뒤이고 — 스프레드 + 슬리피지 이후에는 손실일 가능성이 높습니다.
왕복 레이턴시와 차익거래 PnL의 관계는 선형이 아닙니다. 실행 창 아래에서는 수익성이 높고 안정적입니다. 그 위에서는 수익성이 0 또는 음수로 붕괴합니다. 대부분의 리테일 트레이더는 이 절벽의 잘못된 쪽에 서 있지만, 백테스트가 그것을 숨기기 때문에 알지 못합니다.
아래는 동일한 이론적 1.5핍 엣지의 레이턴시 차익거래 신호를 네 가지 서로 다른 왕복 실행 레이턴시에서 시뮬레이션한 것입니다. 아래 숫자는 정상 유동성과 0.6–0.9핍 스프레드가 있는 런던 세션의 EUR/USD에서 일반적으로 볼 수 있는 수준입니다.
| 왕복 실행 | 포착한 엣지 | 진입 시 슬리피지 | 거래당 순 PnL | 판정 |
|---|---|---|---|---|
| ~5ms (코로케이션) | 신호의 ~95% | 0.0–0.2 pip | +0.6 to +1.0 pip | 수익성 있음 |
| ~50ms (가까운 VPS) | 신호의 ~70% | 0.2–0.5 pip | +0.2 to +0.6 pip | 수익성 있음, 더 얇음 |
| ~120ms (중간 거리) | 신호의 ~30% | 0.5–1.0 pip | −0.3 to +0.1 pip | 한계적 / 손실 가능 |
| ~200ms (장거리) | 신호의 ~10% | 1.0–1.8 pip | −1.0 to −0.5 pip | 매 거래 손실 |
패턴을 보세요. 5ms에서 50ms로 갈 때 수익성은 완만하게 떨어집니다. 50ms에서 120ms로 갈 때는 절벽처럼 떨어집니다. 150ms를 넘으면 전략은 비용 이후 기대값이 음수인 동전 던지기가 됩니다. 이 절벽은 즉시 체결을 가정하는 백테스터에는 보이지 않습니다.
표준 리테일 백테스터는 추세추종 및 지표 기반 시스템을 위해 만들어졌습니다 — 보유 기간이 몇 분에서 며칠이고, 몇 초의 실행 슬리피지는 반올림 오차에 불과한 전략입니다. 그 구조도 이를 반영합니다:
몇 시간 동안 포지션을 보유하는 전략에서는 이것이 괜찮습니다 — 이러한 단순화의 비용은 PnL의 1%보다 훨씬 낮습니다. 하지만 거래당 1–3핍을 벌고 100ms 창 안에서 성패가 갈리는 레이턴시 차익거래 전략에서는 이 단순화 하나하나가 치명적입니다:
100ms 가격 불일치는 M1 봉 안에서는 보이지 않습니다 — 봉은 OHLC를 보여줄 뿐, 봉 내부의 틱 스트림을 보여주지 않습니다. 봉 재생 백테스터는 레이턴시 차익거래 신호를 제대로 감지조차 할 수 없습니다.
주문이 전송되는 순간 표시 가격에 체결된다면, 50–200ms 실행 창 전체가 0으로 붕괴합니다. 백테스트는 매번 모든 신호의 100%를 포착합니다. 현실은 인프라에 따라 30%–95%를 포착합니다.
실제 차익거래 기회는 뉴스, 롤오버, 얇은 유동성 구간 주변에 몰립니다 — 바로 스프레드가 3–5배 확대되는 순간입니다. 고정 스프레드 백테스트는 실제 조건에서는 존재하지 않을 이익을 계산합니다.
레이턴시 차익거래는 포지션을 여는 만큼 빠르게 닫습니다. 표준 백테스터는 청산 측 슬리피지를 완전히 무시하거나 동일한 고정 스프레드를 적용하여 비현실적인 낙관을 두 배로 만듭니다.
라이브 브로커와의 접촉을 견디는 백테스트를 만들려면, 시뮬레이터가 왕복의 각 구간을 명시적으로 모델링해야 합니다. 진지한 레이턴시 차익거래 백테스트에 필요한 구성은 다음과 같습니다:
| 구성요소 | 일반적인 범위 | 의미 |
|---|---|---|
| 1. 신호-전송 레이턴시 | 0.5–20 ms | 트리거 틱을 받은 순간부터 주문을 내보내기까지의 시간. 언어, 코드 경로, CPU에 따라 달라집니다. 컴파일된 C++ <1ms; 고수준 스크립트 5–20ms. |
| 2. 네트워크 왕복 (출발) | 1–80 ms | 트레이딩 호스트에서 브로커까지의 전송 시간. 코로케이션 = 1–3ms; 같은 도시권 = 5–15ms; 지역 간 = 30–80ms. |
| 3. 브로커 매칭 레이턴시 | 3–100 ms | 브로커의 주문 관리 및 매칭 엔진 내부에서 소요되는 시간. Tier-1 ECN 브로커: 3–15ms. 표준 리테일 브로커: 30–100ms. 수동 처리가 있는 STP 브로커: 100ms+. |
| 4. 확인 왕복 (복귀) | 1–80 ms | 나가는 네트워크 구간을 반영합니다. 체결 확인을 받기 전까지는 체결 가격을 알 수 없습니다 — 리스크 관리와 청산 측 타이밍에 중요합니다. |
일반 VPS에서 표준 리테일 브로커를 통해 실행되는 전형적인 리테일 레이턴시 차익거래 배포의 경우, 네 구성요소는 대략 80–180ms로 합산됩니다 — 신호 포착률이 50% 아래로 떨어지는 위험 구간 한가운데입니다. 빠른 ECN 브로커를 통해 코로케이션 배포를 하면 같은 구성요소가 5–20ms로 합산됩니다 — 절벽보다 훨씬 아래입니다.
레이턴시 차익거래 전략의 정직한 백테스트라면 트레이더가 이러한 레이턴시를 설정하고 영향을 볼 수 있어야 합니다. SharpTrader Optimizer는 실행 레이턴시를 하나의 설정 가능한 파라미터(밀리초 단위)로 모델링하며, 실제 과거 틱 데이터 위에 시뮬레이션 시점의 각 주문에 적용합니다.
세 가지가 필요합니다. 각각은 필요조건이며, 어느 하나만으로는 충분하지 않습니다.
표준 리테일 백테스터는 봉 OHLC 값 사이를 보간하여 “틱” 데이터를 채웁니다. 이들이 만드는 합성 틱은 봉 안의 임의 지점에서 고가와 저가를 찍고, 시가와 종가 사이를 부드럽게 이동합니다. 실제 시장은 그렇게 움직이지 않습니다 — 점프합니다. 포착하려는 1.5핍 레이턴시 차익거래 신호는 바로 점프이며, 보간된 틱 데이터는 그것을 존재하지 않는 것으로 매끈하게 지워버립니다.
진지한 백테스트는 브로커의 매칭 엔진에서 실제로 기록된 bid/ask 틱(또는 런던 소스 기관 데이터와 같은 깨끗한 기준 피드)을 재생합니다. 모든 틱에는 타임스탬프, bid, ask가 있습니다. 전략은 라이브 배포에서 보게 되는 것과 같은 순서, 같은 타이밍으로 그것들을 봅니다.
트레이더는 라이브에서 예상하는 왕복 실행 시간 T(밀리초 단위)를 설정합니다. 전략이 주문을 내보내면, 시뮬레이터는 요청 구간만큼 시간을 진행시킵니다 — 일반적으로 T/2입니다. 체결 가격에 영향을 주는 것은 신호와 브로커 측 매칭 사이의 시간뿐이고, 응답 구간은 이미 일어난 일을 전략에 알려줄 뿐이기 때문입니다. T = 80ms라면, 시뮬레이터는 신호 후 40ms의 틱 스트림을 보고, 신호를 발생시킨 틱이 아니라 그 틱의 bid/ask를 체결 가격으로 사용합니다.
이 한 가지 변화 — 신호와 체결 사이에서 시간을 진행시키는 것 — 가 현실적인 레이턴시에서 절벽을 재현합니다. 또한 백테스트를 결정론적으로 만듭니다. 같은 틱 스트림에서 같은 전략을 T = 50ms와 T = 150ms로 실행하면 측정 가능한 차이가 있는 결과가 나오며, 트레이더는 전략이 정확히 어디에서 작동을 멈추는지 볼 수 있습니다.
각 체결에서 실현된 슬리피지는 틱 워크가 만들어낸 것입니다 — 이는 시뮬레이션의 출력이지, 트레이더가 추측해야 하는 숫자가 아닙니다. 일부 체결은 유리하게 들어가고(양의 슬리피지), 일부는 더 나쁘게 들어가며(음의 슬리피지), 그 크기는 해당 밀리초 동안의 실제 틱 변동성을 따릅니다. 이것이 모든 표준 리테일 백테스터에 빠져 있는 현실적인 분포입니다.
레이턴시 차익거래는 여는 만큼 빠르게 닫습니다. 청산은 진입 후 200–800ms에, 수렴 중인 가격을 향해 일어납니다. 시뮬레이터가 진입과 청산에 동일한 고정 스프레드를 적용하면 두 가지를 놓칩니다: (1) 레이턴시 창에서 발생하는 진입 슬리피지, (2) 청산 측 왕복 동안 가격이 되돌아오며 생기는 청산 슬리피지입니다. 실제 모델은 오픈과 클로즈의 실행 시간을 독립적으로 설정할 수 있게 하며 — 청산이 진입보다 더 느린 라우팅 경로를 거치는 일이 많은 실제 브로커 행동을 반영합니다 — 각 구간의 슬리피지를 틱 스트림에서 자동으로 계산합니다.
다음은 동일한 파라미터를 사용하되 세 가지 다른 실행 레이턴시 설정으로, 30일간의 EUR/USD 틱 데이터에 대해 백테스트한 SharpTrader 레이턴시 차익거래 전략의 대표적인 결과입니다. 이 숫자는 BJF Feed (London / Tokyo / NY) 백테스트에서 일반적으로 보는 수준입니다.
| 지표 | 0ms (허구) | 50ms (가까운 VPS) | 150ms (장거리) |
|---|---|---|---|
| 발생한 신호 | 2,847 | 2,847 | 2,847 |
| 엣지에서 체결된 신호 | 2,847 (100%) | 1,983 (70%) | 854 (30%) |
| 평균 포착 핍 | 1.42 | 0.98 | 0.21 |
| 진입 시 실현 슬리피지 (틱 워크 출력) | 0.0 pip | 0.3 pip | 0.9 pip |
| 거래당 순 PnL | +0.82 pip | +0.48 pip | −0.31 pip |
| 월간 수익률 (1 lot) | +233% | +137% | −88% |
0ms 열은 표준 도구가 만들어내는 “백테스트 환상”입니다. 50ms 열은 잘 배포된 레이턴시 차익거래 전략이 실제로 어떻게 보이는지를 보여줍니다. 150ms 열은 대부분의 리테일 트레이더가 일반 VPS에 전략을 올리고 표준 브로커를 통해 거래하면서, 자신의 왕복 시간이 절벽의 어디에 있는지 모른 채 실수로 실행하는 것입니다.
같은 전략도 매우 수익성이 높을 수도, 간신히 수익성이 있을 수도, 보장된 손실일 수도 있습니다 — 표준 백테스터가 모델링하지 않는 단 하나의 숫자에만 의존해서 말입니다.
실행 레이턴시는 리테일 레이턴시 차익거래 백테스트에서 가장 덜 모델링되는 변수이지만, 유일한 변수는 아닙니다. 신뢰할 수 있는 백테스트는 세 가지를 결합하며, 각각이 다른 요소를 강화합니다:
절벽을 드러냅니다. 전략이 실제로 수익을 내기 위해 어떤 인프라가 필요한지, 그리고 어느 지점에서 엣지가 사라지는지 알려줍니다.
차익거래 기회가 정확히 스프레드가 확대되는 순간에 몰린다는 사실을 포착합니다. 고정 스프레드 백테스트는 그 순간 물리적으로 존재할 수 없는 이익을 계산합니다.
최적화기가 인샘플 기간의 노이즈에 맞는 파라미터 세트를 찾았기 때문에 인샘플에서 좋아 보이는 전략을 잡아냅니다. 워크포워드가 없으면 백테스트는 과거를 돌아본 이력서일 뿐입니다.
레이턴시 차익거래에는 두 번의 슬리피지 이벤트가 있습니다 — 오픈과 클로즈입니다. 대부분의 백테스트는 하나만(또는 전혀) 모델링하고 낙관을 두 배로 만듭니다.
네 가지가 모두 갖춰지면, 백테스트는 마케팅 도구가 아니라 예측 도구가 됩니다. 그것이 만드는 숫자는 라이브 결과와 50–200%씩 벌어지는 것을 멈추고 10–20% 범위 안에 들어오기 시작합니다 — 리스크 크기, 자본 배분, 브로커 선택 결정을 실제로 백테스트에 기반해 내릴 수 있을 만큼 충분히 가깝습니다.
업계 경험칙: 라이브 드로다운은 백테스트 드로다운의 1.5x에서 2x가 될 것으로 예상하십시오. 표준 백테스터에서 실행되는 레이턴시 차익거래 전략의 경우, 그 비율은 5x에서 10x에 더 가깝습니다 — 백테스트가 실행 레이턴시, 가변 스프레드, 양쪽 구간 슬리피지를 모델링하지 않았기 때문입니다. 이 요소들이 들어가면 1.5–2x 규칙이 적용됩니다. 들어가기 전에는 백테스트에 예측 가치가 전혀 없습니다.
최소 세 가지 레이턴시 설정에서 최적화를 실행하십시오: 10ms(최선의 코로케이션), 50ms(가까운 VPS), 150ms(일반 VPS, 먼 브로커). 전략이 10ms에서만 수익성이 있다면, 배포 문제가 있는 것입니다 — 거래하기 전에 코로케이션 계획이 필요합니다. 50ms에서는 수익성이 있지만 150ms에서는 그렇지 않다면, VPS 선택과 브로커 선택이 게임의 전부가 됩니다.
세 단계입니다: (1) 트레이딩 호스트에서 브로커의 주문 입력 엔드포인트로 ping을 보내십시오 — 원시 네트워크 왕복 시간을 제공합니다; (2) 조용한 시간대에 작은 테스트 주문을 보내고 신호 발행 시점과 체결 확인 시점을 타임스탬프하십시오 — 차이에는 브로커 매칭 레이턴시가 포함됩니다; (3) 여러 세션에 걸쳐 반복하십시오 — 레이턴시는 브로커 부하, 시간대, 경로에 따라 달라집니다. 배포에 대한 현실적인 수치는 최고의 ping이 아니라 많은 측정값의 중앙값입니다.
예 — 더 좁은 창으로 적용됩니다. 뉴스 트레이딩 창은 10–50ms 폭일 수 있습니다. 실행 시간 격차 문제는 동일하며, 더 작은 창에 압축되어 있을 뿐입니다. 동일한 백테스트 인프라(실제 틱, 설정 가능한 실행 레이턴시, 가변 스프레드)가 필요하고, 레이턴시 허용 범위는 훨씬 더 엄격합니다.
두 현상은 같은 원인을 가집니다: 유동성 공급자가 가격에 대해 불확실해지고 호가를 거둬들이기 때문입니다. 빠른 피드가 점프하면, 느린 브로커에 유동성을 공급하는 LP들은 역이용당하는 것을 막기 위해 잠시 호가를 넓힙니다. 따라서 가격 차이가 열리는 순간은 그것을 포착하기 위한 스프레드도 넓어지는 순간입니다. 고정 스프레드 백테스트는 이를 보지 못하고 순 엣지를 30–50% 과대평가합니다.
Tier-1 ECN 브로커를 상대로 하는 기관형 레이턴시 차익거래의 경우, 그렇습니다 — 경쟁 무대는 왕복 sub-5ms로 이동했고, 이는 cross-connect 또는 proximity hosting을 필요로 합니다. 더 느린 리테일 브로커를 상대로 하는 리테일형 레이턴시 차익거래의 경우, 아닙니다 — 느린 브로커의 창이 더 넓기 때문에 30–80ms 왕복도 여전히 엣지를 만들 수 있습니다. 올바른 질문은 “코로케이션이 필요한가”가 아니라 “내 왕복 시간이 내가 거래하는 브로커의 창 안에 들어가는가”입니다. 실행 레이턴시를 인식하는 백테스팅이 바로 그 질문에 답합니다.
몇 시간 또는 며칠 동안 포지션을 보유하는 추세추종 전략에서는 수백 밀리초의 실행 레이턴시가 반올림 오차입니다. 레이턴시 차익거래에서는 그 같은 밀리초가 곧 전체 신호입니다. 일반 외환 백테스팅 인프라는 전자의 경우를 위해 설계되었고, 후자에는 조용히 쓸모없는 결과를 만들어냅니다. 그래서 전용 차익거래 백테스팅 도구가 별도 카테고리로 존재합니다.
그것들은 최적 전략을 바꾸지, 분석 자체를 바꾸지는 않습니다. 안티-아비트라지 플러그인(지연 실행, last-look, 수익 시 requote, hold-then-fill)을 운영하는 브로커는 자연적인 레이턴시 위에 인위적인 실행 레이턴시를 효과적으로 추가합니다. 설정 가능한 실행 레이턴시가 있는 백테스트는 브로커의 안티-아비트라지 행동을 시뮬레이션하고, 해당 브로커를 상대로 전략이 여전히 유효한지 — 또는 거래 장소를 바꿔야 하는지 — 판단하게 해줍니다.
5–8개 파라미터를 가진 레이턴시 차익거래 전략의 경우, 일반적인 그리드는 30,000–100,000개 조합입니다 — 여기에는 스윕하는 차원 중 하나로 3–5개의 실행 시간 설정이 포함됩니다. 핵심은 수익성 클러스터를 찾는 것입니다 — 단일 “운 좋은” 스파이크가 아니라, 여러 파라미터 값 전반에서 전략이 수익성을 보이는 범위입니다. 단일 피크는 커브피팅이고, 클러스터는 견고성입니다. 일반적인 리테일 워크스테이션을 현실적인 기준으로 삼으면, 4코어 CPU에서 1주일치 XAUUSD 틱 데이터에 대해 30,000개 조합 그리드는 대략 12시간에 완료됩니다. 같은 그리드는 16코어에서 약 3시간이 걸립니다. SharpTrader Optimizer는 멀티코어 하드웨어에서 실행당 100,000개 이상의 조합을 처리합니다.
이는 기관 알고리즘 트레이딩 전반의 경험적 관찰입니다: 잘 모델링된 백테스트조차도 브로커 거부, 주말 갭, 레짐 변화 같은 일부 현실 세계 마찰을 깔끔하게 모델링할 수 없기 때문에 라이브 드로다운을 대략 50–100% 과소평가합니다. 이 규칙은 백테스트가 이미 현실적인 실행 레이턴시, 가변 스프레드, 양쪽 구간 슬리피지를 포함하고 있음을 전제로 합니다. 이들이 빠져 있다면, 배수는 훨씬 더 큽니다 — 레이턴시 차익거래에서는 구체적으로 5x에서 10x입니다.
개념적으로 동일합니다. 암호화폐 거래소 간 차익거래의 실행 시간 창은 일반적으로 200ms–2s입니다(거래소들이 더 멀리 떨어져 있고 오더북은 더 깊지만 업데이트가 느리기 때문에 외환보다 느립니다). 동일한 세 가지 요소 — 틱 재생, 설정 가능한 실행 레이턴시, 가변 스프레드 — 가 정직한 백테스트를 만듭니다. BJF의 crypto arbitrage 도구는 거래소 API와 오더북 깊이에 맞게 조정된 동일한 아키텍처를 사용합니다.
SharpTrader Optimizer는 설정 가능한 실행 시간, 실제 틱 재생, 틱별 가변 스프레드, 양쪽 구간의 틱 해상도 슬리피지를 모델링하는 유일한 리테일 접근 가능 백테스터입니다 — 레이턴시 차익거래 전략이 실제인지 허구인지 결정하는 네 가지 변수입니다. 100,000개 이상의 파라미터 조합에 대한 멀티코어 그리드 최적화는 며칠이 아니라 몇 시간 안에 완료됩니다.