Binaryzando Todos os erros →

check_win_v4 travando (ou mentindo) o resultado da operação

É um dos erros mais caros do nicho, porque ele não quebra o programa — ele pendura. O robô fica parado esperando um resultado que nunca chega, ou registra placar errado e você só descobre no extrato.

o robô para em check_win_v4(id) e nunca mais sai / resultado sai como 0 ou None / o placar do robô não bate com o da corretora

Por que trava

check_win_v4 é bloqueante: ele fica num laço esperando a corretora avisar que aquela ordem fechou. Se a mensagem de fechamento se perder — porque o WebSocket caiu e voltou, porque a corretora demorou, porque a ordem foi cancelada — ninguém avisa a função. Ela não dá erro: ela espera para sempre.

E existe o caso pior, que não trava: ele responde, mas responde errado (empate contado como derrota, valor zerado, ordem trocada). O robô segue rodando com um placar que não corresponde ao dinheiro que saiu da conta — e aí toda estatística que você olha depois está contaminada.

Como resolver

Ponha um limite de tempo. Sempre.

Nenhuma espera de rede pode ser infinita. Se estourou o prazo, o robô segue e resolve aquela ordem depois — em vez de morrer de pé:

import time

def esperar_resultado(api, id_ordem, limite=180):
    fim = time.time() + limite
    while time.time() < fim:
        ok, lucro = api.check_win_v4(id_ordem)
        if ok:
            return lucro
        time.sleep(1)
    return None   # pendente: apurar por outro caminho

Confira o resultado na vela, não só na resposta da corretora

Você sabe o par, o horário de entrada, a duração e a direção. Isso basta para recalcular o resultado do zero a partir do histórico de preço: compare o fechamento da vela de entrada com o da vela de saída. É uma segunda fonte, independente, para a mesma resposta.

Fazer as duas contas e comparar é o que separa “a estratégia foi mal” de “o robô anotou errado”. São problemas diferentes, com conserto diferente.

Trate empate como empate

Quando o preço de saída é igual ao de entrada, não é nem win nem loss — e muita implementação joga isso no balde de derrota. Num par parado, isso sozinho já distorce a taxa de acerto que você vê.

Guarde a ordem antes de esperar por ela

Grave id, par, horário, direção e valor no momento do envio. Se o processo cair enquanto espera, a ordem continua registrada e pode ser apurada depois. Placar que só existe na memória some junto com o programa.

A raiz do problema

Um robô que confia cegamente na resposta da corretora não tem como saber que errou. A única forma de descobrir é ter o histórico de velas do lado e refazer a conta. É exatamente isso que o Binaryzando faz com as estratégias antes de qualquer dinheiro entrar.

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