The Trading Mentor당신의 트레이딩 멘토

대부분의 MT5 EA가 실전 거래에서 실패하는 이유 (그리고 실제로 효과 있는 해결책)

2023년 3월 14일, SVB 붕괴 헤드라인이 터진 후 EUR/USD는 4시간 만에 180 pips 하락했습니다.

Daniel Harrington

Daniel Harrington

수석 트레이딩 애널리스트 · MT5 specialist

7 분 소요

이 기사 공유:

2023년 3월 14일, SVB 붕괴 헤드라인이 터진 후 EUR/USD는 4시간 만에 180 pips 하락했습니다. 제 터미널에서 세 개의 EA가 완전히 통제 불능 상태가 되는 것을 지켜봤습니다. 하나는 하락세에 물타기를 했고, 하나는 너무 일찍 반전했으며, 다른 하나는 그냥... 멈췄습니다. 세 EA 모두 샤프 비율 1.8 이상으로 2년 백테스트를 통과했습니다. 그날 저는 실제 돈을 잃었고, 자동화된 거래에 대해 제가 알고 있다고 생각했던 모든 것을 다시 생각하게 만들었습니다. 사실, 대부분의 MT5 EA는 잘못된 로직 때문에 실패하는 것이 아닙니다. 그것들은 구축, 테스트 및 배포 방식 때문에 실패합니다.

EA 백테스트 대 실전 거래 — 완벽한 자산 곡선이 고장 난 로봇과 함께 혼란스러운 현실로 산산조각 나다

슬리피지, 스프레드 확대, 과최적화가 실시간 시장에서 EA를 강타할 때 92%의 백테스트 승률은 아무 의미가 없습니다. 제 EA 중 세 개는 SVB 붕괴 동안 고장 났습니다 — 모두 완벽한 백테스트를 가지고 있었습니다.

1

백테스팅의 환상: 90% 품질 테스트가 아무 의미 없는 이유

매주 거래 포럼에서 부드러운 자산 곡선으로 백테스트를 게시하고 EA가 실전 투입 준비가 되었다고 선언하는 사람들을 봅니다. 문제는 결과가 아닙니다. 문제는 그 결과가 실제로 무엇을 측정하고 있느냐입니다.

MT5의 전략 테스터는 '실제 틱 기반 모든 틱' 모드에서도 실시간 스프레드 동작을 복제할 수 없습니다. 제가 언급했던 SVB 패닉 동안 EUR/USD의 스프레드는 일부 브로커에서 8-12 pips에 달했지만, EA는 고정 1.2 pip 스프레드를 가정하고 구축 및 테스트되었습니다. 이 단일 변수 때문에 가격이 움직이기도 전에 60-pip 목표 거래가 손실 포지션으로 바뀌었습니다.

전략 테스터에는 대부분의 사람들이 무시하는 특정 설정이 있습니다: '날짜 사용' 체크박스와 모델링 품질 퍼센티지를 결합한 것입니다. 99% 모델링 품질로 테스트하지만 고정 스프레드를 사용한다면, 환상적인 상품을 테스트하는 것입니다. 실제 시장에는 가변 스프레드, 리쿼트(ECN에서는 덜 흔하지만 여전히 존재), 그리고 로컬 백테스트에서는 볼 수 없는 지연 시간 급증이 있습니다.

저는 동일한 EA를 동일한 3년 데이터 세트에서 다음 두 가지 구성으로 실행했습니다:

  • 고정 스프레드: 1.5 pips, 슬리피지 모델 없음
  • 브로커 틱 데이터 + 1-3 pip 무작위 슬리피지를 사용한 가변 스프레드

고정 스프레드 버전은 연간 34% 수익률을 보였습니다. 가변 스프레드 버전은요? 11%였습니다. 동일한 EA. 동일한 기간. 이 차이는 거래가 실전 투입될 때 실제로 경험하게 될 것입니다. 전략 테스터에서 항상, 항상 '무작위 지연' 실행 모델을 사용하십시오. 이 설정은 숨겨져 있지만 플랫폼이 제공하는 현실성에 가장 가깝습니다. 테스터 속성의 실행(Execution) 아래에서 찾을 수 있으며, 실제 주문 지연 시간을 시뮬레이션하기 위해 50-200ms로 설정하십시오.

이것은 또한 테스트 중에 포지션 크기 계산기가 중요해지는 지점입니다: 실제 스프레드를 거래당 위험 계산에 반영하지 않으면, 포지션 크기가 처음부터 잘못될 것입니다.

2

과최적화: EA가 실전 투입 3주 만에 죽는 진짜 이유

여기 제가 주저 없이 단언할 수 있는 말이 있습니다: 대부분의 개인 EA는 과최적화되어 있습니다. 약간이 아니라, 엄청나게 말이죠.

과최적화는 EA의 매개변수를 과거 데이터에 너무 정밀하게 최적화하여 EA가 과거로부터 배우는 대신 과거를 암기하게 될 때 발생합니다. MT5 유전적 최적화 엔진은 엄청나게 강력하지만, 잘못된 손에 들어가면 극도로 위험합니다. 저는 트레이더들이 12개월 데이터 세트에서 50,000번의 최적화를 실행하고, 가장 높은 수익 요소를 가진 매개변수 세트를 선택한 다음 하루를 마감하는 것을 보았습니다. 그것은 전략 개발이 아닙니다. 그것은 추가 단계를 거친 커브 피팅입니다.

과최적화에 대한 진정한 테스트는 워크-포워드 테스트입니다. 데이터를 분할하여 첫 70%에서 최적화한 다음, 나머지 30%에서 블라인드 포워드 테스트를 실행합니다. 샘플 외 기간에서 수익 요소가 2.4에서 0.8로 떨어진다면, EA는 과최적화된 것입니다. 끝. 거래하지 마십시오.

여기서 수학이 중요합니다. 최적화 모집단은 데이터 세트의 자유도보다 의미 있게 작아야 합니다. 제가 사용하는 대략적인 규칙은 다음과 같습니다: 데이터 1,000바당 최적화 가능한 매개변수가 하나 이상이라면, 이미 위험한 영역에 있는 것입니다. 2,000바의 1시간 데이터로 테스트된 8개의 자유 매개변수를 가진 EA는 전략이 아닙니다. 그것은 암기된 패턴입니다.

저는 2019년에 GBP/USD에 대한 평균 회귀 EA로 이 실수를 저질렀습니다. 2016-2018년 데이터에서 아름답게 최적화되었습니다. 매개변수 세트에는 11개의 변수가 포함되었습니다. 2019년 1월에 실전 투입되었고 6주 만에 22%의 손실을 기록한 후 저는 그것을 중단했습니다. 그 교훈은 잊혀지지 않았습니다. 이제 저는 40%를 초과하는 포워드 테스트 성능 저하를 절대 허용하지 않습니다. EA가 최적화 샘플에서 $10,000를 벌었지만 비슷한 크기의 포워드 샘플에서 $5,000만 벌었다면, 그것은 간신히 용납될 수 있는 수준입니다. $10,000를 벌고 포워드에서 $3,000를 잃었다면, 그것은 쓰레기입니다.

상품별 스프레드 및 실행 품질이 어떻게 다른지 자세히 알아보려면, EA의 주요 시장으로 어떤 주요 통화쌍을 선택하기 전에 EUR/USD 가이드를 읽어볼 가치가 있습니다.

Winston

💡 윈스턴의 팁

코드 로직은 모든 관심을 받습니다.

퓨처라마 로봇 고장 — EA가 실시간 시장을 만났을 때

귀하의 EA는 10년간의 백테스트에서 완벽하게 작동했습니다 — 그러다 실제 스프레드, 슬리피지, 리쿼트를 만났습니다. 실전 거래에 오신 것을 환영합니다.

3

아무도 이야기하지 않는 4가지 실행 실패

코드 로직은 모든 관심을 받습니다. 실행은 아무것도 받지 못합니다. 그것은 거꾸로 된 것입니다.

다음은 제가 고객 EA에서 진단한 가장 흔한 네 가지 실행 수준 실패입니다:

  1. 주문 수정 경쟁 조건: EA가 가격이 스탑 로스를 트리거하는 동일한 틱에서 스탑 로스를 수정하려고 시도합니다. MQL5에서 OrderSelect() 반환 값을 먼저 확인하지 않고 OrderModify()를 호출하면, 조용한 실패가 발생하고, 주문은 수정되지 않으며, 로그에 오류가 발생하지 않고, 이제 위험은 통제 불능 상태가 됩니다.

  2. 브로커 소수점 자리를 고려하지 않음: 일부 브로커는 EUR/USD를 소수점 5자리까지, 일부는 4자리까지 호가합니다. 스탑 로스 계산이 _Digits를 확인하지 않고 고정 pip 값을 사용하면, SL이 10배 너무 가깝거나 너무 멀리 배치될 것입니다. 저는 이것이 계좌를 파산시키는 것을 보았습니다.

  3. IsTradeAllowed() 무시: 이 함수는 일부 브로커에서 뉴스 이벤트 중, 시장 마감 중, 그리고 계좌에 보류 중인 마진 문제가 있을 때 false를 반환합니다. EA가 모든 주문 시도 전에 이것을 확인하지 않으면, EA는 거래 중이라고 생각하는 동안 조용히 실패하는 진입이 발생할 것입니다.

  4. 느린 연결에서의 틱 기반 진입 로직: 각 새 틱에서 트리거되는 EA는 5ms 지연 시간을 가진 VPS에서는 잘 작동합니다. 80-150ms 지연 시간을 가진 가정용 인터넷 연결에서는, 주문이 브로커에 도달할 때쯤이면 진입 로직을 트리거한 틱이 3-4틱 오래된 것일 수 있습니다. 더 이상 존재하지 않는 가격으로 매수하는 것입니다.

4번 항목에 대한 해결책은 가능한 경우 진입 로직을 OnTick()에서 OnTradeTransaction()으로 전환하거나, 최대 허용 슬리피지 매개변수를 추가하고 해당 범위를 벗어나는 체결을 거부하는 것입니다. 화려한 코드는 아닙니다. 하지만 라이브 EA와 부채 사이의 차이입니다.

자체 지연 시간을 유발하는 양식 대화 상자를 처리하지 않고 깔끔하게 주문을 배치하기 위해, 저는 EA 포지션을 반수동으로 관리할 때 Pulsar Terminal의 Drag Trader를 사용합니다. 차트에서 직접 드래그하면 SL/TP가 실시간으로 업데이트되는데, 이는 라이브 포지션에 있을 때 어떤 대화 상자보다도 실제로 빠릅니다.

네 가지 EA 실행 실패 — 슬리피지, 스프레드 확대, 리쿼트, 부분 체결

귀하의 백테스트는 고정 스프레드로 정확한 가격에 완벽한 체결을 가정합니다. 실시간 시장에는 슬리피지, 뉴스 중 스프레드 확대, 리쿼트, 부분 체결이 있습니다. 어떤 EA도 예외는 아닙니다.

4

브로커 문제 (대부분의 트레이더가 이것을 완전히 무시한다)

귀하의 EA는 시장을 거래하는 것이 아닙니다. 귀하의 브로커가 제공하는 시장 피드를 거래하는 것입니다. 이 차이는 엄청나게 중요합니다.

저는 2022년 3분기에 6주간의 테스트 기간 동안 동일한 EA, 동일한 VPS, 동일한 설정을 세 개의 다른 브로커에서 동시에 실행했습니다. 결과는 전혀 달랐습니다:

  • 브로커 A (ECN, EUR/USD 평균 스프레드 0.8 pips): 순이익 +4.2%
  • 브로커 B (STP, 평균 스프레드 1.8 pips): 순이익 +1.1%
  • 브로커 C (마켓 메이커, 고정 2.0 pips): 순손실 -2.3%

동일한 EA. 동일한 시장. 실행 모델과 스프레드 비용 때문에 완전히 다른 결과가 나왔습니다.

스캘핑 EA는 이것에 가장 민감합니다. 5-pip 스탑으로 10 pips를 목표로 하는 EA는 2:1 R:R 비율로 작동합니다. 여기에 2 pips의 스프레드를 추가하면 7-pip의 유효 위험으로 10-pip 목표가 되어 1.4:1에 더 가까워집니다. 이 계산은 우위를 완전히 침식합니다. 이것이 백테스트에서 돈을 버는 스캘핑 EA가 실전에서 그렇게 일관되게 실패하는 이유입니다. 백테스트는 변동성이 큰 세션 동안 실제 브로커가 부과하지 않는 스프레드 가정을 사용했습니다.

어떤 EA든 실전 투입하기 전에, 사용하려는 실제 브로커의 데모 계좌에서 최소 3주 동안 실행하십시오. 다른 브로커의 데모가 아닙니다. 다른 실행 방식을 가진 프롭 펌 시뮬레이션도 아닙니다. 귀하의 특정 브로커, 귀하의 특정 계좌 유형이어야 합니다. 모든 거래 후에 MT5의 저널 탭에서 실행 로그를 확인하십시오. 체결에서 1+ pips의 일관된 슬리피지를 보고 있다면, 귀하의 EA의 우위는 아마도 이미 사라진 것입니다.

IC Markets 리뷰와 같은 브로커 선택 리뷰는 ECN 실행이 실제로 어떻게 작동하는지에 대한 기준을 제공할 수 있습니다.

Winston

💡 윈스턴의 팁

어떤 EA든 실제 돈을 투입할 준비가 되었다고 간주하기 전에 제가 무엇을 찾는지 설명해 드리겠습니다.

이런 — 브로커가 다른 틱 데이터를 사용한다는 것을 발견하다

다른 브로커, 다른 틱 데이터, 다른 스프레드. 한 브로커에 최적화된 EA는 다른 브로커에서는 완전히 실패할 수 있습니다.

5

배포 가능한 EA는 실제로 어떤 모습일까

어떤 EA든 실제 돈을 투입할 준비가 되었다고 간주하기 전에 제가 무엇을 찾는지 설명해 드리겠습니다. 이것은 인쇄하고 잊어버리는 체크리스트가 아닙니다. 대부분의 EA가 도달하지 못하는 표준입니다.

첫째, 백테스트는 가변 스프레드, 무작위 실행 지연, 그리고 샘플 외 워크-포워드 검증을 사용해야 합니다. 포워드 테스트 성능 저하는 유사한 데이터 길이에서 40% 미만이어야 합니다. 3년 동안 백테스트를 했다면, 1년 동안 워크-포워드 테스트를 하십시오. 3개월이 아닙니다.

둘째, EA는 코드에 강력한 손실 제한 회로 차단기가 필요합니다. MQL5에서는 다음과 같습니다:

double maxDrawdown = 0.10; // 10% max
double startBalance = AccountInfoDouble(ACCOUNT_BALANCE);
if((startBalance - AccountInfoDouble(ACCOUNT_EQUITY)) / startBalance >= maxDrawdown) {
 // Close all positions and disable EA
 ExpertRemove();
}

이것은 기본입니다. 저는 얼마나 많은 실제 EA에 이것이 없는지 계속해서 충격을 받습니다.

셋째, ATR 지표는 EA의 진입 로직뿐만 아니라 포지션 크기 조정의 일부여야 합니다. 변동성이 변하는 시장에서 고정 로트 크기 조정은 일관성 없는 위험을 초래하는 방법입니다. H1 차트의 ATR(14)은 시장이 얼마나 움직이는지에 대한 실시간 측정을 제공합니다. 스탑 로스와 포지션 크기는 이에 따라 조정되어야 합니다.

넷째, EA는 단일 시장 환경이 아닌 여러 시장 환경에서 테스트되어야 합니다. 2020-2021년 추세 시장에 최적화된 EA는 2022-2023년 횡보, 고변동성 환경에서 파괴될 것입니다. 데이터 세트에 최소한 하나의 추세 연도와 하나의 횡보 연도를 사용하십시오.

다섯째, 백테스트 결과에 대한 몬테카를로 시뮬레이션을 보고 싶습니다. MT5는 이를 기본적으로 제공하지 않지만, StrategyQuant와 같은 도구나 거래별 결과를 사용한 기본적인 Excel 시뮬레이션도 승패 순서를 무작위화하여 현실적인 최악의 손실을 보여줄 수 있습니다. 시뮬레이션된 최악의 경우가 35%인데 15%만 감당할 수 있다면, 평균이 아무리 좋아 보여도 EA는 귀하의 계좌에 적합하지 않습니다.

대부분의 EA는 그 아이디어가 틀렸기 때문에 실패하는 것이 아닙니다. 검증 과정이 게을렀고, 실행 코드가 실제 조건에서 테스트되지 않았으며, 브로커 환경이 측정되기보다는 가정되었기 때문에 실패합니다. 이 세 가지를 고치면 실시간 결과가 백테스트가 약속했던 것과 훨씬 더 비슷해 보일 것입니다.

면책 조항: 이 글은 교육 목적으로만 제공되며 투자 조언을 구성하지 않습니다. 외환 및 CFD 거래는 상당한 손실 위험을 수반합니다. 과거 성과는 미래 결과를 나타내지 않습니다. 항상 스스로 조사하고 거래하기 전에 재정 상황을 고려하십시오. 잃을 여유가 없는 돈을 절대 위험에 빠뜨리지 마십시오.

윈스턴 교수의 수업

핵심 요약:

  • EA가 과거 데이터에 과최적화되었다면 완벽한 백테스트는 아무 의미가 없습니다
  • 슬리피지, 스프레드 확대, 리쿼트는 백테스팅에서 경험하지 못한 EA를 파괴합니다
  • 브로커의 틱 데이터와 실행 속도는 EA 성능에 직접적인 영향을 미칩니다 — 실제 브로커에서 테스트하십시오
  • 배포 가능한 EA는 실패를 우아하게 처리합니다: 슬리피지를 관리하고, 최대 손실 제한이 있으며, 모든 것을 기록합니다
Prof. Winston

자주 묻는 질문

Q1MT5 EA를 유효하다고 간주하기 전에 백테스트에 얼마나 많은 데이터를 사용해야 합니까?

최소한 3년 이상의 틱 데이터가 필요하며, 이는 다양한 시장 조건, 즉 최소한 하나의 강력한 추세 기간과 하나의 횡보/박스권 기간을 포함해야 합니다. 최적화 가능한 매개변수가 5개 이상인 EA의 경우, 5년으로 늘릴 것입니다. 하지만 핵심 숫자는 연도가 아니라, 테스트된 바(bar) 수에 대한 매개변수 수의 비율입니다. 1,000바당 하나 이상의 자유 매개변수는 이미 과최적화의 위험 신호입니다. M5 차트의 스캘핑 EA의 경우 3년이면 충분한 바를 제공할 수 있지만, 브로커 기록의 틱 데이터 품질이 실제로 완전한지 확인해야 합니다. 틱 데이터의 공백은 실제보다 결과가 더 깨끗하게 보이게 할 것입니다.

Q2제 EA가 동일한 브로커의 데모에서는 잘 작동하는데 실전에서는 실패하는 이유는 무엇입니까?

이것은 사람들이 인정하는 것보다 더 흔합니다. 대부분의 브로커 데모 계좌는 실전 계좌와 약간 다른 실행 모델을 사용합니다. 특히, 데모 체결은 유동성이 낮은 기간 동안 더 깨끗하고 빠르며 스프레드가 더 타이트한 경우가 많습니다. 일부 브로커는 데모 및 실전 주문을 다른 인프라를 통해 라우팅하기도 합니다. 이를 테스트하는 방법은 두 계좌를 2-4주 동안 동시에 실행하고 거래별 체결 가격을 비교하는 것입니다. 실전 체결이 데모보다 일관되게 0.5-1 pip 더 나쁘다면, 그것은 실행 모델의 차이이며 실제입니다. 수백 번의 거래를 통해 불리하게 작용할 것입니다. 또한 실전 계좌가 STP인지 데모가 ECN인지 확인하십시오. 이는 브로커들이 광고하는 것보다 더 자주 발생합니다.

Q3한 통화쌍에서 실패한 EA가 다른 통화쌍에서 작동할 수 있습니까?

때로는 그렇습니다. 하지만 새로운 상품에서 완전히 재검증해야 하며, 매개변수가 그대로 이전될 것이라고 가정하지 마십시오. 다른 통화쌍은 다른 변동성 프로필, 스프레드 동작, 그리고 세션 기반 유동성 패턴을 가지고 있습니다. 런던 세션 동안 EUR/USD의 행동을 중심으로 구축된 EA는 아시아/런던 오버랩 동안 자체적인 변동성 급등을 보이는 GBP/JPY에는 완전히 틀릴 수 있습니다. 새로운 통화쌍의 데이터로 (과최적화 없이 신중하게) 재최적화하고, 새로운 워크-포워드 테스트를 실행하며, 이상적으로는 실제 브로커에서 4-6주 동안 데모 테스트를 해야 합니다. 기본 로직은 이식될 수 있습니다. 특정 매개변수 값은 거의 확실히 그렇지 않을 것입니다.

Q4EA를 실전 계좌에 투입하기 전 최소 포워드 테스트 기간은 얼마입니까?

저는 최소 기간으로 시간 기간이 아닌 100회의 완료된 거래를 사용합니다. 시간 기간은 느린 시장에서는 3개월 동안 40회의 거래를 제공할 수 있지만, 빠른 시장에서는 200회를 제공할 수 있기 때문에 오해의 소지가 있습니다. EA의 실제 의사 결정에 대한 통계적으로 의미 있는 샘플이 필요합니다. EA가 주당 평균 5회 거래를 한다면, 실전 투입을 고려하기 전에 20주 동안 데모 거래를 해야 합니다. 대략 5개월입니다. 긴 시간처럼 느껴진다는 것을 압니다. 하지만 계좌 파산에서 회복하는 것보다 짧습니다. 제가 확인하는 또 다른 사항은 포워드 테스트 결과가 백테스트의 몬테카를로 신뢰 구간 내에 속하는지 여부입니다. 포워드 테스트 손실이 몬테카를로 시뮬레이션의 95번째 백분위수를 초과한다면, 시장에 무언가 변화가 있었고 EA는 실전 투입 전에 재평가가 필요합니다.

이 기사가 도움이 되셨나요?

이 기사가 얼마나 유용했나요?

별을 클릭하여 평가

댓글

0/500
...

시장보다 앞서가세요

매주 시장 분석, 트레이딩 전략, MT5 팁을 받아보세요. 스팸 없음, 언제든 구독 취소 가능.

Daniel Harrington

저자 소개

Daniel Harrington

수석 트레이딩 애널리스트

Daniel Harrington은 정량적 자산 및 위험 관리를 전문으로 하는 MScF(금융과학 석사)를 보유한 수석 트레이딩 애널리스트입니다. 12년 이상의 외환 및 파생상품 시장 경험을 바탕으로 MT5 플랫폼 최적화, 알고리즘 트레이딩 전략, 개인 트레이더를 위한 실용적인 인사이트를 다룹니다.

Pulsar Terminal 받기

이 모든 계산기는 MT5 계정의 실시간 데이터와 함께 Pulsar Terminal에 내장되어 있습니다.

Pulsar Terminal 받기
Pulsar Terminal — 고급 MT5 트레이딩 패널

위험 고지

금융 상품 거래에는 상당한 위험이 수반되며 모든 투자자에게 적합하지 않을 수 있습니다. 과거 성과가 미래 수익을 보장하지 않습니다. 이 콘텐츠는 교육 목적으로만 제공되며 투자 조언으로 간주되어서는 안 됩니다. 거래 전에 항상 직접 조사를 수행하십시오.