Si votre bot en Python reste suspendu indéfiniment en attendant le résultat d’un ordre chez IQ Option, vous êtes probablement tombé dans le même trou que nous : les méthodes check_win / check_win_v4 de la bibliothèque non officielle iqoptionapi entrent en boucle infinie sur les nouveaux actifs au suffixe -op (ex. : USDJPY-op). Cet article documente le problème réel que nous avons affronté en 2026 en faisant tourner notre bot en production (compte démo) et les trois solutions qui fonctionnent — avec le code minimal de chacune.

Avant tout : la iqoptionapi est une bibliothèque non officielle, maintenue par la communauté via l’ingénierie inverse du WebSocket. Elle peut casser à tout moment, sans préavis. Si vous voulez une base avec une API officielle et documentée, l’alternative est Deriv — c’est là que nous avons porté une partie de notre bot.

Le problème : pourquoi check_win se bloque sur les actifs -op

Les actifs « -op » sont le produit d’options le plus récent d’IQ Option. Le détail fatal : la plateforme ne remplit pas, pour ces actifs, les messages WebSocket que la lib attend pour considérer l’ordre comme clôturé. Le check_win_v4 reste dans un while True à attendre un événement qui n’arrive jamais — et votre bot gèle avec lui. Ce n’est pas un bug de votre code : c’est la lib qui attend un contrat de messages que le nouveau produit ne respecte pas. Nous avons déjà détaillé le fonctionnement normal de ces méthodes dans Python + IQ Option : l’API non officielle expliquée.

Solution 1 — Résultat par delta de solde

La plus robuste des trois, avec une pré-condition : le bot doit opérer un ordre à la fois (le nôtre le fait). S’il n’existe qu’un seul ordre ouvert, la variation du solde après l’expiration est le résultat, mathématiquement : win = +mise × payout, loss = −mise, égalité = 0. Pas besoin d’attendre le moindre message.

def resultado_por_delta(api, saldo_antes, stake, tol=0.01): «  » »Deduit le resultat par la variation du solde (1 ordre a la fois !). » » » 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 # utilisation : saldo_antes = api.get_balance() ok, order_id = api.buy(stake, "USDJPY-op", "call", 2) # ... attendre la liquidation (voir Solution 2) ... status, lucro = resultado_por_delta(api, saldo_antes, stake)

Simple, sans dépendance à check_win. Mais notez le commentaire « attendre la liquidation » — c’est là que se cache le deuxième piège.

Solution 2 — Lire le solde à la minute pleine (le bug du WIN devenu LOSS)

Nous l’avons découvert de la pire des manières : IQ Option liquide l’ordre à la limite de la minute pleine (ou du quart d’heure plein), et non à « moment de l’achat + N minutes ». Si vous achetez à 14:03:37 avec une expiration de 2 minutes, la liquidation n’a pas lieu à 14:05:37 — elle s’aligne sur la grille de minutes de la plateforme.

Bug réel que nous avons vécu : un WIN de +1.120 a été enregistré comme LOSS par le bot, parce qu’il a lu le solde trop tôt — avant que le courtier ne crédite le gain. Le delta était encore négatif (seul le débit de la mise était passé). Dans la statistique du jour, un trade gagnant est devenu une défaite. Ce type d’erreur silencieuse corrompt tous vos chiffres.

La correction : aligner la lecture sur la prochaine minute pleine après l’expiration nominale, puis faire du polling pendant 2-3 minutes maximum jusqu’à ce que le solde se stabilise (deux lectures identiques d’affilée) :

import time def aguardar_liquidacao(api, saldo_antes, timeout=180): «  » »Attend la minute pleine post-expiration et fait du polling du solde. » » » # 1) dort jusqu’a la prochaine minute pleine time.sleep(60 – time.time() % 60 + 1) # 2) polling jusqu’a ce que le solde change ET se stabilise 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 # a change et s'est stabilise : liquide anterior = atual return anterior # timeout : utilise la derniere lecture

Solution 3 — Expiration adaptative (turbo 2 min → binaire 15 min)

Troisième accroc : parfois le courtier refuse l’ordre turbo parce que l’agenda de cette expiration est fermé pour l’actif. Au lieu de perdre le signal, le bot tente le plan B — repasser l’ordre en binaire de 15 minutes :

def comprar_adaptativo(api, stake, ativo, direcao): «  » »Tente le turbo 2 min ; si l’agenda refuse, repasse en binaire 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) # binaire 15 min if ok: return order_id, « binary-15m » return None, « recusada »

Attention : une expiration différente change la statistique du signal — enregistrez quel chemin a été utilisé pour chaque trade, comme nous le faisons, pour pouvoir séparer les échantillons ensuite. Les fondamentaux du buy et de la lecture du résultat sont dans notre guide Python + IQ Option : l’API non officielle.

Bonus : les actifs -op n’apparaissent pas dans constants.ACTIVES

Autre accroc pour ceux qui migrent vers les nouveaux actifs : ils ne sont pas listés dans constants.ACTIVES, donc la lib ne sait même pas qu’ils existent. La sortie : injecter les IDs au démarrage du bot :

from iqoptionapi import constants # injecte les actifs -op que la lib ne connait pas (id selon la plateforme) ATIVOS_OP = {« USDJPY-op »: 76, « GBPJPY-op »: 79} constants.ACTIVES.update(ATIVOS_OP)

Et un détail de compte, pas de code : dans notre cas, c’est le compte vérifié qui a débloqué l’accès aux actifs -op. S’ils n’apparaissent pas chez vous, vérifiez le statut de votre compte avant de chasser un bug en Python.

Le tableau d’ensemble : une lib non officielle est une dette technique assumée

Les trois solutions ci-dessus tournent en production sur notre bot (en compte démo — les chiffres sont dans Résultats du bot chez 3 courtiers). Mais nous n’allons pas maquiller la situation : tout cela est de l’ingénierie par-dessus une bibliothèque qu’IQ Option ne reconnaît pas et peut invalider demain. C’est exactement pour cela que nous avons aussi porté le bot vers Deriv, qui a une API officielle — la comparaison entre les courtiers et le guide de la lib sont dans Python + IQ Option : l’API non officielle.

Fatigué de faire de l’ingénierie inverse ? Deriv a une API officielle, documentée et avec un WebSocket stable — c’est la base de notre étude de 45 jours.

Découvrir l’API de Deriv (compte démo) →

Lien d’affiliation. Développez et testez toujours en démo.

À lire aussi

OTC est une marche aléatoire : la preuve avec des données
Meilleures heures et jours pour trader le forex M1 (2026)
Python + IQ Option : l’API non officielle expliquée
Les 2 stratégies qui ont survécu à l’out-of-sample (règles complètes)

Dan Machado

Développeur du projet IA Trader Pro. Il construit et documente en public un bot d’options binaires en Python, testé en compte démo chez trois courtiers (Deriv, IQ Option et Quotex) — en publiant les chiffres qui fonctionnent et, surtout, ceux qui ne fonctionnent pas.

Avertissement : les options binaires sont des produits à très haut risque et la majorité des traders particuliers perdent de l’argent. Les codes de cet article sont des exemples éducatifs, testés par nous en compte DÉMO avec une bibliothèque non officielle qui peut casser à tout moment. Rien ici n’est une recommandation d’investissement ni une promesse de profit. Ne tradez jamais avec de l’argent que vous ne pouvez pas vous permettre de perdre.

Publications similaires