| Binance Python Bot: Hướng Dẫn API CCXT & Futures Trading Bot (2026) | HNDL

Được viết bởi Đặng Trí Thanh vào ngày 05/08/2026 lúc 09:53 | 72 lượt xem

Đặng Trí ThanhĐặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Hướng Nghiệp Dữ Liệu
Hướng dẫn lập trình bot auto trading bằng Python trên Binance, MT5 và chứng khoán.

Binance Python bot — nghe có vẻ phức tạp, nhưng thực ra chỉ gồm vài bước có thứ tự: tạo API key → cài thư viện → lấy dữ liệu → vào lệnh. Bài này tổng hợp trọn vẹn buổi học thực chiến “API CCXT & Futures Trading Bot Python” — từ lúc tạo tài khoản Binance, bấm từng nút tạo API key, đến chạy code Python thật sự mua/bán trên sàn.

Không bán khóa học, không hứa lợi nhuận. Bài này cầm tay chỉ việc cho bạn cách kết nối Binance bằng Python một cách an toàn, hiểu từng dòng code, để bạn tự xây bot auto trading của riêng mình — thay vì mua bot hộp đen không kiểm soát.

1. Binance là gì? Vì sao học bot trên Binance?

Binance là sàn giao dịch tiền mã hóa (crypto) tập trung lớn nhất thế giới. Trên sàn này bạn có thể:

  • Mua/bán hàng trăm loại coin (Bitcoin, ETH, BNB, NEAR…)
  • Chuyển coin giữa các sàn khác
  • Đổi coin sang tiền pháp định (tiền do chính phủ bảo hộ như USD, VND)

Quan trọng hơn, Binance có API mạnh mẽ — cho phép bot Python đọc dữ liệu và đặt lệnh tự động. Đây là nền tảng lý tưởng để học lập trình bot trading trước khi chuyển sang Forex/MT5, vì mọi thao tác đều có thể kiểm tra và gỡ lỗi dễ dàng.

2. Tạo API Key Binance an toàn (từng bước)

Trước khi viết code, bạn cần cặp khóa API để bot được phép đọc tài khoản và đặt lệnh. Làm đúng thứ tự:

  1. Vào binance.comĐăng nhập (tạo tài khoản bằng số điện thoại/email nếu chưa có).
  2. Bấm vào hình người (Account) ở góc phải → chọn API Management.
  3. Bấm Create API → chọn System generated.
  4. Đặt label (tên) — ví dụ lập-trinh-bot.
  5. Xác thực bằng 2FA (email + mã Google Authenticator).
  6. Enable quyền giao dịch:
  • Bật Enable Spot (giao dịch spot)
  • Bật Enable Futures (giao dịch futures — cho bot sau này)
  1. Restrict IP (quan trọng!): bật “Restrict access to trusted IPs only”, gắn đúng IP máy bạn đang dùng (vào My IP address để lấy). Nếu đổi IP/đi nơi khác phải cập nhật lại, nếu không bot sẽ báo lỗi.
  2. Enable Symbol whitelist: chọn đúng các mã bạn sẽ giao dịch (BTC, ETH, BNB, NEAR, XRP…) — hạn chế rủi ro nếu key lộ.
  3. Nhấn Confirm → LƯU NGAY API key + Secret key ra file an toàn.

3. Cài đặt môi trường Python

Trong terminal, cài các thư viện cần thiết:

pip install ccxt

pip install pandas

pip install mplfinance

pip install python-binance

pip install requests

4. Lấy thông tin tài khoản bằng Python (Spot & Futures)

Bây giờ là phần code thật sự. Dán API key + Secret key vào, chạy từng bước:

import ccxt
import pandas as pd

API_KEY = "NHAP_API_KEY_CUA_BAN"
SECRET_KEY = "NHAP_SECRET_KEY_CUA_BAN"

exchange = ccxt.binance({
    'apiKey': API_KEY,
    'secret': SECRET_KEY,
    'enableRateLimit': True,
})

balance = exchange.fetch_balance()
df = pd.DataFrame(balance['total'].items(), columns=['asset', 'free'])
df = df[df['free'] > 0]   # chỉ giữ tài sản > 0
print(df)
df.to_csv('spot_balance.csv', index=False)

futures = ccxt.binance({
    'apiKey': API_KEY,
    'secret': SECRET_KEY,
    'options': {'defaultType': 'future'},   # <-- chuyển sang Futures
    'enableRateLimit': True,
})
fbal = futures.fetch_balance()
fdf = pd.DataFrame(fbal['total'].items(), columns=['asset', 'balance'])
fdf = fdf[fdf['balance'] > 0]
print(fdf)
fdf.to_csv('futures_balance.csv', index=False)

Giải thích:

  • ccxt.binance({...}) — tạo đối tượng kết nối với API key của bạn.
  • fetch_balance() — lấy toàn bộ số dư tài khoản.
  • pd.DataFrame(...) — chuyển dict sang bảng để dễ lọc.
  • df[df['free'] > 0] — chỉ lấy tài sản thật sự đang có.
  • to_csv(...) — xuất ra file Excel/CSV để quản lý.

5. Lấy lịch sử nạp tiền (Deposit History)

Muốn biết mình đã nạp bao nhiêu tiền vào tài khoản theo thời gian:

import time

def fetch_deposits(exchange, days=720):
    since = exchange.milliseconds() - days * 24 * 3600 * 1000
    all_deposits = []
    for day in range(days, 0, -1):
        start = exchange.milliseconds() - day * 24 * 3600 * 1000
        try:
            deposits = exchange.fetch_deposits(since=start, limit=100)
            all_deposits.extend(deposits)
        except Exception:
            time.sleep(1)
    return all_deposits

deposits = fetch_deposits(exchange, days=1500)
for d in deposits:
    print(d['datetime'], d['currency'], d['amount'])

6. Lấy dữ liệu nến OHLCV (dữ liệu giá)

OHLCV là nền tảng của mọi chiến lược: Open (giá mở), High (giá cao nhất), Low (giá thấp nhất), Close (giá đóng), Volume (khối lượng).

ohlcv = exchange.fetch_ohlcv('BTC/USDT', timeframe='1m')
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['time'] = pd.to_datetime(df['timestamp'], unit='ms')
print(df.tail())

df_1h = exchange.fetch_ohlcv('BTC/USDT', timeframe='1h')   # nến 1 giờ
df_1d = exchange.fetch_ohlcv('BTC/USDT', timeframe='1d')   # nến 1 ngày

Kiến thức quan trọng về nến:

  • Nến 1m — cứ mỗi phút có một nến mới.
  • Nến 1H — được hình thành vào 0h, 1h, 2h… 23h (đúng giờ tròn). Nên lúc 10:14 bạn sẽ không thấy nến 10:14 — nến 1H cuối cùng là 10:00.
  • Nến 1D — hình thành mỗi ngày lúc 0h.

6.1. Futures Trading Bot: bắt đầu với đòn bẩy

Futures (giao dịch tương lai) cho phép bạn đặt lệnh với đòn bẩy — nghĩa là chỉ cần một phần vốn (ký quỹ) để mở lệnh lớn hơn. Binance Futures hỗ trợ các cặp BTCUSDT, ETHUSDT… với đòn bẩy tối đa lên đến 125x (nhưng bạn KHÔNG nên dùng đòn bẩy cao khi mới bắt đầu).

futures = ccxt.binance({
    'apiKey': API_KEY,
    'secret': SECRET_KEY,
    'options': {'defaultType': 'future'},
    'enableRateLimit': True,
})

futures.set_leverage(5, 'BTC/USDT')

order = futures.create_market_buy_order('BTC/USDT', 0.01)

sell = futures.create_market_sell_order('BTC/USDT', 0.01)

Nguyên tắc vàng với Futures:

  • Bắt đầu đòn bẩy thấp (2-5x) — đòn bẩy cao + không stop loss = cháy tài khoản cực nhanh.
  • Luôn kèm stop loss — biến động crypto rất mạnh, lệnh không SL có thể “nổ” trong vài phút.
  • Ký quỹ đủ cho nhiều lệnh — không dồn toàn bộ margin vào 1 lệnh duy nhất.
  • Hiểu khái niệm liquidation: khi lỗ vượt mức ký quỹ, Binance sẽ tự đóng lệnh (liquidation) — bạn mất phần ký quỹ đó.

6.2. Lấy lịch sử giao dịch (Trade History)

Ngoài lịch sử nạp tiền, bạn thường cần xem toàn bộ lệnh mua/bán đã thực hiện để phân tích hiệu quả chiến lược:

def fetch_my_trades(exchange, symbol, days=30):
    since = exchange.milliseconds() - days * 24 * 3600 * 1000
    all_trades = []
    for day in range(days, 0, -1):
        start = exchange.milliseconds() - day * 24 * 3600 * 1000
        try:
            trades = exchange.fetch_my_trades(symbol, since=start, limit=100)
            all_trades.extend(trades)
        except Exception:
            time.sleep(1)
    return all_trades

trades = fetch_my_trades(exchange, 'BTC/USDT', days=90)
df = pd.DataFrame([{
    'time': t['datetime'],
    'side': t['side'],
    'price': t['price'],
    'amount': t['amount'],
    'fee': t['fee']['cost'] if t['fee'] else 0,
} for t in trades])
df.to_csv('trade_history.csv', index=False)
print(df.tail())

7. Mua bán Spot tự động bằng Python

Phần thú vị nhất — đặt lệnh mua/bán bằng code:

symbol = 'NEAR/USDT'
amount = 10                       # số lượng mua (đơn vị coin)
order = exchange.create_market_buy_order(symbol, amount)
print('Đã mua:', order)

sell = exchange.create_market_sell_order(symbol, amount)
print('Đã bán:', sell)

Lưu ý khi mua bán:

  • Mức mua tối thiểu (notional): Binance yêu cầu mỗi lệnh thị trường có giá trị tối thiểu (thường ~8-10 USD). Mua 1 NEAR (~1.2 USD) sẽ bị báo lỗi — hãy mua đủ khối lượng.
  • Kiểm tra số dư: mua bằng USDT nhưng tài khoản đang có BNB/XRP? Code sẽ báo lỗi thiếu tiền — cần đổi coin hoặc dùng đúng cặp có sẵn.
  • Bán toàn bộ: muốn bán hết số coin đang có, lấy số dư từ fetch_balance() rồi truyền vào lệnh bán (thay vì gõ cứng số lượng).
balance = exchange.fetch_balance()
qty = balance['total'].get('BTC', 0)
if qty > 0:
    exchange.create_market_sell_order('BTC/USDT', qty)
    print('Đã bán hết BTC:', qty)

Sau khi đặt lệnh, vào Binance web → Wallet → Transaction History (hoặc Trade History) để kiểm tra lệnh đã khớp.

7.1. Các loại lệnh trong CCXT: Market, Limit, Stop

Không chỉ lệnh thị trường, CCXT còn hỗ trợ đầy đủ các loại lệnh phổ biến — quan trọng cho bot quản trị rủi ro:

order = exchange.create_limit_buy_order('BTC/USDT', amount=0.001, price=60000)

params = {'stopPrice': 58000}
order = exchange.create_order('BTC/USDT', 'stop_loss', 'sell', 0.001, None, params)

params = {'stopPrice': 65000}
order = exchange.create_order('BTC/USDT', 'take_profit', 'sell', 0.001, None, params)

Khi nào dùng loại nào?

Loại lệnh Khi nào dùng Ví dụ
Market Vào lệnh nhanh, chấp nhận giá thị trường Mua khi có tín hiệu BUY
Limit Muốn giá cụ thể, kiên nhẫn chờ khớp Mua khi giá giảm về vùng hỗ trợ
Stop-loss Tự động cắt lỗ khi giá đi ngược Bảo vệ vốn khỏi thua lớn
Take-profit Tự động chốt lời ở mục tiêu Bán khi giá đạt mục tiêu

7.2. Quét nhiều coin cùng lúc

Bot đơn giản chỉ theo 1 coin; bot thật thường quét nhiều coin để không bỏ lỡ cơ hội:

symbols = ['BTC/USDT', 'ETH/USDT', 'BNB/USDT', 'NEAR/USDT', 'XRP/USDT']

for symbol in symbols:
    try:
        ohlcv = exchange.fetch_ohlcv(symbol, timeframe='1h', limit=100)
        df = pd.DataFrame(ohlcv, columns=['ts','open','high','low','close','volume'])
        sig = get_signal(df)
        if sig != 'NONE':
            print(f'{symbol}: {sig}  (giá {df["close"].iloc[-1]:.2f})')
    except Exception as e:
        print(symbol, 'lỗi:', e)
    time.sleep(1)   # tôn trọng rate limit

Lưu ý khi quét nhiều coin: luôn dùng time.sleep(1) giữa các lần gọi để không bị Binance chặn vì vượt rate limit (mỗi IP có giới hạn số request/giây). CCXT đã có enableRateLimit: True nhưng vẫn nên thận trọng.

7.3. Gửi cảnh báo Telegram khi bot hoạt động

Bot chạy 24/7 thì bạn cần biết nó đang làm gì — kể cả khi không mở máy. Cách đơn giản: gửi thông báo qua Telegram Bot:

import requests

def send_telegram(msg):
    token = "BOT_TOKEN_CUA_BAN"        # tạo qua @BotFather trên Telegram
    chat_id = "CHAT_ID_CUA_BAN"
    url = f"https://api.telegram.org/bot{token}/sendMessage"
    requests.post(url, data={'chat_id': chat_id, 'text': msg})

send_telegram(f"✅ Đã mua BTC/USDT 0.001 @ {price}")
send_telegram(f"⚠️ Lỗi: {e}")

Với Telegram alert, bạn có thể giám sát bot từ điện thoại mọi lúc — phát hiện sớm bot chạy sai, lệnh lạ, hoặc lỗi kết nối, thay vì để nó tự “chạy trốn” cả tuần.

8. Vòng lặp chính của bot Binance (từ 0 đến bot chạy được)

Có API key, có dữ liệu, có lệnh mua bán — giờ ráp tất cả lại thành một bot hoàn chỉnh. Đây là khung chương trình chuẩn mà mọi Binance Python bot đều theo:

import ccxt
import time
import pandas as pd

exchange = ccxt.binance({
    'apiKey': API_KEY,
    'secret': SECRET_KEY,
    'enableRateLimit': True,
})

def get_signal(df):
    """Chiến lược đơn giản: mua khi RSI < 30, bán khi RSI > 70."""
    close = df['close']
    delta = close.diff()
    gain = delta.clip(lower=0).rolling(14).mean()
    loss = (-delta.clip(upper=0)).rolling(14).mean()
    rs = gain / loss
    rsi = 100 - (100 / (1 + rs))
    if rsi.iloc[-1] < 30:
        return 'BUY'
    if rsi.iloc[-1] > 70:
        return 'SELL'
    return 'NONE'

while True:
    try:
        ohlcv = exchange.fetch_ohlcv('BTC/USDT', timeframe='1m', limit=100)
        df = pd.DataFrame(ohlcv, columns=['ts','open','high','low','close','volume'])

        sig = get_signal(df)

        if sig != 'NONE':
            balance = exchange.fetch_balance()
            free_usdt = balance['total'].get('USDT', 0)
            if free_usdt > 50:   # dự phòng mức tối thiểu
                if sig == 'BUY':
                    exchange.create_market_buy_order('BTC/USDT', 0.001)
                else:
                    exchange.create_market_sell_order('BTC/USDT', 0.001)
                print('Thời điểm:', time.strftime('%H:%M:%S'), 'Tín hiệu:', sig)

        time.sleep(60)   # quét mỗi phút
    except Exception as e:
        print('Lỗi:', e)
        time.sleep(10)

Vòng lặp này có 3 bước lặp lại vô hạn: lấy dữ liệu → tính tín hiệu → vào lệnh. Đây chính là trái tim của bot auto trading. Khi bạn muốn chuyển sang chiến lược phức tạp hơn (hedging, martingale giới hạn, grid), chỉ cần thay đổi hàm get_signal() và thêm module quản trị rủi ro — khung còn lại giữ nguyên.

9. Quản trị rủi ro: thứ quan trọng hơn cả “kiếm lời”

Người mới thường hỏi “làm sao để bot lời”. Người có kinh nghiệm hỏi “làm sao để bot không cháy tài khoản”. Với Binance bot, quản trị rủi ro gồm 4 lớp:

  1. Giới hạn mỗi lệnh (% rủi ro): không bao giờ đặt cả số dư vào 1 lệnh. Chuẩn thường dùng là 1-2% số dư mỗi lệnh, có stop loss cố định.
  2. Stop loss bắt buộc: mọi lệnh mua/bán đều phải kèm SL/TP. Bot không có SL là “quả bom nổ chậm”.
  3. Giới hạn tần suất: đặt số lệnh tối đa mỗi ngày (ví dụ ≤ 5) để tránh bot “giao dịch loạn” khi thị trường biến động.
  4. Không gấp thếp mù (martingale): chiến lược gấp đôi lệnh sau khi thua nghe hấp dẫn nhưng 90% bot chết vì martingale khi thị trường đi ngược liên tục. Nếu có dùng, phải giới hạn số bậc và vốn dành riêng.
class RiskManager:
    def __init__(self, max_risk_pct=1.0, max_orders_per_day=5):
        self.max_risk_pct = max_risk_pct / 100
        self.max_orders = max_orders_per_day
        self.orders_today = 0

    def can_trade(self, balance, lot_value):
        risk = balance * self.max_risk_pct
        return risk >= lot_value and self.orders_today < self.max_orders

10. Chạy thử an toàn: Binance Testnet

Trước khi bot đụng đến tiền thật, bắt buộc chạy trên testnet (sàn mô phỏng dùng tiền ảo):

  1. Vào testnet.binance.vision → đăng ký tài khoản testnet.
  2. Nhận testnet API key + Secret (miễn phí, tiền ảo tự nạp).
  3. Trong code, thêm dòng cấu hình testnet:
exchange = ccxt.binance({
    'apiKey': TESTNET_API_KEY,
    'secret': TESTNET_SECRET,
    'enableRateLimit': True,
    'urls': {
        'api': {
            'public': 'https://testnet.binance.vision/api/v3',
            'private': 'https://testnet.binance.vision/api/v3',
        }
    }
})

Chạy bot trên testnet tối thiểu 2-4 tuần — kiểm tra logic, ghi log, xem nó phản ứng với biến động thế nào. Chỉ khi testnet ổn định mới chuyển sang tài khoản thật với vốn nhỏ.

11. Đưa bot lên VPS chạy 24/7

Bot chỉ có giá trị khi chạy liên tục — thị trường crypto mở 24/7, cơ hội không chờ bạn bật máy. Đưa bot lên VPS:

  • VPS Linux nhỏ (2GB RAM là đủ cho bot cá nhân): DigitalOcean, Vultr, hoặc VPS Việt Nam.
  • Cài Python + thư viện: python3 -m venv venv && source venv/bin/activate && pip install ccxt pandas
  • Chạy nền với systemd (tự khởi động lại khi lỗi) hoặc tmux/screen.
  • Giám sát từ xa: gửi log/alert qua Telegram khi bot vào lệnh hoặc lỗi.
[Unit]
Description=Binance Python Bot
After=network.target

[Service]
WorkingDirectory=/root/binance-bot
ExecStart=/root/binance-bot/venv/bin/python main.py
Restart=always

[Install]
WantedBy=multi-user.target

12. Kết luận & lộ trình tiếp theo

Bạn đã nắm toàn bộ vòng đời của một Binance Python bot:

  1. ✅ Tạo API key an toàn (whitelist IP + symbol)
  2. ✅ Cài CCXT, pandas, python-binance
  3. ✅ Lấy số dư Spot & Futures
  4. ✅ Lấy lịch sử nạp tiền, lịch sử giao dịch
  5. ✅ Lấy dữ liệu nến OHLCV các khung thời gian
  6. ✅ Đặt lệnh mua/bán tự động

Buổi tiếp theo của lộ trình này sẽ đi sâu vào:

  • Futures Trading Bot trên Binance (đòn bẩy, ký quỹ, quản trị rủi ro)
  • Kết nối Forex (MT5)chứng khoán Việt Nam (SSI/DNSE) bằng Python
  • Chiến lược tự động hóa hoàn chỉnh kèm quản trị vốn

13. Câu hỏi thường gặp (FAQ)

Binance Python bot là gì?

Là bot giao dịch tự động trên sàn Binance được viết bằng Python, dùng API để lấy dữ liệu và đặt lệnh mua/bán theo chiến lược lập trình sẵn.

CCXT là gì? Có cần thiết cho bot Binance không?

CCXT là thư viện Python kết nối hơn 100 sàn giao dịch bằng một API chung. Rất nên dùng vì dễ học, dễ đổi sàn sau này (Binance, Bitget, Bybit…).

Tạo API key Binance có an toàn không?

An toàn nếu bạn chỉ bật đúng quyền cần thiết (Spot/Futures), whitelist IP, giới hạn symbol, và không chia sẻ Secret key. Luôn lưu key ở nơi an toàn.

Mua bao nhiêu tiền là đủ để bot chạy?

Mỗi lệnh spot tối thiểu ~8-10 USD. Nên bắt đầu với số nhỏ, chạy testnet trước khi dùng tiền thật.

Bot Binance có chắc lời không?

Không. Bot chỉ thực thi chiến lược của bạn. Kết quả phụ thuộc chiến lược + quản trị rủi ro. Đề phòng chiêu trò “bot lãi đều 10-20%/tháng” — hãy tự kiểm chứng.

Binance có chặn người Việt dùng API không?

Tùy khu vực pháp lý, Binance có thể hạn chế một số quốc gia. Nhiều người Việt vẫn dùng qua VPN và các sàn thay thế như Bitget, Bybit, OKX — CCXT hỗ trợ tất cả các sàn này bằng cùng một API, nên code viết cho Binance gần như chuyển được nguyên vẹn sang sàn khác chỉ bằng cách đổi tên sàn.

Có cần VPS để chạy bot Binance không?

Bot thử nghiệm có thể chạy trên máy tính cá nhân. Nhưng bot vận hành thật 24/7 nên chạy trên VPS để không phụ thuộc máy nhà (mất điện, mạng chập chờn). VPS nhỏ 2GB RAM là đủ cho bot cá nhân.

Học bot Binance trước hay bot Forex (MT5) trước?

Học Binance trước sẽ dễ hơn vì API đơn giản, tài liệu nhiều, có testnet. Kiến thức này chuyển sang MT5/Forex được — chỉ khác thư viện kết nối.

14. Tổng kết: từ “nhìn code lạ” đến bot Binance của riêng bạn

Qua bài này bạn đã đi hết quy trình xây Binance Python bot: tạo API key an toàn → cài CCXT → lấy dữ liệu → phân tích OHLCV → đặt lệnh mua/bán → vòng lặp tự động → testnet → VPS. Đó là toàn bộ khung kỹ thuật. Điều còn thiếu — và quan trọng nhất — là chiến lược + quản trị rủi ro của riêng bạn.

Bot chỉ là công cụ thực thi. Người thắng cuộc không phải người có bot “thần thánh”, mà là người hiểu thị trường, hiểu rủi ro, và kỷ luật vận hành. Binance là nơi lý tưởng để học — vì API minh bạch, testnet miễn phí, và bạn có thể gỡ lỗi dễ dàng trước khi chuyển sang Forex/MT5.

15. Đọc thêm

Đặng Trí Thanh

Đặng Trí Thanh

Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL
836 Bài viết
15.4k Người theo dõi
120k+ Lượt đọc

Đặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.