Se o seu bot em Python fica pendurado para sempre esperando o resultado de uma ordem na IQ Option, você provavelmente caiu no mesmo buraco que nós: os métodos check_win / check_win_v4 da biblioteca não oficial iqoptionapi entram em loop infinito nos ativos novos com sufixo -op (ex.: USDJPY-op). Este artigo documenta o problema real que enfrentamos em 2026 rodando nosso bot em produção (conta demo) e as três soluções que estão funcionando — com código mínimo de cada uma.

Antes de tudo: a iqoptionapi é uma biblioteca não oficial, mantida pela comunidade via engenharia reversa do WebSocket. Ela pode quebrar a qualquer momento, sem aviso. Se você quer uma base com API oficial e documentada, a alternativa é a Deriv — foi para lá que portamos parte do nosso bot.

O problema: por que check_win trava nos ativos -op

Os ativos “-op” são o produto de opções mais novo da IQ Option. O detalhe fatal: a plataforma não popula, para esses ativos, as mensagens de WebSocket que a lib espera para dar a ordem por encerrada. O check_win_v4 fica em while True aguardando um evento que nunca chega — e o seu bot congela com ele. Não é bug do seu código: é a lib esperando um contrato de mensagens que o produto novo não cumpre. Já detalhamos o funcionamento normal desses métodos em check_win_v4 e os métodos de resultado da iqoptionapi.

Solução 1 — Resultado por delta de saldo

A mais robusta das três, com uma pré-condição: o bot precisa operar uma ordem por vez (o nosso opera). Se só existe uma ordem em aberto, a variação do saldo depois da expiração é o resultado, matematicamente: win = +stake × payout, loss = −stake, empate = 0. Nada de esperar mensagem nenhuma.

def resultado_por_delta(api, saldo_antes, stake, tol=0.01): “””Deduz o resultado pela variacao do saldo (1 ordem por vez!).””” saldo_depois = api.get_balance() delta = round(saldo_depois – saldo_antes, 2) if delta > tol: return “win”, delta # ~ +stake * payout if delta < -tol: return "loss", delta # ~ -stake return "empate", 0.0 # uso: saldo_antes = api.get_balance() ok, order_id = api.buy(stake, "USDJPY-op", "call", 2) # ... aguardar a liquidacao (ver Solucao 2) ... status, lucro = resultado_por_delta(api, saldo_antes, stake)

Simples, sem dependência do check_win. Mas repare no comentário “aguardar a liquidação” — é aí que mora a segunda armadilha.

Solução 2 — Ler o saldo no minuto cheio (o bug do WIN que virou LOSS)

Descobrimos da pior forma: a IQ Option liquida a ordem no limite de minuto cheio (ou quarto de hora cheio), e não em “momento da compra + N minutos”. Se você comprar às 14:03:37 com expiração de 2 minutos, a liquidação não acontece às 14:05:37 — ela se alinha à grade de minutos da plataforma.

Bug real que vivemos: um WIN de +1.120 foi registrado como LOSS pelo bot, porque ele leu o saldo cedo demais — antes de a corretora creditar o prêmio. O delta ainda era negativo (só o débito do stake havia caído). Na estatística do dia, um trade vencedor virou derrota. Esse tipo de erro silencioso corrompe todos os seus números.

A correção: alinhar a leitura ao próximo minuto cheio após a expiração nominal, e depois fazer polling por até 2-3 minutos até o saldo estabilizar (duas leituras iguais em sequência):

import time def aguardar_liquidacao(api, saldo_antes, timeout=180): “””Espera o minuto cheio pos-expiracao e faz polling do saldo.””” # 1) dorme ate o proximo minuto cheio time.sleep(60 – time.time() % 60 + 1) # 2) polling ate o saldo mudar E estabilizar fim = time.time() + timeout anterior = api.get_balance() while time.time() < fim: time.sleep(5) atual = api.get_balance() if atual != saldo_antes and atual == anterior: return atual # mudou e estabilizou: liquidado anterior = atual return anterior # timeout: usa a ultima leitura

Solução 3 — Expiração adaptativa (turbo 2 min → binária 15 min)

Terceiro tropeço: às vezes a corretora recusa a ordem turbo porque a agenda daquela expiração está fechada para o ativo. Em vez de perder o sinal, o bot tenta o plano B — refazer a ordem como binária de 15 minutos:

def comprar_adaptativo(api, stake, ativo, direcao): “””Tenta turbo 2 min; se a agenda recusar, refaz como binaria 15 min.””” ok, order_id = api.buy(stake, ativo, direcao, 2) # turbo 2 min if ok: return order_id, “turbo-2m” ok, order_id = api.buy(stake, ativo, direcao, 15) # binaria 15 min if ok: return order_id, “binary-15m” return None, “recusada”

Atenção: uma expiração diferente muda a estatística do sinal — registre qual caminho foi usado em cada trade, como fazemos, para poder separar as amostras depois. Os fundamentos do buy e da leitura de resultado estão em iqoptionapi buy: enviar ordem e ler resultado.

Bônus: os ativos -op não aparecem em constants.ACTIVES

Outro tropeço de quem migra para os ativos novos: eles não vêm listados em constants.ACTIVES, então a lib nem sabe que existem. A saída é injetar os IDs na partida do bot:

from iqoptionapi import constants # injeta os ativos -op que a lib nao conhece (id conforme a plataforma) ATIVOS_OP = {“USDJPY-op”: 76, “GBPJPY-op”: 79} constants.ACTIVES.update(ATIVOS_OP)

E um detalhe de conta, não de código: no nosso caso, foi a conta verificada que liberou o acesso aos ativos -op. Se eles não aparecem para você, verifique o status da sua conta antes de caçar bug no Python.

O quadro geral: lib não oficial é dívida técnica assumida

As três soluções acima estão rodando em produção no nosso bot (em conta demo — os números estão em Resultados do bot em 3 corretoras). Mas não vamos maquiar a situação: tudo isso é engenharia em cima de uma biblioteca que a IQ Option não reconhece e pode invalidar amanhã. Foi exatamente por isso que portamos o bot também para a Deriv, que tem API oficial — a comparação entre as corretoras e o guia da lib estão em Python + IQ Option: a API não oficial.

Cansado de fazer engenharia reversa? A Deriv tem API oficial, documentada e com WebSocket estável — é a base do nosso estudo de 45 dias.

Conhecer a API da Deriv (conta demo) →

Link de afiliado. Desenvolva e teste sempre em demo.

Leia também

check_win_v4 e os métodos de resultado da iqoptionapi
iqoptionapi buy: enviar ordem e ler resultado (2026)
Python + IQ Option: a API não oficial explicada
As 2 estratégias que sobreviveram ao out-of-sample (regras completas)

Dan Machado

Desenvolvedor do projeto IA Trader Pro. Constrói e documenta em público um bot de opções binárias em Python, testado em conta demo em três corretoras (Deriv, IQ Option e Quotex) — publicando os números que funcionam e, principalmente, os que não funcionam.

Aviso: opções binárias são produtos de altíssimo risco e a maioria dos traders de varejo perde dinheiro. Os códigos deste artigo são exemplos educacionais, testados por nós em conta DEMO com biblioteca não oficial que pode quebrar a qualquer momento. Nada aqui é recomendação de investimento ou promessa de lucro. Nunca opere com dinheiro que você não pode perder.

Posts Similares