분류
플랫폼
난이도
중급
사용 상황
MT5 운용EA 평가브로커 선택

슬리피지

주문이 요청한 가격과 실제로 체결된 가격의 차이. 어느 쪽으로든 벌어질 수 있지만, 속도로 승부하는 전략에게는 백테스트가 좀처럼 모델링하지 않는 비용이다.

다른 표현: slippage, 가격 미끄러짐, 편차

업데이트일 · 검토일

쉽게 말하면

한 가격을 요청했는데 다른 가격을 받았다. 주문이 터미널을 떠나는 순간과 체결되는 순간 사이에 시장은 움직인다 — 때로는 유리하게, 더 자주는 그렇지 않게, 그리고 가장 원하지 않을 때 가장 크게.

왜 중요한가

백테스트는 스스로 정한 가격에 체결한다. 실계좌는 주문이 도착했을 때 브로커에게 남아 있던 가격에 체결한다. 그 차이는 거래 한 건에서는 작고 거래 수에 따라 누적되며, 그래서 빠른 전략이 실계좌와의 접촉을 견디는지를 결정한다.

  • 규모가 아니라 빈도에 비례한다. 0.1핍은 한 거래에서는 아무것도 아니지만 2천 거래에 걸치면 유의미해진다.
  • 가장 아픈 곳에서 정확히 가장 나쁘다 — 지표 발표 때, 세션 개장 때, 강제 청산 때. 모두 전략이 주문을 보내고 있을 가능성이 가장 높은 순간이다.
  • 백테스트가 포착할 수 없는 방식으로 브로커에 좌우된다. 같은 데이터에서 같은 EA를 돌려도 체결 품질이 다른 두 브로커에서는 실거래 결과가 달라진다.
  • 측정할 수 있다. 요청 가격과 체결 가격을 수백 건에 걸쳐 평균 내면 체결 품질에 관한 논쟁이 하나의 숫자가 된다.

MetaTrader 5에서

MT5에서의 위치

  • 새 주문 창(F9) → 편차 — 시장가 주문에서 허용할 최대 슬리피지(포인트 단위)
  • 도구 상자 → 내역 → 해당 체결의 가격과 EA가 Experts 로그에서 요청한 가격의 대조
  • 일지 탭. 거부는 체결이 아니라 리쿼트나 유효하지 않은 가격으로 표시된다
  • 전략 테스터 — 스프레드는 모델링하지만 주문 지연은 모델링하지 않으며, 그래서 테스터의 체결은 실거래보다 체계적으로 후하다

EA가 사용하는 방식

  • MqlTradeRequest의 deviation 필드가 허용 범위를 정한다. 요청 가격에서 이 포인트 안쪽이면 체결하고, 아니면 더 나쁘게 체결하는 대신 거부한다.
  • Market Execution에서는 시장이 주는 가격에 요청이 체결되며, 편차는 주문이 거부되기 전까지 그 거리가 얼마나 벌어질 수 있는지를 제한한다.
  • 체결 모드는 경계에서 갈린다. Fill or Kill은 부분 체결을 아예 거부하고, Immediate or Cancel은 있는 만큼 받고 나머지를 취소한다.
  • 잘 작성된 EA는 받은 체결 가격을 요청한 가격과 비교하고, 손절과 목표를 요청이 아니라 체결가에서 다시 계산한다.
  • 거부된 주문을 신호 재확인 없이 다시 보내는 것이, 거부된 한 번의 체결이 점점 더 나쁜 가격의 여러 체결로 번지는 경로다.

일반적인 설정

설정 일반적인 값 비고
편차, 스윙 전략 10–30포인트 넉넉하다. 수백 단위로 재는 목표 앞에서 몇 포인트의 슬리피지는 무의미하다.
편차, 스캘핑 전략 1–5포인트 나쁜 체결이 수용되지 않고 거부될 만큼 좁다 — 대신 거부가 늘어난다.
수용할 만한 평균 슬리피지 0.5핍 미만 브로커 마케팅 문구가 아니라 본인 계좌의 실거래 100건 이상에서 측정한 값.
들여다볼 만한 평균 슬리피지 1.5핍 초과 목표가 작은 전략이라면 이는 매 수익의 상당한 몫이다.
체결 모드 심볼이 허용하는 대로 브로커가 심볼별로 정한다. 지원하지 않는 모드를 보내면 주문이 조정되는 게 아니라 거부된다.

자주 생기는 운용 문제

  • 변동성이 큰 심볼에 편차를 너무 좁게 잡으면 거부 주문이 줄줄이 나오고, EA는 백테스트가 말하는 것보다 훨씬 적게 거래한다.
  • 편차를 너무 넓게 잡으면 신호 가격에서 멀리 떨어진 체결까지 받아들여, 실제로 잡은 거래가 전략이 모델링한 거래가 아니게 된다.
  • EA가 손절을 체결가가 아니라 요청 가격에서 계산하면, 미끄러진 진입마다 실제 위험이 의도한 위험과 어긋난다.
  • 브로커 서버까지의 거리는 지연을 더하고 지연은 슬리피지를 더한다 — EA를 거래 서버 가까이에 두라는 현실적 근거가 이것이다.
  • 지표 발표는 표본에 있는 어떤 값보다도 큰 슬리피지를 만든다. 그래서 그 구간을 통과하며 거래하는 전략은 그 구간을 통과하며 검증도 되어 있어야 한다.

관련 MT5 함수

MqlTradeRequest.deviation
시장가 주문에 허용되는 최대 슬리피지(포인트).
CTrade::SetDeviationInPoints(points)
해당 인스턴스가 보내는 모든 주문에 한 번에 적용되는 동일한 허용 범위.
MqlTradeResult.price
실제로 체결된 가격 — 요청과 비교해야 하는 숫자.
SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE)
브로커가 이 심볼에 허용하는 체결 모드. 다른 모드를 보내면 거부된다.
OrderSend(request, result)
retcode와 체결 가격을 함께 담은 결과 구조체를 반환한다.

예시

동일한 평균 0.4핍의 슬리피지를 목표가 다른 두 전략에 적용했다. 거래당 비용은 같지만, 그것이 갉아먹는 우위의 비율은 같지 않다.

거래당 평균 슬리피지
0.4핍
스캘퍼 — 평균 수익
6핍
진입과 청산의 슬리피지가 총수익의 약 13 %.
스윙 EA — 평균 수익
120핍
같은 슬리피지가 총수익의 약 0.7 %.
스캘퍼 — 연간 거래 수
2,000
오직 체결 때문에 연간 1,600핍이 사라진다.

두 행 사이에서 브로커 쪽은 아무것도 바뀌지 않았다. 차이는 전략의 우위 가운데 얼마가 체결 구간 안에 놓여 있느냐다.

계산 0.8 ÷ 6 = 13 % · 0.8 ÷ 120 = 0.7 %

결과 하나의 체결 품질, 전혀 다른 두 개의 판정

사용하는 법

슬리피지는 가정하는 것이 아니라 측정하는 것이다. 아래의 모든 결론은 본인 계좌와 본인 브로커에서 요청 가격과 체결 가격을 대조한 데서 나온다.

구간 의미
100건 이상에서 평균 0.5핍 미만 좋은 체결. 백테스트 결과가 적당한 할인만 거쳐 옮겨간다.
0.5–1.5핍 목표가 수십 핍인 전략에는 받아들일 만하고, 그보다 작은 무엇에든 실질적인 부담이다.
평균 1.5핍 초과 규모를 키우기 전에 들여다보라. 전략이 잘못된 순간에 거래하고 있거나 체결이 경쟁력이 없거나 둘 중 하나다.
일관되게 한쪽 방향 유리한 슬리피지도 나와야 한다. 체결이 언제나 요청보다 나쁘다면 그것은 시장의 움직임이 아니라 체결 품질을 설명하는 것이다.
  • 모든 거래에서 요청 가격을 체결 가격과 나란히 기록하라. 그 짝이 없으면 측정할 것도, 브로커를 비교할 근거도 없다.
  • 같은 기간의 실거래와 백테스트를 대조하라 — 거래당 평균 결과의 격차가 슬리피지와 스프레드가 사는 자리다.
  • 편차는 목표 크기에서 끌어내라. 작은 목표에는 좁게 잡아 나쁜 체결이 거부되게 하고, 큰 목표에는 넉넉히 잡아 핍의 일부 때문에 좋은 신호를 놓치지 않게 한다.
  • 손절과 목표를 요청이 아니라 체결가에서 다시 계산하라. 그러지 않으면 미끄러진 진입이 그 거래의 위험을 조용히 바꿔놓는다.
  • 지표 발표 시간대의 체결은 따로 평가하라. 조용한 구간에서 낸 평균은 정작 중요한 몇 초의 체결에 대해 아무것도 말해주지 않는다.

mt5depot의 상품 페이지는 각 백테스트가 어떤 브로커와 어떤 계좌 조건에서 나왔는지 공개한다. 그래서 결과 뒤에 놓인 체결 전제가 암시되는 대신 명시된다.

흔한 오해

슬리피지가 항상 불리하다고 가정하기

유리한 슬리피지 — 요청보다 나은 체결 — 는 진짜 시장가 체결에서 정상적인 조건이면 일어난다. 수백 건에 걸쳐 불리한 슬리피지만 보이는 기록은 시장이 아니라 그 체결 품질을 설명하고 있다.

백테스트가 체결을 모델링한 것처럼 평가하기

전략 테스터는 스프레드는 모델링하지만 결정과 체결 사이의 지연은 모델링하지 않는다. 그래서 모든 테스터 결과는 거래 빈도에 따라 커지는 만큼 낙관적이며, 그 격차는 테스트에서 가장 좋아 보이는 전략에서 정확히 가장 크다.

슬리피지를 피하려고 편차를 0으로 두기

그것은 슬리피지를 없애는 것이 아니라 체결을 없앤다. EA는 결국 자기 신호의 일부만 거래하게 되고, 어떤 신호를 놓치는지는 전략이 아니라 시장 속도가 정한다.

스프레드만으로 브로커 비교하기

좁게 광고된 스프레드에 나쁜 체결이 붙으면, 더 넓지만 깔끔하게 체결되는 스프레드보다 비쌀 수 있다. 비교 가능한 숫자는 왕복 총비용이다 — 스프레드에 수수료에 측정된 슬리피지를 더한 값.

자세히

여기 실린 모든 상품에는 체결 허용 범위가 딸려 있는데, 정작 이 진열대는 그 의미에 대해 서로 어긋나 있다. 편차는 어떤 체결이 거부되는지를 정하지, 수용된 체결이 얼마나 나쁜지를 정하지 않는다 — 그리고 여기서는 같은 숫자가 두 가지 크기를 가리킨다.

모든 상품에 딸려 오는 허용 범위

여기 공개된 14개 EA 전체
체결 허용 범위 입력을 가진 상품14
그것을 설명하는 파라미터 항목40
0.3핍으로 명시된 허용 범위3
3핍으로 명시된 허용 범위11
백테스트에 영향을 주지 않는다고 적은 페이지8
그 값에서 기록이 측정됐다고 적은 페이지2
측정된 슬리피지 수치를 가진 실행0

셋째 줄과 넷째 줄이 함정이다. Cairn과 Thunderhead는 맨 숫자 3을 찍어놓고 그것을 포인트로 센다. 다른 아홉 개는 맨 숫자 3을 찍어놓고 그것을 핍으로 센다. 같은 숫자인데 열 배가 어긋난다. 단위를 함께 찍는 것은 Iridescence와 Lattice Weave, Tidewell Slack뿐이고 — 잘못 읽을 수 없는 것은 이 셋이다.

다섯째와 여섯째 줄은 하나의 설정을 두 가지 어조로 서술하고 있으며, 어느 쪽을 믿을지는 일곱째 줄이 정한다. 우리 백테스트 가운데 체결을 요청과 대조해 측정한 것은 하나도 없다. 그러므로 그것은 백테스트의 전제가 아니라 실거래를 위한 지시이며, 우리 방법론이 각 기록 주위에 긋는 경계선이 바로 그것이다.

가장 좁은 곳에서 가장 세게 문다. 0.3핍이라면 그보다 더 벌어진 체결은 거부되므로, Cairn의 4,725건은 기록이 보여주는 것보다 나빠지는 게 아니라 적어진다.

자주 묻는 질문

MT5 EA에서 슬리피지는 어느 정도가 정상인가요?
경쟁력 있는 계좌에서 평범한 조건이라면 100건 이상에 걸친 평균이 약 0.5핍 미만이면 좋고, 0.5에서 1.5핍은 목표가 수십 핍인 전략에는 감당할 만합니다. 평균이 계속 1.5핍을 넘는다면 들여다볼 가치가 있으며, 전략이 자주 거래한다면 특히 그렇습니다.
왜 실거래 결과가 백테스트보다 나쁜가요?
보통은 슬리피지와 스프레드가 원인입니다. 전략 테스터는 스스로 정한 가격에 체결하고 주문 전송과 체결 사이의 지연을 모델링하지 않기 때문에, 실거래 체결은 체계적으로 조금씩 더 나쁩니다. 이 효과는 거래 수에 비례하므로 자주 거래하는 전략일수록 백테스트에서 가장 빨리 멀어집니다.
VPS를 쓰면 슬리피지가 줄어드나요?
터미널과 브로커 서버 사이의 거리와 지연에서 오는 부분은 줄여줍니다. 목표가 작은 전략일수록 이 부분이 중요합니다. 다만 시장이 움직여서 생기는 부분이나 주문 시점에 유동성이 얇아서 생기는 부분에는 아무 영향이 없습니다.
EA는 편차를 얼마로 써야 하나요?
잡을 가치가 있는 신호에서 체결될 만큼이면 되고 그 이상은 필요 없습니다. 목표가 큰 전략은 10에서 30포인트를 문제없이 받아들일 수 있고, 스캘핑 전략은 대개 몇 포인트만 두어 나쁜 체결이 수용되지 않고 거부되게 하며 대신 더 많은 거부를 감수합니다.