← 모든 튜토리얼
MT5 API · 5:58

연결 중단과 요청 제한 처리하기.

터미널 복구는 API에 맡기고 클라이언트를 제어하세요.

Python 예제 다운로드 · PY ↓

단계별 설명

  1. 0:00

    연결 중단과 요청 제한 처리하기.

    이 튜토리얼에서는 MT5 연결 중단과 요청 제한을 처리하는 방법을 설명합니다. API 복구를 기다리고, 스트림을 복원하고, 읽기 요청을 안전하게 재시도합니다. 데모 계정의 실제 응답을 사용합니다.

  2. 0:20

    기존 세션부터 확인하세요.

    mt5.mrpc.pro를 열고 API 키와 저장한 터미널 id를 유지하세요. 녹화된 ConnectState 응답은 Connected 상태이며 isConnected, isAlive, apiIsAlive가 모두 true입니다. 터미널이 정상이라는 뜻입니다. 브라우저 연결이 끊기거나 요청 하나가 실패했다고 새 터미널이 필요한 것은 아닙니다.

  3. 0:49

    자동 복구가 진행되도록 기다리세요.

    MetaRPC는 터미널 상태를 감시하고 복구 대상인 활성 세션을 자동으로 복원하려고 시도합니다. 터미널 id는 유지됩니다. 애플리케이션은 Reconnect나 ConnectEx를 반복 호출하지 말고 해당 작업을 일시 중지한 뒤 복구 시간을 줘야 합니다. 간격을 두고 상태를 확인하고, AccountSummary로 계정 접근이 정상인지 확인한 다음 재개하세요. 복구에는 시간이 필요하며 모든 실패 직후 즉시 완료되지는 않습니다.

  4. 1:27

    오류 원인에 맞게 대응하세요.

    의도적인 연결 종료, 세션 만료, 이용 중지, 잘못된 인증 정보에는 각각 맞는 조치가 필요합니다. 오류 원인을 읽고 인증 정보를 갱신하거나 계정 문제를 해결하세요. Reconnect와 ConnectByToken은 명시적 복구 도구이며 모든 요청의 재시도 루프에 넣는 함수가 아닙니다. 복구 대상 세션이 계속 불가능하면 작업을 멈춘 채 오류 코드와 발생 시간을 지원팀에 전달하세요.

  5. 2:00

    애플리케이션의 WebSocket을 복원하세요.

    터미널 연결과 애플리케이션의 WebSocket은 서로 다릅니다. 계정 읽기가 다시 성공하면 실패한 소켓을 닫고 저장한 id와 API 키로 OnSymbolTick을 여세요. 필요한 종목을 다시 구독합니다. 실제 EURUSD 메시지에는 bid, ask, 타임스탬프가 표시됩니다. 새 데이터가 들어오는지 확인하고 중복 스트림을 만들지 마세요. 정상 스트림은 그대로 유지해도 됩니다.

  6. 2:35

    실제 요청 제한 응답을 확인하세요.

    이 AccountSummary 거절 응답은 횟수를 제한한 읽기 테스트에서 얻었습니다. HTTP Status Code 200은 API가 응답을 반환했다는 뜻입니다. null이 아닌 error에는 TERMINAL_RATE_LIMIT_EXCEEDED가 들어 있고 호출이 실행되지 않았다고 설명합니다. 관찰된 한도는 터미널별 이동 시간창 일 분당 비거래 호출 삼백 회이며 모든 호출자가 공유합니다. 이 숫자를 고정하지 말고 현재 한도를 확인하세요.

  7. 3:12

    서버가 안내한 시간만큼 기다리세요.

    이 응답의 error.properties에는 RetryAfterSeconds라는 키와 값의 쌍이 있으며 값은 1입니다. 최소 일 초를 기다리고 짧은 무작위 지연을 더한 뒤 읽기를 재시도하세요. 같은 터미널 한도를 사용하는 다른 작업자도 멈춰야 합니다. 다시 거절되면 새 대기 시간을 적용하세요. HTTP Status Code 429에서는 Retry-After 헤더를 따르세요.

  8. 3:47

    요청을 점진적으로 재개하세요.

    기다린 뒤 실제 계정 읽기가 다시 성공했습니다. HTTP Status Code 200, API 오류 없음, 데모 계정 데이터가 반환됩니다. 밀린 읽기 요청을 한꺼번에 보내지 마세요. 반복 정보를 캐시하고 작업자 사이에서 요청 속도를 조절하며 실시간 시세에는 OnSymbolTick을 사용하세요. 요청 제한은 기다려야 한다는 뜻이지 터미널을 재연결하라는 뜻이 아닙니다.

  9. 4:21

    재시도 규칙을 명확하게 제한하세요.

    첨부 Python 예제는 AccountSummary 전용입니다. 명시적인 제한 또는 사용 중 응답에 유효한 대기 시간이 있을 때만 무작위 지연을 더해 재시도하고 세 번 뒤에는 중단합니다. 나머지 오류는 호출자에게 전달합니다. 인증 정보는 환경 변수에 보관하세요. 연결 중단에는 별도의 제한된 정책을 사용하고 이 읽기 함수를 연결 명령이나 거래 메서드에 그대로 적용하지 마세요.

  10. 4:56

    불확실한 거래 결과부터 확인하세요.

    거래 요청의 응답이 사라져도 브로커는 이미 처리했을 수 있습니다. 자동 복구만으로 그 거래 결과를 알 수는 없습니다. 접근이 복구되면 OpenedOrders와 DealsHistory를 확인하세요. 주문과 체결 티켓이 있으면 사용하고 종목, 방향, 수량, 시간을 비교하세요. 비슷한 거래는 구분하기 어려울 수 있으므로 결과가 미확인인 요청은 자동으로 재전송하지 말고 보류하세요.

  11. 5:30

    세션을 올바르게 종료하세요.

    의도적으로 세션을 끝낼 때는 구독을 중지하고 Disconnect를 호출하세요. 데모 스트림과 터미널은 종료했으며 거래는 변경하지 않았습니다. 대상 터미널의 복구는 MetaRPC에 맡기고, 필요할 때 애플리케이션 소켓을 복원하세요. 제한 시에는 기다리고, 불확실한 거래 결과를 확인한 다음 새 거래를 제출하세요.