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.
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.
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