Interrupções e limites de requisições.
A API recupera o terminal. Você controla o cliente.
Baixar o exemplo em Python · PY ↓
Passo a passo por escrito
- 0:00
Interrupções e limites de requisições.
Este tutorial mostra como lidar com interrupções no MT5 e limites de requisições: aguardar a recuperação da API, restabelecer o fluxo e repetir leituras com segurança. Usamos respostas reais de uma conta de demonstração.
- 0:21
Verifique a sessão existente.
Abra mt5.mrpc.pro. Guarde a chave de API e o id do terminal. Esta resposta gravada de ConnectState mostra Connected, com isConnected, isAlive e apiIsAlive iguais a true. O terminal está funcionando. Uma queda no navegador ou uma requisição que falhou não significa, por si só, que você precisa criar outro terminal.
- 0:48
Deixe a recuperação automática agir.
O MetaRPC monitora os terminais e tenta recuperar automaticamente as sessões ativas elegíveis, preservando o id. Seu aplicativo deve pausar as operações afetadas e dar tempo ao serviço, em vez de chamar Reconnect ou ConnectEx repetidamente. Consulte o estado em intervalos e confirme o acesso com AccountSummary antes de continuar. A recuperação leva tempo; não acontece instantaneamente após cada falha.
- 1:23
Corrija a causa do problema.
Uma desconexão intencional, sessão expirada, suspensão ou credenciais inválidas exigem a ação correspondente. Leia o motivo e atualize as credenciais ou resolva o problema da conta. Reconnect e ConnectByToken são ferramentas de recuperação explícita, não parte de um ciclo para toda requisição. Se uma sessão elegível continuar indisponível, mantenha as operações pausadas e informe ao suporte o código do erro e o horário.
- 1:59
Restabeleça o WebSocket do aplicativo.
O terminal e o WebSocket do aplicativo são conexões diferentes. Quando as leituras da conta voltarem a funcionar, feche o socket com falha e abra OnSymbolTick com o id salvo e a chave de API. Restaure as assinaturas dos símbolos. Estas mensagens reais de EURUSD mostram bid, ask e horários. Confirme a chegada de dados novos e evite fluxos duplicados. Um fluxo saudável pode permanecer aberto.
- 2:34
Reconheça uma resposta de limitação.
Esta recusa real de AccountSummary veio de um teste de leitura com limites definidos. HTTP Status Code 200 indica que a API devolveu uma resposta. O campo error não nulo contém TERMINAL_RATE_LIMIT_EXCEEDED e informa que a chamada não foi executada. O limite observado foi de trezentas chamadas não comerciais por minuto deslizante, compartilhadas pelos clientes do terminal. Consulte os limites atuais, sem fixar esse número permanentemente no código.
- 3:12
Respeite o tempo indicado pelo servidor.
Nesta resposta, error.properties contém o par chave e valor RetryAfterSeconds, com valor 1. Aguarde pelo menos um segundo e acrescente um pequeno atraso aleatório antes de repetir a leitura. Pause também os outros processos que usam a cota do terminal. Se houver outra recusa, leia o novo prazo. Para HTTP Status Code 429, respeite o cabeçalho Retry-After.
- 3:45
Retome aos poucos.
Depois de esperar, a leitura real volta a funcionar: HTTP Status Code 200, sem erro de API e com dados da conta demo. Não reenvie todas as leituras acumuladas de uma vez. Armazene informações repetidas em cache, coordene a frequência entre processos e use OnSymbolTick para cotações. Uma limitação exige espera, não reconexão do terminal.
- 4:14
Defina regras claras para novas tentativas.
O exemplo Python é restrito a AccountSummary. Ele repete apenas respostas explícitas de limitação ou ocupação com um prazo válido, acrescenta atraso aleatório e para após três tentativas. Os demais erros são devolvidos ao chamador. Guarde credenciais em variáveis de ambiente. Use outra política limitada para interrupções; não aplique essa função de leitura a comandos de conexão nem a métodos de negociação.
- 4:48
Esclareça uma negociação incerta.
Se uma requisição de negociação perder a resposta, a corretora pode já tê-la processado. A recuperação automática não informa o resultado da negociação. Quando o acesso voltar, consulte OpenedOrders e DealsHistory. Use os tickets disponíveis e compare símbolo, direção, volume e horário. Negociações semelhantes podem ser confundidas: mantenha uma requisição não esclarecida pausada, em vez de reenviá-la automaticamente.
- 5:24
Encerre a sessão corretamente.
Ao encerrar a sessão intencionalmente, pare as assinaturas e chame Disconnect. O fluxo de demonstração foi parado e o terminal desconectado; nenhuma negociação foi alterada. Lembre-se: o MetaRPC recupera terminais elegíveis, o cliente restabelece seu socket quando necessário, espera diante de limites e esclarece resultados incertos antes de enviar outra negociação.