Nếu bot Python của bạn bị treo mãi mãi chờ kết quả một lệnh trên IQ Option, nhiều khả năng bạn đã rơi vào đúng cái hố như chúng tôi: các phương thức check_win / check_win_v4 của thư viện không chính thức iqoptionapi rơi vào vòng lặp vô hạn trên các tài sản mới có hậu tố -op (ví dụ: USDJPY-op). Bài viết này ghi lại vấn đề thực tế chúng tôi gặp năm 2026 khi chạy bot trong môi trường production (tài khoản demo) và ba giải pháp đang hoạt động — kèm mã tối giản cho từng giải pháp.

Trước hết: iqoptionapi là thư viện không chính thức, do cộng đồng duy trì bằng cách dịch ngược WebSocket. Nó có thể hỏng bất cứ lúc nào, không báo trước. Nếu bạn muốn một nền tảng với API chính thức và tài liệu đầy đủ, lựa chọn thay thế là Deriv — nơi chúng tôi đã port một phần bot của mình sang.

Vấn đề: vì sao check_win treo trên các tài sản -op

Các tài sản “-op” là sản phẩm quyền chọn mới nhất của IQ Option. Chi tiết chí mạng: nền tảng không đẩy, cho các tài sản này, những thông điệp WebSocket mà thư viện chờ đợi để coi lệnh là đã kết thúc. check_win_v4 nằm trong while True đợi một sự kiện không bao giờ đến — và bot của bạn đóng băng cùng nó. Không phải bug trong mã của bạn: đó là thư viện đang chờ một hợp đồng thông điệp mà sản phẩm mới không tuân theo. Chúng tôi đã mô tả chi tiết hoạt động bình thường của các phương thức này trong check_win_v4 và các phương thức đọc kết quả của iqoptionapi.

Giải pháp 1 — Đọc kết quả bằng delta số dư

Giải pháp bền vững nhất trong ba, kèm một điều kiện tiên quyết: bot phải giao dịch mỗi lần một lệnh (bot của chúng tôi đúng như vậy). Nếu chỉ có một lệnh đang mở, biến động số dư sau khi hết hạn chính là kết quả, về mặt toán học: win = +stake × payout, loss = −stake, hòa = 0. Không cần chờ bất kỳ thông điệp nào.

def resultado_por_delta(api, saldo_antes, stake, tol=0.01): “””Suy ra ket qua tu bien dong so du (moi lan 1 lenh!).””” 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 # cach dung: saldo_antes = api.get_balance() ok, order_id = api.buy(stake, "USDJPY-op", "call", 2) # ... cho lenh duoc thanh toan (xem Giai phap 2) ... status, lucro = resultado_por_delta(api, saldo_antes, stake)

Đơn giản, không phụ thuộc vào check_win. Nhưng hãy để ý chú thích “cho lenh duoc thanh toan” — chính đó là cái bẫy thứ hai.

Giải pháp 2 — Đọc số dư ở phút tròn (bug WIN biến thành LOSS)

Chúng tôi phát hiện theo cách đau đớn nhất: IQ Option thanh toán lệnh tại ranh giới phút tròn (hoặc khắc giờ tròn), chứ không phải “thời điểm mua + N phút”. Nếu bạn mua lúc 14:03:37 với expiry 2 phút, việc thanh toán không diễn ra lúc 14:05:37 — nó căn theo lưới phút của nền tảng.

Bug thật chúng tôi đã trải qua: một WIN +1.120 bị bot ghi nhận là LOSS, vì nó đọc số dư quá sớm — trước khi sàn cộng tiền thưởng. Delta khi đó vẫn âm (mới chỉ có khoản trừ stake được hạch toán). Trong thống kê của ngày hôm đó, một lệnh thắng biến thành thua. Loại lỗi âm thầm này làm hỏng toàn bộ số liệu của bạn.

Cách sửa: căn thời điểm đọc vào phút tròn kế tiếp sau expiry danh nghĩa, rồi polling trong tối đa 2-3 phút cho tới khi số dư ổn định (hai lần đọc liên tiếp giống nhau):

import time def aguardar_liquidacao(api, saldo_antes, timeout=180): “””Cho phut tron sau expiry va polling so du.””” # 1) ngu den phut tron ke tiep time.sleep(60 – time.time() % 60 + 1) # 2) polling den khi so du thay doi VA on dinh 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 # da thay doi va on dinh: da thanh toan anterior = atual return anterior # timeout: dung lan doc cuoi

Giải pháp 3 — Expiry thích ứng (turbo 2 phút → nhị phân 15 phút)

Cú vấp thứ ba: đôi khi sàn từ chối lệnh turbo vì lịch của mức expiry đó đang đóng với tài sản. Thay vì bỏ lỡ tín hiệu, bot thử phương án B — đặt lại lệnh dưới dạng nhị phân 15 phút:

def comprar_adaptativo(api, stake, ativo, direcao): “””Thu turbo 2 phut; neu lich tu choi, dat lai thanh nhi phan 15 phut.””” ok, order_id = api.buy(stake, ativo, direcao, 2) # turbo 2 phut if ok: return order_id, “turbo-2m” ok, order_id = api.buy(stake, ativo, direcao, 15) # nhi phan 15 phut if ok: return order_id, “binary-15m” return None, “recusada”

Chú ý: một expiry khác làm thay đổi thống kê của tín hiệu — hãy ghi lại đường đi nào được dùng cho từng lệnh, như chúng tôi làm, để sau này tách được các mẫu. Nền tảng của buy và cách đọc kết quả nằm trong iqoptionapi buy: gửi lệnh và đọc kết quả.

Bonus: các tài sản -op không xuất hiện trong constants.ACTIVES

Một cú vấp khác của những ai chuyển sang tài sản mới: chúng không được liệt kê trong constants.ACTIVES, nên thư viện thậm chí không biết chúng tồn tại. Lối thoát là tiêm các ID ngay khi khởi động bot:

from iqoptionapi import constants # tiem cac tai san -op ma lib khong biet (id theo nen tang) ATIVOS_OP = {“USDJPY-op”: 76, “GBPJPY-op”: 79} constants.ACTIVES.update(ATIVOS_OP)

Và một chi tiết thuộc về tài khoản, không phải mã: trong trường hợp của chúng tôi, chính tài khoản đã xác minh mới mở quyền truy cập các tài sản -op. Nếu chúng không hiện ra với bạn, hãy kiểm tra trạng thái tài khoản trước khi đi săn bug trong Python.

Bức tranh lớn: thư viện không chính thức là món nợ kỹ thuật tự nguyện gánh

Ba giải pháp trên đang chạy production trong bot của chúng tôi (trên tài khoản demo — số liệu nằm trong Kết quả bot trên 3 sàn). Nhưng chúng tôi sẽ không tô vẽ tình hình: tất cả là kỹ thuật xây trên một thư viện mà IQ Option không công nhận và có thể vô hiệu hóa ngay ngày mai. Chính vì vậy chúng tôi cũng đã port bot sang Deriv, nơi có API chính thức — phần so sánh giữa các sàn và hướng dẫn về thư viện nằm trong Python + IQ Option: API không chính thức.

Mệt mỏi với việc dịch ngược? Deriv có API chính thức, tài liệu đầy đủ và WebSocket ổn định — đây là nền tảng của nghiên cứu 45 ngày của chúng tôi.

Khám phá API của Deriv (tài khoản demo) →

Link tiếp thị liên kết. Hãy luôn phát triển và thử nghiệm trên demo.

Đọc thêm

check_win_v4 và các phương thức đọc kết quả của iqoptionapi
iqoptionapi buy: gửi lệnh và đọc kết quả (2026)
Python + IQ Option: giải thích API không chính thức
2 chiến lược sống sót qua out-of-sample (quy tắc đầy đủ)

Dan Machado

Nhà phát triển dự án IA Trader Pro. Xây dựng và ghi lại công khai một bot quyền chọn nhị phân bằng Python, được thử nghiệm trên tài khoản demo tại ba sàn (Deriv, IQ Option và Quotex) — công bố cả những con số hiệu quả và, quan trọng nhất, những con số không hiệu quả.

Cảnh báo: quyền chọn nhị phân là sản phẩm rủi ro cực cao và phần lớn nhà giao dịch nhỏ lẻ mất tiền. Các đoạn mã trong bài viết này là ví dụ mang tính giáo dục, được chúng tôi thử nghiệm trên tài khoản DEMO với một thư viện không chính thức có thể hỏng bất cứ lúc nào. Không điều gì ở đây là khuyến nghị đầu tư hay lời hứa lợi nhuận. Đừng bao giờ giao dịch bằng số tiền bạn không thể để mất.

Similar Posts