Binaryzando Todos os erros →

“Connection is already closed” no robô de opções binárias

O robô abre, opera bem por um tempo e do nada para com essa mensagem. Não é bug do seu código: é a conexão WebSocket com a corretora que caiu e ninguém religou.

websocket._exceptions.WebSocketConnectionClosedException: Connection is already closed.

O que está acontecendo

A biblioteca conversa com a corretora por um WebSocket — uma conexão aberta o tempo todo, diferente de uma requisição comum que abre e fecha. Essa conexão cai por motivos banais: oscilação de internet, o servidor da corretora derrubando sessões ociosas, o computador entrando em suspensão, o Wi-Fi trocando de canal.

Quando cai, o objeto da API continua existindo na memória — ele só não tem mais um cano do outro lado. A próxima chamada que tentar mandar qualquer coisa levanta essa exceção. O erro não aparece na hora da queda: aparece no próximo uso. Por isso ele parece aleatório.

Como resolver

Verifique a conexão antes de cada operação, não só no início

A maioria dos robôs checa a conexão uma vez, no connect(), e nunca mais. Checar antes de cada ciclo custa quase nada:

if not api.check_connect():
    api.connect()

Reconecte com espera crescente (backoff)

Reconectar em loop apertado piora tudo: a corretora passa a recusar, e algumas contam isso como abuso. Espere um pouco mais a cada tentativa:

import time

def garantir_conexao(api, tentativas=6):
    for n in range(tentativas):
        if api.check_connect():
            return True
        api.connect()
        time.sleep(min(2 ** n, 60))   # 1s, 2s, 4s... até 60s
    return False

Nunca reconecte no meio de uma operação aberta

Este é o erro caro. Se a conexão cai com uma ordem já enviada, reconectar e mandar de novo pode duplicar a entrada. Reconecte, e só depois consulte qual foi o resultado da ordem que ficou para trás — sem reenviar nada.

Guarde o ponto em que parou

Se a luz cair, o robô precisa saber ao voltar o que estava aberto. Grave em arquivo (ou banco) o id de cada ordem enviada e o estado dela. Sem isso, toda queda vira operação órfã: dinheiro no mercado que o seu programa esqueceu.

Não confunda com bloqueio

Essa mensagem é queda de conexão, não bloqueio de conta. Se ela vier junto de falha de login repetida, aí sim vale olhar credencial e a situação da conta.

Antes de deixar o robó operar

Consertar o erro faz o robô rodar — não faz ele ganhar. O Binaryzando testa a sua estratégia no histórico real de velas antes de você arriscar dinheiro nela, e sela o resultado numa carta com código verificável — para o número não poder ser editado depois.

Testar minha estratégia