“asset is not available”: o par está fechado, não quebrado
Na maioria das vezes não há nada errado com o seu código: o par simplesmente não está aberto neste momento, ou você pediu o nome errado dele.
As três causas, em ordem de frequência
1. O mercado está fechado
Pares de moeda real seguem o horário do mercado mundial: fecham na sexta à noite e abrem no domingo à noite, com pausas diárias. Robô que roda 24 horas vai bater nisso todo fim de semana.
2. Você pediu o par normal, mas o aberto é o OTC (ou o contrário)
Fim de semana quase sempre só tem OTC — e OTC é um ativo
diferente, com nome diferente e preço próprio. EURUSD e
EURUSD-OTC não são o mesmo ativo, e uma estratégia medida num
raramente vale no outro.
3. A biblioteca não conhece o ativo
Se o ativo é novo, o nome dele pode não existir na tabela de constantes da biblioteca. Isso costuma vir junto com “not found consts”.
Como resolver
Pergunte à corretora o que está aberto, em vez de supor
A própria API responde. Consulte antes de cada ciclo e opere só no que estiver aberto de verdade:
abertos = api.get_all_open_time()
# 'turbo', 'binary' ou 'digital', conforme o que você opera
if abertos['turbo']['EURUSD']['open']:
print('pode operar')
else:
print('fechado agora')
Escolha o nome certo automaticamente
Em vez de escrever o par fixo no código, deixe o robô cair pro OTC quando o normal estiver fechado — e saiba em qual dos dois está:
def par_disponivel(api, base='EURUSD', tipo='turbo'):
abertos = api.get_all_open_time()
for nome in (base, base + '-OTC'):
info = abertos.get(tipo, {}).get(nome)
if info and info['open']:
return nome
return None
Trate o fechado como estado normal, não como falha
Mercado fechado não é erro: é sábado. O robô deve dormir e tentar depois, sem derrubar o processo nem encher o log de exceção.
Backtest feito em dado do par normal não vale para o OTC. O OTC tem comportamento próprio e volatilidade própria. Se a sua estratégia foi medida em EURUSD e o robô opera EURUSD-OTC no fim de semana, o número que você confiava não descreve o que está acontecendo.
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