O catalogador troca de par, mas o robô continua entrando nos antigos
Costuma ser duas listas diferentes em vez de uma: o catalogador escreve o resultado numa variável, e o loop de entrada lê outra — uma cópia antiga que nunca foi substituída.
Onde costuma estar o bug
Padrão clássico: no começo do script, melhores_pares =
catalogar() roda uma vez. O loop principal lê essa variável pra sempre.
Quando a recatalogação roda de novo (a cada N horas, por exemplo), ela cria uma nova lista com outro nome ou escopo, e a variável que o loop lê
nunca é reatribuída.
melhores_pares = catalogar() # roda 1 vez
def recatalogar_periodicamente():
novos = catalogar()
# esqueceu de fazer 'global melhores_pares' e reatribuir
return novos # a lista nova morre aqui
Como resolver
Use UMA fonte de verdade pros pares ativos
Uma variável global (ou um objeto compartilhado) que tanto o catalogador quanto o loop de entrada leem e escrevem no mesmo lugar:
def recatalogar_periodicamente():
global melhores_pares
melhores_pares = catalogar() # agora o loop principal ve a troca
Loggue a troca quando ela acontecer
Print com horário toda vez que a lista de pares mudar. Se o log mostra a troca mas as entradas continuam nos pares antigos, a causa é outra (thread separada sem lock, por exemplo); se o log não mostra a troca, o problema é o catalogador não estar rodando de novo, não a leitura.
Se além disso o robô roda em thread separada da recatalogação, vale conferir robô travando ou lento — acesso concorrente à mesma lista sem proteção também gera resultado inconsistente.
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