BEQI: 오픈소스 외환 브로커 체결 품질 감사 툴킷 5월 4, 2026 – Posted in: Arbitrage Software
BEQI: 모든 외환 브로커의 체결 품질을 감사하는 오픈소스 툴킷
리테일 외환 브로커는 체결 품질 데이터를 공개하지 않습니다. 매칭 레이턴시, 슬리피지 비대칭, 스프레드 확대, 라스트 룩 보류 시간에 대한 공개 벤치마크는 존재하지 않습니다. 우리는 이를 바꾸고자 합니다. BEQI(Broker Execution Quality Index, 브로커 체결 품질 지수)는 공개 방법론이자 공개 Python 툴킷이며, 누구나 기여할 수 있는 공개 스프레드시트입니다. 30분 만에 자신의 브로커를 측정하세요. 데이터가 쌓여 벤치마크가 됩니다.
왜 지금까지 공개 브로커 감사가 없었는가
리테일 외환 체결은 트레이딩 스택에서 가장 불투명한 계층입니다. 스프레드는 광고됩니다. 수수료는 공개됩니다. 그러나 주문 전송부터 체결 확인까지의 모든 것 — 매칭 레이턴시, 슬리피지 대칭성, 라스트 룩 보류, 리쿼트 빈도, 신호 시점의 스프레드 확대 — 은 트레이더에게 보이지 않으며 브로커도 공개하지 않습니다. 전략 백테스트는 레이턴시 0의 체결을 가정합니다(이 문제는 레이턴시 아비트리지 백테스트가 실전에서 살아남지 못하는 이유에서 자세히 다루었습니다). 브로커 리뷰는 UX와 출금을 기준으로 점수를 매깁니다. 전략이 실전에서 살아남을지를 실제로 결정하는 변수는 아무도 측정하지 않습니다.
BEQI는 한 가지 구체적인 문제를 해결합니다. 리테일 외환 체결 품질에 대한 공개 방법론도, 공유 툴킷도, 벤치마크 데이터셋도 없다는 문제입니다. BJF Trading Group은 SharpTrader Pro와 SharpTrader Optimizer에 브로커별 방언 지원을 구축하기 위해 수년간 내부적으로 이를 측정해 왔습니다. 이제 그 방법론과 코드를 오픈소스로 공개합니다.
목적은 브로커 이름을 밝힌 순위표를 발표하는 것이 아닙니다(그것은 법적 지뢰밭이며 데이터의 신뢰성을 훼손할 것입니다). 목적은 모든 트레이더, 퀀트, 브로커 기술 연구자에게 동일한 표준화된 측정 방법, 동일한 Python 스크립트, 그리고 익명화된 결과를 올릴 공개 장소를 제공하는 것입니다. 몇 달이 지나면 스프레드시트는 벤치마크가 됩니다. 누구나 방법론을 재현하고, 반박하고, 확장할 수 있습니다.
한 문장으로 요약한 BEQI의 핵심 주장
1만 명의 트레이더가 동일한 공개 방법론으로 브로커의 체결 품질을 측정한다면, 그 결과는 어떤 개별 브로커도 부인할 수 없고, 어떤 리뷰 사이트도 조작할 수 없으며, 모든 전략 개발자가 제대로 알고 자본을 배분하는 데 활용할 수 있는 공개 벤치마크가 됩니다.
BEQI의 5가지 측정 항목
체결 품질은 단일 숫자가 아닙니다. BEQI는 이를 서로 독립적인 5가지 항목으로 분해하며, 각 항목은 거래 내역서로(그중 두 항목은 내역서와 짝을 이루는 틱 스트림으로) 독립적으로 측정할 수 있습니다.
| BEQI 항목 | 측정 대상 | 단위 | 데이터 출처 | 좋은 방향 |
|---|---|---|---|---|
| 1. 매칭 레이턴시 | 주문 전송부터 체결 확인까지의 중앙값 시간 | 밀리초 | 내역서 타임스탬프 + 전송 시각 로그 | 낮을수록 |
| 2. 슬리피지 비대칭 | 플러스 슬리피지 체결 대비 마이너스 슬리피지 체결의 비율 | 비율 (1.0 = 대칭, >1.0 = 트레이더에게 불리) | 내역서: 요청 가격 대 체결 가격 | 1.0에 가까울수록 |
| 3. 스프레드 확대 계수 | 기준 대비 신호 시점의 스프레드 확대 | 배수 (1.0 = 확대 없음, 3.0 = 3배 확대) | 주문 타임스탬프 전후의 틱 스트림 | 1.0에 가까울수록 |
| 4. 라스트 룩 보류 시간 | 매칭 타임스탬프와 확인 사이의 중앙값 지연 | 밀리초 | FIX 로그 또는 확장 내역서 | 낮을수록 / 0 |
| 5. 리쿼트율 | 주문 100건당 리쿼트 수 | 100건당 횟수 | 내역서의 리쿼트 이벤트 | 낮을수록 / 0 |
각 항목은 독립적으로 의미가 있습니다. 브로커는 매칭 레이턴시가 낮으면서 슬리피지 비대칭이 높을 수도 있고, 그 반대일 수도 있습니다. 이 조합들은 브로커가 실제로 어떻게 행동하는지에 대해 서로 다른 이야기를 들려줍니다. 툴킷은 각 항목을 개별적으로 보고하고 마지막에 가중 종합 BEQI 점수를 보고합니다.
내 브로커 감사 실행 방법 (30분)
필요한 것은 세 가지입니다. (a) 최소 1주일의 거래 기간을 포괄하고 체결이 200건 이상인 거래 내역서, (b) 아무 컴퓨터에나 설치된 Python 3.10+, (c) 30분. 나머지는 툴킷이 처리합니다.
1단계 — 내역서 내보내기
툴킷은 세 가지 입력 형식을 지원합니다.
- 일반 터미널 HTML 내역서(리테일 거래 플랫폼의 ‘보고서로 저장’ 기능으로 저장) — 대부분의 리테일 트레이더가 이 형식을 사용하게 됩니다
- FIX 로그(FIX 4.4 메시지 덤프) — FIX 브리지 또는 기관용 연결을 통해 거래하는 트레이더용
order_id, send_time, fill_time, requested_price, filled_price, side, volume열이 있는 CSV — 사용자 정의 로그를 포함한 그 밖의 모든 경우
플랫폼이 전송 시각(전략이 주문 전송을 결정한 순간)을 제공하지 않더라도, 기본 내역서만으로 항목 2와 5(슬리피지 비대칭과 리쿼트율)는 측정할 수 있습니다. 항목 1, 3, 4에는 더 풍부한 로그가 필요합니다.
2단계 — 설치 및 실행
$ cd forex-broker-audit-toolkit
$ pip install -r requirements.txt
$ python beqi.py –input my_statement.html –tick-data eurusd_ticks.csv –output report.json
툴킷은 입력 형식을 자동으로 감지합니다. beqi.py는 항목별 분석기로 작업을 분배하고, 요약을 출력하며, 공개 스프레드시트에 제출할 수 있는 JSON 보고서를 작성합니다.
3단계 — 보고서 검토
보고서에는 5가지 항목 점수, 종합 BEQI, 표본 크기 진단(N이 작을수록 신뢰도 낮음), 그리고 등급 분류(1~4, 아래 참조)가 포함됩니다. 신뢰 구간을 좁히려면 더 많은 데이터로 실행하세요.
기본값은 익명
툴킷은 계좌 번호, 계좌 잔고, 손익(P&L), 포지션 크기를 전혀 보지 않습니다. 타임스탬프, 가격, 요청 대비 체결 차이, 이벤트 유형만 사용합니다. 출력 JSON에는 BEQI 점수, 표본 크기, 대상 통화쌍, 기간만 포함되며 신원을 식별할 수 있는 정보는 없습니다. 공개 스프레드시트에 익명으로 제출할 수 있습니다.
결과 해석: BEQI의 4가지 등급
SharpTrader Pro가 지원하는 브로커들을 대상으로 한 내부 측정을 바탕으로 한 경험적 등급입니다. 이는 출발점이 되는 기준값이며, 공개 스프레드시트를 통해 시간이 지나면서 정교해질 것입니다.
1등급 · 기관용 ECN
BEQI 85–100
- 매칭 레이턴시: 5–15 ms
- 슬리피지 비대칭: 1.0–1.05
- 스프레드 확대: 1.0–1.3x
- 라스트 룩: 0–5 ms
- 리쿼트율: <0.5 / 100
2등급 · 고속 리테일 / 고속 브리지
BEQI 65–85
- 매칭 레이턴시: 30–80 ms
- 슬리피지 비대칭: 1.05–1.20
- 스프레드 확대: 1.3–2.0x
- 라스트 룩: 50–150 ms
- 리쿼트율: 0.5–2 / 100
3등급 · 일반 리테일
BEQI 40–65
- 매칭 레이턴시: 80–200 ms
- 슬리피지 비대칭: 1.20–1.50
- 스프레드 확대: 2.0–3.5x
- 라스트 룩: 200–500 ms
- 리쿼트율: 2–5 / 100
4등급 · 문제 있음
BEQI 0–40
- 매칭 레이턴시: 200+ ms
- 슬리피지 비대칭: 1.50+
- 스프레드 확대: 3.5x+
- 라스트 룩: 500+ ms
- 리쿼트율: 5+ / 100
등급 분류가 중요한 이유는 동일한 거래 전략이라도 등급에 따라 실전 결과가 크게 달라지기 때문입니다. 1등급에서 수익을 내는 레이턴시 아비트리지 전략은 3등급에서 무너집니다. 몇 시간씩 포지션을 보유하는 추세 추종 전략은 1등급과 3등급 사이에서 큰 차이가 없지만 4등급에서는 눈에 띄게 손해를 봅니다. 자본을 투입하기 전에 브로커의 등급을 아는 것이 전부입니다.
공개 BEQI 스프레드시트
스프레드시트는 장기적인 자산입니다. 누구나 감사 1건당 한 행을 기여할 수 있습니다. 각 행에는 5가지 항목 점수, 종합 점수, 표본 크기, 대상 통화쌍, 기간, 그리고 (선택 사항으로, 자발적으로) 브로커 이름이 포함됩니다. 우리는 브로커 이름을 비워 둔 익명 제출을 예상하며 환영합니다. 시간이 지나면 이러한 제출도 리테일 외환 업계 전반의 체결 품질에 대한 유용한 집계 분포를 만들어 냅니다.
새 탭에서 열기 →
제출 방법: 툴킷을 실행하고 JSON 출력을 복사하여 제출 양식(시트 안의 링크)에 붙여 넣으세요. 새 행은 타당성 검토를 거쳐 24시간 이내에 승인됩니다. 제출된 점수는 수정하지 않으며, 표본 크기가 <100건 체결인 행은 저신뢰로 표시할 수 있습니다.
방법론 세부 사항 (검토자 및 재현자용)
전체 수학적 명세는 저장소의 METHODOLOGY.md에 있으며, 핵심 결정 사항은 다음과 같습니다.
1. 매칭 레이턴시
fill_time − send_time의 평균이 아닌 중앙값입니다. 매칭 레이턴시 분포는 전형적인 체결을 대표하지 않는 간헐적인 1–5초 이상치(네트워크 재라우팅, 브로커 GC 일시 정지)로 인해 오른쪽으로 치우치기 때문에 중앙값을 사용합니다. 꼬리 부분을 확인할 수 있도록 중앙값, p90, p99를 각각 보고합니다.
2. 슬리피지 비대칭
각 체결의 슬리피지에는 부호가 붙습니다. 플러스는 트레이더가 요청보다 좋은 가격을 받았다는 뜻이고, 마이너스는 나쁜 가격을 받았다는 뜻입니다. 비대칭 = (마이너스 슬리피지 이벤트 수) / (플러스 슬리피지 이벤트 수). 대칭적이고 중립적인 브로커는 약 1.0입니다. 1.2를 넘으면 라우팅 규칙, 선택적 라스트 룩, 또는 비대칭 슬리피지 엔진에 의해 브로커의 매칭이 트레이더에게 불리하게 편향되어 있음을 나타냅니다.
3. 스프레드 확대 계수
각 주문 타임스탬프에 대해, 주문을 중심으로 한 50 ms 창의 스프레드와 직전 1주일간 같은 시간대를 중심으로 한 5분 기준 창의 스프레드를 비교합니다. 그 비율이 확대 계수입니다. 이를 위해서는 감사 기간을 포괄하는 틱 스트림이 필요하며, 툴킷은 BJF Feed CSV와 일반 플랫폼의 표준 틱 히스토리 형식을 지원합니다.
4. 라스트 룩 보류 시간
매칭 후 대기 상태와 확인 상태를 모두 제공하는 FIX 로그 또는 확장 내역서에서만 측정할 수 있습니다. 일반 리테일 HTML 내역서는 보통 이를 제공하지 않으며, 이 경우 툴킷은 이 항목을 null로 보고하고 종합 BEQI는 나머지 4개 항목으로 계산됩니다. 라스트 룩은 여러 브로커 측 체결 개입 기법 중 하나입니다. 더 넓은 범주는 7가지 브로커 안티 아비트리지 플러그인에 대한 심층 분석을 참고하세요.
5. 리쿼트율
내역서의 명시적인 리쿼트 이벤트로 계산합니다. 내역서에 리쿼트 표시가 없는 경우(일부 터미널은 표시하지 않음), 툴킷은 200 ms 창 내의 전송/취소/재전송 3연속을 감지하여 이를 추정합니다.
종합 BEQI
각 항목은 위의 등급 정의를 사용해 0–100의 하위 점수로 변환됩니다. 종합 점수는 가중 기하평균입니다. BEQI = (L^0.30 × A^0.25 × W^0.20 × H^0.15 × R^0.10) 여기서 L, A, W, H, R은 5가지 하위 점수입니다. 산술평균이 아닌 기하평균을 사용하는 이유는 어느 한 항목의 치명적인 점수(예: 라스트 룩 = 1500ms)가 다른 항목의 좋은 점수에 가려지지 않도록 하기 위해서입니다. 가중치는 논쟁의 여지가 있으므로 명시적으로 공개하며, 검토자는 원시 하위 점수로 다른 가중치를 적용해 다시 계산할 수 있습니다.
한계 및 고지 사항
- 표본 크기 의존성. 체결 50건의 감사는 느낌일 뿐이고, 500건은 측정이며, 5,000건은 벤치마크입니다. 툴킷은 표본 크기에 따른 신뢰 구간을 보고하므로, 독자는 N이 작은 제출에 그만큼 낮은 비중을 두어야 합니다.
- 시간대별 편차. 같은 브로커라도 런던 개장 시간에는 2등급, 아시아 롤오버 시간에는 3등급 결과를 보일 수 있습니다. 감사에는 시간대를 명시해야 합니다.
- 계좌별 차이. 브로커는 프로필, 잔고, 거래 패턴에 따라 계좌별로 다른 라우팅 로직을 적용할 수 있습니다. 한 트레이더의 감사 결과가 같은 명목상의 브로커를 사용하는 다른 트레이더에게 그대로 적용되지 않을 수 있습니다. 체결 감사와 별개로 브로커 선택에 관한 안내는 외환 아비트리지 브로커 가이드를 참고하세요.
- 비대칭이 악의를 증명하지는 않습니다. 1.4의 비대칭은 통계적으로 뚜렷한 신호이지만, 원인은 적극적인 조작이 아니라 비대칭적인 LP 풀을 통한 라우팅일 수 있습니다. 툴킷은 의도가 아니라 행동을 측정합니다.
- 방법론은 어딘가에서 틀릴 것입니다. 그래서 오픈소스입니다. 이슈를 제출하고, PR을 보내고, 대안 가중치를 제안하고, 우리가 다루지 않은 브로커로 재현해 보세요. 방법론 v2에는 가장 설득력 있는 비판이 반영될 것입니다.
로드맵
| 버전 | 제공 내용 | 일정 |
|---|---|---|
| v1.0 | 방법론 + Python 툴킷 + 공개 스프레드시트 (현재 단계) | Q2 2026 |
| v1.1 | FIX 로그 파서 개선, 명시적 타임스탬프가 없을 때 휴리스틱 패턴으로 라스트 룩 탐지 | Q3 2026 |
| v1.2 | AI 패턴 플래그 항목(6번째 항목): 적응형 스로틀 동작에 대한 탐지 기준 | Q3 2026 |
| v2.0 | beqi.bjftradinggroup.com의 실시간 공개 대시보드, 제출 데이터 전반의 집계 분포, 커뮤니티 피드백에 기반한 방법론 개정 |
Q4 2026 |
자주 묻는 질문
아닙니다. BEQI는 공개 방법론이자 익명화된 감사의 공개 데이터셋입니다. 이 데이터셋으로 브로커 순위표를 발표하지 않는 것은 의도적인 결정입니다. (a) 브로커가 체결 품질이 아니라 감사 신호에 맞춰 최적화하게 되어 데이터의 신뢰성이 훼손되고, (b) 법적 지뢰밭이기 때문입니다. 순위표를 발표하고 싶은 사람은 누구나 공개 데이터를 사용해 자유롭게 발표할 수 있습니다. 우리는 도구, 방법론, 측정값을 공개합니다.
대부분의 브로커 리뷰 사이트는 UX, 출금 속도, 고객 지원, 광고 스프레드 등 표면적인 변수로 점수를 매깁니다. 그 어느 곳도 매칭 레이턴시, 슬리피지 비대칭, 라스트 룩 보류를 측정하지 않습니다. BEQI는 바로 그 공백을 채웁니다. 일반적인 브로커 리뷰가 아니라 체결 품질 측정입니다.
툴킷이 이를 적절히 처리합니다. 입력 데이터로 측정할 수 없는 항목은 0이 아닌 null로 보고되며, 종합 BEQI는 측정 가능한 항목만으로 가중치를 재정규화하여 계산됩니다. 출력 JSON에는 어떤 항목이 왜 제외되었는지 명시되므로, 결과는 적용 범위에 대해 정직합니다.
데모 감사도 유용하지만 동등하지는 않습니다. 많은 브로커가 데모 계좌는 기관용 매칭 엔진(라스트 룩 없음, 스프레드 확대 없음, 빠른 레이턴시)으로, 실계좌는 리테일 엔진으로 라우팅합니다. 실제 행동을 측정하려면 항상 실제(소액) 거래량으로 실계좌를 감사하세요. 툴킷은 데모 데이터도 받아들이지만 JSON 출력에서 결과를 ‘demo’로 표시합니다.
체결 200건이 쓸 만한 신호를 얻기 위한 실질적인 최소치입니다. 500–1,000건이면 신뢰 구간이 충분히 좁아져 등급 분류를 자신 있게 판단할 수 있습니다. 5,000건을 넘으면 연구 수준의 측정이 됩니다. 하루에 소액 시장가 주문 30–40건을 거래하면 1주일 만에 200건에 도달할 수 있습니다(큰 자본으로 할 필요는 없습니다).
현재 형태의 방법론은 외환 전용입니다. 스프레드 확대와 라스트 룩은 거래소 개념이 아니라 외환 개념입니다. 암호화폐용 지수에는 다른 항목(예: 체결 가격에서의 호가창 깊이, 시장 충격 슬리피지, 출금 레이턴시)이 필요합니다. 추후 crypto-CEQI 지수를 발표할 수도 있습니다. 현재로서는 암호화폐 아비트리지 방법론을 참고하세요. 지표는 다르지만 공개 데이터 철학은 같습니다. 외환 툴킷은 암호화폐 데이터로는 의미 있는 결과를 내지 못합니다.
밀접하게 연결됩니다. SharpTrader Optimizer는 설정 가능한 체결 시간과 틱 단위 슬리피지로 전략을 백테스트합니다. 즉, BEQI가 실거래 브로커에서 측정하는 바로 그 변수들입니다. 브로커가 3등급(매칭 레이턴시 80–200 ms)이라면, 전략의 실행 가능성을 판단하기 전에 Optimizer의 체결 시간을 100–200 ms로 설정해야 합니다. BEQI는 브로커를 측정하고, Optimizer는 그 브로커의 실제 조건에서 전략을 시뮬레이션합니다. 두 가지를 함께 사용하면 거래할지 여부를 판단할 수 있습니다. 더 넓게 외환 아비트리지 전략을 거래하는 경우에도 같은 논리가 적용됩니다. 먼저 브로커를 측정하고, 그다음 실제 체결 프로필에 맞게 전략 규모를 정하세요.
타당한 질문입니다. 우리는 아비트리지와 체결을 고려한 백테스트가 진지하게 다루어지는 데 상업적 이해관계가 있으며, BEQI는 분명히 그 목적에 기여합니다. 그러나 특정 브로커의 점수가 좋거나 나쁜 데에는 상업적 이해관계가 없습니다. SharpTrader Pro는 4개 등급 전체의 브로커를 지원하며, 거래 장소는 고객이 스스로 선택합니다. 우리가 방법론을 오픈소스로 공개하는 것은 바로 우리 말을 그대로 믿을 필요가 없게 하기 위해서입니다. 코드는 감사할 수 있고, 측정은 재현할 수 있으며, 어떤 연구자든 우리의 내부 수치를 재현하거나 반박할 수 있습니다.
다섯 가지 방법이 있습니다. (1) 자신의 브로커에서 툴킷을 실행하고 JSON을 공개 스프레드시트에 제출합니다. (2) 파서가 내 내역서 형식에서 작동하지 않으면 GitHub 저장소에 이슈를 등록합니다. (3) 새로운 내역서 형식 파서에 대한 풀 리퀘스트를 제출합니다. (4) 토론 스레드를 통해 방법론 개선을 제안합니다. (5) 공개 데이터셋을 활용해 직접 분석 글을 작성하고 링크를 걸어 주세요. 우수한 외부 분석 글은 뉴스레터에 소개하겠습니다.
공개 스프레드시트에 대한 제출은 기본적으로 익명입니다. 브로커 이름은 선택 사항이고, 계좌 ID는 전혀 수집하지 않으며, JSON 출력에는 신원을 식별할 수 있는 정보가 없습니다. 체결 품질 측정에 대해 브로커가 보복했다는 이야기는 들어 본 적이 없지만(감사가 정확했다고 인정하지 않고서는 보복하기 어렵기 때문입니다), 익명 옵션은 바로 그 위험을 없애기 위해 존재합니다.
지금 바로 브로커를 감사하세요
30분. 오픈소스 코드. 공개 방법론. 익명 제출. 벤치마크는 트레이더들이 기여할 때만 존재합니다. 여러분의 브로커부터 시작하세요.