“Order timed out waiting for server confirmation”
Timeout de confirmação não significa que a ordem não foi. Significa que você não sabe. São coisas bem diferentes, e tratar as duas como iguais é o que transforma um aviso chato em entrada duplicada.
O que está acontecendo
O seu código mandou a ordem e ficou esperando a resposta com o id da operação. A resposta não chegou dentro do tempo que você (ou a biblioteca) definiu, e o programa desistiu de esperar.
Repare no que isso não diz: não diz que a corretora recusou, nem que a ordem falhou. A mensagem pode ter chegado lá, sido aceita, e só a confirmação ter se perdido no caminho de volta. Do lado de cá, sucesso e falha têm exatamente o mesmo sintoma.
Como resolver
NUNCA reenvie por reflexo
Este é o erro que custa dinheiro de verdade. Um retry automático em
cima de timeout de ordem pode abrir a mesma entrada duas vezes — e você só vai
descobrir olhando o extrato. Timeout de leitura de vela pode repetir à vontade;
timeout de ordem não.
Consulte antes de decidir qualquer coisa
Depois do timeout, o passo certo é perguntar à corretora o que ela tem: liste as operações abertas ou o histórico recente da conta e procure uma entrada naquele par, naquele valor, naquele minuto. Só depois decida se manda de novo.
Grave a intenção ANTES de enviar
Escreva num arquivo “vou abrir X, no par Y, às Z” antes da chamada, não depois. Se o programa morrer no meio, ao voltar ele sabe o que precisa conferir. Sem esse registro, toda queda no meio de uma ordem vira dinheiro no mercado que o seu robô esqueceu.
Ajuste o tempo de espera pro que a rede realmente faz
Timeout curto demais transforma lentidão normal em erro. Se você roda de casa, com Wi-Fi, o tempo de ida e volta oscila muito mais do que num servidor. Meça quanto costuma demorar de verdade e deixe folga — em vez de chutar 2 segundos porque estava assim no exemplo que você copiou.
Timeout ocasional é rede. Timeout constante costuma ser conexão pendurada — ver Connection is already closed — ou o servidor recusando por excesso de chamadas.
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