MT5 오류 코드 해설: 10027, 10030, 10016 외
MT5 / MQL5 오류 코드: 리턴 코드 10004–10031과 런타임 오류
MT5가 알려 주는 오류는 두 종류입니다. 5자리 거래 리턴 코드(예: 10027 자동 매매 꺼짐, 10030 지원하지 않는 체결 방식, 10016 잘못된 스탑, 10019 증거금 부족)와 GetLastError()가 반환하는 4자리 런타임 오류(예: 4401, 4756)이며, 아래 표에서 코드별 해결 방법을 바로 찾을 수 있습니다.
빠른 조회: 코드 → 의미 → 해결 방법
번호와 상수 이름은 MQL5 공식 레퍼런스(거래 서버 리턴 코드 및 런타임 오류)를 따릅니다.
거래 리턴 코드 (MqlTradeResult.retcode)
| 코드 | 상수 | 의미 | 해결 방법 | 상세 |
|---|---|---|---|---|
| 10004 | TRADE_RETCODE_REQUOTE | 리쿼트 — 체결 전에 가격이 움직였습니다 | 허용 편차(deviation)를 넓히거나 최신 가격으로 다시 전송합니다 | Off quotes와 리쿼트 |
| 10006 | TRADE_RETCODE_REJECT | 요청이 거부됨 | 대개 스프레드 확대나 급변하는 시장이 원인이며, EA가 이후 틱에서 재시도하도록 둡니다 | — |
| 10013 | TRADE_RETCODE_INVALID | 잘못된 요청 | 요청의 필드(액션, 주문 유형, 심볼) 중 하나가 잘못되었습니다. 전송 전에 OrderCheck()로 검증합니다 | — |
| 10014 | TRADE_RETCODE_INVALID_VOLUME | 요청의 거래량이 잘못됨 | 로트를 심볼의 최소·최대·단위(SYMBOL_VOLUME_MIN / MAX / STEP)에 맞춰 반올림합니다 | — |
| 10015 | TRADE_RETCODE_INVALID_PRICE | 요청의 가격이 잘못됨 | 가격을 심볼의 소수 자릿수와 틱 크기에 맞게 정규화하고, 예약 주문이 시장가의 올바른 쪽에 있는지 확인합니다 | — |
| 10016 | TRADE_RETCODE_INVALID_STOPS | 요청의 스탑이 잘못됨 | SL/TP를 브로커의 스탑 레벨보다 멀리, 그리고 가격의 올바른 쪽에 둡니다 | Invalid stops |
| 10017 | TRADE_RETCODE_TRADE_DISABLED | 거래가 비활성화됨 | 사양에서 심볼의 거래 모드를 확인하고, 투자자 비밀번호가 아닌 거래 비밀번호로 로그인했는지 확인합니다. 그래도 안 되면 브로커에 문의합니다 | — |
| 10018 | TRADE_RETCODE_MARKET_CLOSED | 시장이 닫혀 있음 | 해당 심볼의 거래 세션이 열릴 때까지 기다립니다 | Market closed |
| 10019 | TRADE_RETCODE_NO_MONEY | 요청을 처리할 자금이 부족함 | 로트를 줄이거나, 포지션을 청산하거나, 입금합니다 | Not enough money |
| 10021 | TRADE_RETCODE_PRICE_OFF | 요청을 처리할 호가가 없음 | 연결 상태와 해당 심볼에 현재 호가가 들어오는지 확인한 뒤 재시도합니다 | Off quotes와 리쿼트 |
| 10026 | TRADE_RETCODE_SERVER_DISABLES_AT | 서버가 자동 매매를 비활성화함 | 브로커가 이 계좌의 알고리즘 거래를 차단하고 있습니다. 브로커에 문의합니다 | 자동 매매 비활성화 |
| 10027 | TRADE_RETCODE_CLIENT_DISABLES_AT | 클라이언트 터미널이 자동 매매를 비활성화함 | Algo Trading 버튼을 켜고, 옵션과 EA 속성에서 알고 트레이딩을 허용합니다 | 자동 매매 비활성화 |
| 10030 | TRADE_RETCODE_INVALID_FILL | 주문 체결 방식이 잘못됨 | type_filling을 심볼이 지원하는 방식(FOK / IOC / Return)으로 설정합니다 | Unsupported filling mode |
| 10031 | TRADE_RETCODE_CONNECTION | 거래 서버와 연결되지 않음 | 연결 상태 표시줄, VPS 네트워크, 브로커의 서버 상태를 확인합니다 | — |
런타임 오류 (GetLastError())
| 코드 | 상수 | 의미 | 해결 방법 | 상세 |
|---|---|---|---|---|
| 4001 | ERR_INTERNAL_ERROR | 예기치 않은 내부 오류 | 특정 원인 하나로 좁혀지지 않습니다. 확인하려는 함수 앞에서 ResetLastError()를 호출하고, 계속되면 터미널을 재시작하거나 업데이트합니다 | — |
| 4401 | ERR_HISTORY_NOT_FOUND | 요청한 히스토리를 찾을 수 없음 | 읽기 전에 해당 딜이나 주문이 포함된 기간으로 HistorySelect()를 호출합니다 | — |
| 4752 | ERR_TRADE_DISABLED | Expert Advisor의 거래가 금지됨 | Algo Trading을 켜고 EA 속성에서 "Allow Algo Trading"에 체크합니다 | 자동 매매 비활성화 |
| 4756 | ERR_TRADE_SEND_FAILED | 거래 요청 전송 실패 | OrderSend()가 false를 반환했습니다. 실제 원인은 MqlTradeResult.retcode에서 확인합니다(주로 10027, 10030, 10016) | — |
MT4에서 넘어오셨나요? MT4는 같은 상황에 대해 대부분 3자리인 다른 번호를 사용합니다(134, 130, 132, 136, 4109 …). 아래 각 섹션에는 MQL4 공식 레퍼런스에서 가져온 MT4 대응 코드를 함께 적었습니다. 참고로 MT5에서 4109는 거래 오류가 아니라 ERR_CHART_WRONG_PROPERTY(차트 오류)를 뜻합니다.
📧 무료 이메일 강좌(총 8통) + 구독자 전용 MT5 지표 13종 팩
가입 직후, 사이트의 MT5 지표 13종을 컴파일된 파일(.ex5)·소스 코드·사용 가이드로 묶은 구독자 전용 팩의 다운로드 링크를 보내 드립니다. 이어서 FX 자동매매의 본질, 백테스트를 올바르게 읽는 법, 브로커 선택 요령 등을 총 8통(처음 5일은 매일 1통, 이후 가입 7·14·30일 후)으로 전해 드립니다. MQL5 Market 판(출시가·판매량에 따라 단계적 인상)의 가격 인상 전 알림도 받으실 수 있습니다. 이 사이트의 EA는 제휴 브로커의 실계좌가 있으면 무료입니다.
※ 개인정보는 엄격히 보호. 언제든 구독 해지 가능.
Expert 탭 확인 방법
MT5 하단의 Expert 탭을 클릭하면 모든 EA의 활동 로그가 시간순으로 표시됩니다.
표시 형식:
2026.05.18 10:00:01.234 GOLD VIPER XAUUSD,M30: [ERROR] 10016
날짜/시간 EA 이름 심볼 타임프레임 메시지
오류가 표시되면 코드 번호를 가지고 위 표에서 원인을 찾으세요.
자주 발생하는 오류 코드와 대처법
10019 — 증거금 부족 (TRADE_RETCODE_NO_MONEY)
MT4 대응 코드: 134 ERR_NOT_ENOUGH_MONEY. ERR_NO_MONEY는 같은 상황을 가리키는 널리 쓰이는 약칭입니다.
메시지 예시: "Order failed: not enough money"
"No money"
원인: 증거금이 부족하여 EA가 새 포지션을 열 수 없습니다.
대처법:
- MT5의 거래 탭에서 현재 증거금 유지율을 확인합니다
- 유지율이 100%에 근접하거나 그 이하라면 추가 입금을 검토합니다
- EA의
RiskPercent설정을 낮춰 포지션 크기를 줄입니다 - 보유 중인 포지션 일부를 수동으로 청산하여 증거금을 확보합니다
📖 잔고가 충분해 보이는데도 발생하는 이유와 이를 방지하는 MQL5 코드는 MT5의 Not enough money — 원인과 해결 방법을 참고하세요.
10027 — 클라이언트에서 자동 매매 비활성화 (TRADE_RETCODE_CLIENT_DISABLES_AT)
관련 MT5 런타임 오류: 4752 ERR_TRADE_DISABLED. MT4 대응 코드: 4109 ERR_TRADE_NOT_ALLOWED.
메시지 예시: "AutoTrading disabled by client"
"Trade is not allowed"
원인: MT5의 자동 매매가 꺼져 있습니다.
대처법:
- MT5 툴바의 Algo Trading 버튼을 클릭하여 켭니다(녹색으로 바뀌어야 합니다)
- 도구 → 옵션 → Expert Advisors에서 Allow Algo Trading을 활성화한 뒤 MT5를 재시작합니다
VPS 재부팅 후 MT5가 자동으로 실행될 때 이 오류가 자주 발생합니다.
📖 전체 권한 체계(옵션 설정, 차트별 Allow Algo Trading, 투자자 비밀번호, 10027과 10026의 차이)는 MT5 자동 매매 비활성화 — 완전 해결을 참고하세요.
10018 — 시장 마감 (TRADE_RETCODE_MARKET_CLOSED)
MT4 대응 코드: 132 ERR_MARKET_CLOSED.
메시지 예시: "Market closed"
원인: 거래 시간 외(주말 또는 공휴일)에 EA가 진입을 시도했습니다.
대처법: 조치할 필요가 없습니다. 주말에는 시장이 닫혀 있으며, 이 시간대에 진입을 시도하면 이 오류가 발생합니다. 시장이 다시 열리면 EA는 자동으로 재개됩니다.
📖 평일에도 발생하나요? 심볼별 거래 세션, 서버 시간, 청산 전용 모드는 Market closed (10018/132) — 원인과 해결 방법에서 다룹니다.
10016 — 잘못된 스탑 (TRADE_RETCODE_INVALID_STOPS)
MT4 대응 코드: 130 ERR_INVALID_STOPS.
메시지 예시: "Invalid stops"
원인: SL(스탑로스) 또는 TP(테이크프로핏) 값이 브로커의 최소 스탑 레벨 요건을 위반했습니다.
대처법:
- 브로커의 스탑 레벨(최소 SL 거리)을 확인합니다: MT5에서 심볼 우클릭 → 사양 → 스탑 레벨 항목을 확인합니다
- EA의 SL 거리가 스탑 레벨보다 큰지 확인합니다
- 이 오류는 ATR 값이 매우 작은 저변동성 시간대에 가장 자주 발생합니다
📖 스탑 레벨의 실제 작동 방식, 10016과 130의 차이, 재발을 막는 MQL5 코드는 Invalid stops (10016/130) — 완전 해결을 참고하세요.
10021 — 호가 없음 (TRADE_RETCODE_PRICE_OFF)
MT4 대응 코드: 136 ERR_OFF_QUOTES.
메시지 예시: "Off quotes"
원인: 브로커 서버에서 호가가 수신되지 않습니다. 연결 문제입니다.
대처법:
- MT5 화면 하단 상태 표시줄에서 연결 상태를 확인합니다
- 연결이 끊어졌다면 MT5를 재시작합니다
- 브로커의 서버 상태 페이지에서 장애 여부를 확인합니다
- VPS의 네트워크 연결을 확인합니다
📖 리쿼트(10004/138)와의 차이, 편차(deviation) 조정, 재시도 구현은 Off quotes와 리쿼트 (10021/10004) — 완전 해결을 참고하세요.
📖 브로커를 바꾼 직후 **Unsupported filling mode (10030)**가 나오나요? 그것은 다른 문제입니다. Unsupported filling mode (10030) — 해결 방법을 참고하세요.
10012 — 요청 시간 초과 (TRADE_RETCODE_TIMEOUT)
MT4 대응 코드: 128 ERR_TRADE_TIMEOUT.
메시지 예시: "Request canceled by timeout"
원인: 서버 혼잡 또는 네트워크 지연으로 주문이 시간 초과되었습니다.
대처법:
- 서버 부하가 높은 주요 뉴스 발표 직후에 가장 자주 발생합니다
- 보통 EA가 다음 틱에서 재시도하므로 별도 조치는 필요 없습니다
- 빈번하게 발생한다면 VPS의 네트워크 환경을 점검하거나 다른 브로커를 검토하세요
10006 — 요청 거부 (TRADE_RETCODE_REJECT)
메시지 예시: "Request rejected"
원인: 브로커가 주문을 거부했습니다. 대개 스프레드가 한도를 초과했거나 가격이 너무 빠르게 움직인 경우입니다.
대처법:
MaxSpreadPoints설정을 확인합니다. 스프레드가 크게 확대될 때 이 오류가 자주 발생합니다- 뉴스 발표 중이거나 직후라면 예상되는 동작이므로 무시해도 됩니다
- 빈번하게 발생한다면
MaxSpreadPoints값을 약간 높여 보세요
"Margin level too low"
메시지 예시: "Margin level too low. Skip signal."
원인: EA의 UseMarginCheck = true 설정이 증거금 유지율이 MinMarginLevel(예: 200%) 아래로 떨어진 것을 감지하여 신규 진입을 자동으로 차단한 상태입니다.
대처법:
- 이것은 정상적인 보호 동작이며 오류가 아닙니다
- 증거금 유지율이 회복되면 진입이 자동으로 재개됩니다
- 근본적인 해결책: 추가 입금하거나
RiskPercent를 낮춥니다
"No signal on this bar" 또는 "Wait for next bar"
이것은 오류가 아니라 디버그 로그입니다.
"No signal. ATR=1245, EMA(50)=1998.23"
EA는 바마다 차트를 평가하고, 진입 조건이 충족되지 않으면 그 내용을 로그로 남깁니다. 정상적인 동작입니다.
오류 우선순위 분류
| 우선순위 | 오류 | 대응 |
|---|---|---|
| 긴급 | 10019 증거금 부족 (MT4: 134) | 즉시 입금하거나 로트를 줄입니다 |
| 긴급 | 10027 자동 매매 비활성화 / 4752 (MT4: 4109) | Algo Trading을 켭니다 |
| 주의 | 10016 잘못된 스탑 (MT4: 130) | SL 설정을 재검토합니다 |
| 주의 | 10030 잘못된 체결 방식 | 심볼이 지원하는 체결 방식을 설정합니다 |
| 주의 | 10021 호가 없음 (MT4: 136)이 반복 발생 | 연결 환경을 확인합니다 |
| 정상 | 10018 시장 마감 (MT4: 132) 주말에만 | 조치 불필요 |
| 정상 | 10012 시간 초과 (MT4: 128) 간헐적 | 조치 불필요 |
| 정상 | Margin level too low | 증거금이 낮을 때의 정상적인 보호 동작 |
Expert 탭 로그를 효율적으로 확인하는 방법
로그 필터링
Expert 탭 안에서 우클릭한 뒤 필터를 선택하면 특정 EA 또는 특정 오류 유형의 로그만 표시할 수 있습니다.
로그 파일 저장 위치
MT5 로그 파일은 다음 경로에 저장됩니다:
C:\Users\[사용자명]\AppData\Roaming\MetaQuotes\Terminal\[ID]\MQL5\Logs\
파일은 날짜별로 자동 생성됩니다. 오류를 조사할 때 이 폴더를 열어 보세요.
정리
EA 오류의 대부분은 다음 4가지 범주로 나뉩니다:
- 증거금 부족 (10019) — 추가 입금하거나 로트를 줄입니다
- 자동 매매 꺼짐 (10027 / 4752) — Algo Trading 버튼을 클릭하여 켭니다
- 연결 문제 (10021 / 10031) — MT5를 재시작하거나 VPS 네트워크를 확인합니다
- 정상적인 동작 — 조치 불필요 (주말 시장 마감, 스프레드 회피 등)
Expert 탭을 매일 확인하는 습관을 들여, 긴급 오류(10019와 10027)가 문제를 일으키기 전에 빠르게 잡아내세요.
FAQ
Q: 오류 코드는 어디서 찾을 수 있나요?
MQL5 공식 레퍼런스에 모든 코드가 정리되어 있습니다. 10004–10046 범위는 거래 서버 리턴 코드, 4xxx 범위는 런타임 오류에서 확인할 수 있습니다. MT5 내장 도움말(F1 키)에서도 검색할 수 있습니다.
Q: 리턴 코드(retcode)와 GetLastError()는 무엇이 다른가요?
리턴 코드(10004–10046)는 주문에 대한 거래 서버의 응답이며 MqlTradeResult.retcode에 저장됩니다. GetLastError()는 MQL5 프로그램 자체의 런타임 오류(4xxx와 5xxx)를 반환합니다. OrderSend()가 실패하면 둘 다 나오는 경우가 많습니다. GetLastError()에서는 4756이, 그리고 실제 원인을 알려 주는 리턴 코드가 함께 반환됩니다.
Q: 오류가 자주 발생하면 EA를 중지해야 하나요?
10018(시장 마감)이나 10012(시간 초과)가 간헐적으로 나타나는 정도라면 EA를 중지할 필요가 없습니다. 다만 10019(증거금 부족)가 반복된다면 EA를 일시 정지하고 증거금 상황을 점검한 뒤, 해결되면 다시 시작하세요.
Q: "Invalid account" 오류가 표시됩니다.
MT5 로그인 정보(서버명, 로그인 ID 또는 비밀번호)가 잘못되었을 수 있습니다. 파일 → 계좌 개설에서 다시 로그인하세요.
Q: 오류는 없는데 EA가 전혀 진입하지 않습니다.
오류도 없고 진입도 없다면 EA가 진입 조건이 충족되기를 기다리고 있을 뿐이며, 지극히 정상입니다. EA는 모든 캔들에서 진입하지 않고 모든 조건이 맞을 때만 진입합니다. 조금 더 지켜보세요. H1 EA가 하루에 1~3회 진입한다면 정상적으로 작동하는 것입니다.
관련 기사
📧 무료 이메일 강좌(총 8통) + 구독자 전용 MT5 지표 13종 팩
가입 직후, 사이트의 MT5 지표 13종을 컴파일된 파일(.ex5)·소스 코드·사용 가이드로 묶은 구독자 전용 팩의 다운로드 링크를 보내 드립니다. 이어서 FX 자동매매의 본질, 백테스트를 올바르게 읽는 법, 브로커 선택 요령 등을 총 8통(처음 5일은 매일 1통, 이후 가입 7·14·30일 후)으로 전해 드립니다. MQL5 Market 판(출시가·판매량에 따라 단계적 인상)의 가격 인상 전 알림도 받으실 수 있습니다. 이 사이트의 EA는 제휴 브로커의 실계좌가 있으면 무료입니다.
※ 개인정보는 엄격히 보호. 언제든 구독 해지 가능.
EA나 FX에 대해 궁금한 점이 있나요?
Nattzy 트레이딩 포럼에 질문을 올릴 수 있습니다(무료 가입). 이 글의 내용이 아니어도 EA 설정이나 브로커 선택 등 어떤 질문이든 환영합니다.
Nattzy에서 질문하기 ↗