| Bot Binance tự động mua/bán với Claude Code, AI Code và Python — Testnet Sandbox

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

Bot Binance tự động mua/bán với Claude Code, AI Code và Python — Testnet Sandbox

Ngày 55 – 2026-08-16 | Chuỗi Python 365 ngày | Hướng Nghiệp Dữ Liệu

**Meta mô tả (SEO):** Dùng Claude Code & AI Code để code bot Binance auto trade bằng Python. Kết nối testnet, MA20, đặt lệnh market, paper trading, ghi log CSV — Ngày 55 Python 365.

**Từ khóa:** claude code, ai code, python, bot binance, auto trading, testnet, ma20, paper trading, Python 365

**Video:** https://www.youtube.com/shorts/PLACEHOLDER

**Lưu ý:** Sau khi upload video Ngày 55, thay ID trong YAML `youtube` bằng ID thật từ YouTube Studio.

Xem video Ngày 55 (Short)

Link trực tiếp: [https://www.youtube.com/shorts/PLACEHOLDER](https://www.youtube.com/shorts/PLACEHOLDER)

Mục lục

1. [Từ Telegram cảnh báo đến Binance đặt lệnh](#1-từ-telegram-cảnh-báo-đến-binance-đặt-lệnh)

2. [Dùng Claude Code & AI Code để code nhanh hơn](#2-dùng-claude-code–ai-code-để-code-nhanh-hơn)

3. [Binance Testnet — sân chơi an toàn với tiền ảo](#3-binance-testnet–sân-chơi-an-toàn-với-tiền-ảo)

4. [Cài đặt python-binance và kết nối](#4-cài-đặt-python-binance-và-kết-nối)

5. [Đọc số dư tài khoản testnet](#5-đọc-số-dư-tài-khoản-testnet)

6. [Tín hiệu MA20 — quyết định BUY hay SELL](#6-tín-hiệu-ma20–quyết-định-buy-hay-sell)

7. [Đặt lệnh MARKET trên testnet](#7-đặt-lệnh-market-trên-testnet)

8. [Chế độ mô phỏng Paper Trading không cần pip](#8-chế-độ-mô-phỏng-paper-trading-không-cần-pip)

9. [Script Ngày 55 từng bước](#9-script-ngày-55-từng-bước)

10. [So sánh 2 chế độ: Testnet vs Paper Trading](#10-so-sánh-2-chế-độ-testnet-vs-paper-trading)

11. [Bảo mật API key và .env](#11-bảo-mật-api-key-và-env)

12. [FAQ](#12-faq)

13. [Kết luận](#13-kết-luận)

1. Từ Telegram cảnh báo đến Binance đặt lệnh

Ở **Ngày 51**, bạn đã học cách tạo **bot Telegram báo giá crypto** bằng Python: lấy giá realtime từ Binance public API, kiểm tra ngưỡng, gửi cảnh báo vào điện thoại. Đó là lớp “thông báo” — bot *nhìn* giá và *nói* cho bạn biết.

**Ngày 55** nâng cấp lên một bậc: bot không chỉ nhìn — nó **tự động đặt lệnh mua/bán** trên Binance. Đây là bước chuyển từ “cảnh báo” sang “thực thi” — cột mốc quan trọng trên hành trình xây dựng **bot auto trading hoàn chỉnh**.

Bài này dùng **Claude Code** và **AI Code** để code Python nhanh hơn, và chạy trên **Binance SPOT TESTNET** (môi trường sandbox với tiền ảo) để thực hành an toàn tuyệt đối.

**Disclaimer:** Bot trong bài chạy trên testnet (tiền ảo). Không cam kết lợi nhuận. Tuân thủ điều khoản Binance. Đây là nội dung giáo dục trong chuỗi **Python 365 ngày**.

2. Dùng Claude Code & AI Code để code nhanh hơn

Trước khi đi vào code, một điểm đáng chú ý: **toàn bộ script Ngày 55 được viết với sự hỗ trợ của Claude Code và AI Code**. Đây là xu hướng lập trình năm 2026: bạn không cần gõ từng dòng — bạn mô tả ý tưởng, AI sinh code, bạn review và chạy.

# Tại sao dùng Claude Code / AI Code cho bot trading?

| Lợi ích | Mô tả |
|—|—|
| **Tốc độ** | Code 170 dòng trong < 5 phút thay vì 2-3 giờ gõ tay |
| **Chính xác** | AI biết chính xác syntax Binance API, xử lý lỗi, format JSON |
| **Best practice** | Tự động thêm try/except, fallback pattern, type hints |
| **Đa chế độ** | AI đề xuất graceful degradation: có `python-binance` thì chạy testnet, không có thì fallback paper trading |
| **Review trước khi chạy** | Bạn đọc lại toàn bộ code, hiểu logic, rồi mới chạy — không blind copy |

# Quy trình code với AI:


Bạn: "Viết bot Binance kết nối testnet, dùng MA20 ra tín hiệu BUY/SELL,

có chế độ mô phỏng fallback, ghi log CSV, stdlib nếu không có pip"

AI (Claude Code): → sinh ~170 dòng Python

Bạn: → đọc, kiểm tra BINANCE_API_KEY, TESTNET=True, chạy thử

Kết quả: một script hoàn chỉnh, có xử lý lỗi, có 2 chế độ chạy, sẵn sàng production — trong thời gian cực ngắn.

---

3. Binance Testnet — sân chơi an toàn với tiền ảo

**Testnet** là môi trường sandbox của Binance: API giống hệt production, nhưng giao dịch bằng **tiền ảo**. Bạn có thể đặt lệnh, hủy lệnh, kiểm tra số dư — tất cả miễn phí và không rủi ro.

# Cách đăng ký testnet:

1. Vào **[testnet.binance.vision](https://testnet.binance.vision/)**

2. Đăng nhập bằng GitHub (không cần tài khoản Binance thật)

3. Vào **API Management** → tạo **HMAC API Key + Secret**

4. Vào **Faucet** → nhấn "Request funds" để nhận **tiền ảo** (BTC, USDT, ETH...)

5. Copy key/secret vào file `.env`

.env

BINANCE_API_KEY=your_testnet_api_key_here

BINANCE_SECRET=your_testnet_secret_here

TESTNET=true

Script mặc định `TESTNET=true` — chỉ cần tắt (`TESTNET=false`) khi bạn **có chủ đích** dùng tài khoản thật.

---

4. Cài đặt python-binance và kết nối

# Cài đặt


pip install python-binance

# Kết nối testnet


from binance.client import Client

client = Client(API_KEY, SECRET, testnet=True)

Chỉ 3 dòng. Tham số `testnet=True` tự động trỏ API endpoint về `testnet.binance.vision` thay vì `api.binance.com`. Toàn bộ request sau đó — get_account, create_order, get_klines — đều chạy trên sandbox.

# Graceful degradation

Script được thiết kế để **không crash** nếu chưa cài `python-binance`:


try:

from binance.client import Client

except ImportError:

print("Chưa cài python-binance -> chuyển chế độ mô phỏng")

run_simulate() # fallback: stdlib only, paper trading

Đây là pattern production-grade: **tự thích nghi với môi trường**. Nếu bạn đang trên máy không có quyền pip (VD: server hạn chế), script vẫn chạy được — chỉ không đặt lệnh thật.

---

5. Đọc số dư tài khoản testnet


info = client.get_account()

for b in info["balances"]:

if float(b["free"]) > 0:

print(f"{b['asset']}: free={b['free']} locked={b['locked']}")

Kết quả trả về danh sách tất cả asset trong tài khoản. Trên testnet, sau khi faucet, bạn sẽ thấy:


BTC: free=1.00000000 locked=0.00000000

USDT: free=10000.00000000 locked=0.00000000

ETH: free=10.00000000 locked=0.00000000

Đây là **tiền ảo** — bạn có thể dùng để test bot thoải mái, không lo mất tiền thật.

---

6. Tín hiệu MA20 — quyết định BUY hay SELL

Logic tín hiệu được kế thừa từ **Ngày 48** (MA20 crossover):


closes = [float(k[4]) for k in client.get_klines(

symbol="BTCUSDT", interval="1h", limit=20)]

ma20 = sum(closes) / len(closes)

price = float(client.get_symbol_ticker(symbol="BTCUSDT")["price"])

signal = "BUY" if price > ma20 else "SELL"

# Giải thích:

  • **MA20** = trung bình động 20 cây nến 1 giờ (~gần 1 ngày giao dịch)
  • **price > MA20** → xu hướng tăng → tín hiệu **BUY**
  • **price < MA20** → xu hướng giảm → tín hiệu **SELL**
  • Đây là logic đơn giản nhất để minh họa bot tự động ra quyết định. Trong thực tế, bạn sẽ kết hợp thêm RSI, volume, ATR... như các bài sau trong chuỗi.

    ---

    7. Đặt lệnh MARKET trên testnet


    order = client.create_order(

    symbol="BTCUSDT",

    side=Client.SIDE_BUY,

    type=Client.ORDER_TYPE_MARKET,

    quantity=0.0001, # lượng nhỏ, tiền ảo testnet

    )

    print(f"Lệnh đã đặt (testnet): {order.get('symbol')} "

    f"{order.get('side')} {order.get('executedQty')}")

    # Các loại lệnh:

    | Loại | Mô tả | Dùng khi |
    |---|---|---|
    | **MARKET** | Mua/bán ngay tại giá thị trường | Bot cần khớp nhanh |
    | **LIMIT** | Đặt giá cố định, chờ khớp | Muốn kiểm soát giá vào |
    | **STOP_LOSS** | Kích hoạt khi giá chạm ngưỡng | Cắt lỗ tự động |

    Ngày 55 dùng **MARKET** cho đơn giản. Các ngày sau sẽ thêm LIMIT, STOP_LOSS, OCO.

    # Cờ `--order`

    Script **không** tự động đặt lệnh khi chạy mặc định — bạn phải thêm flag:


    python "Day 55_Bot Binance tu dong mua ban.py" --order

    Đây là cơ chế an toàn: bạn xem số dư, kiểm tra tín hiệu trước, rồi mới quyết định có đặt lệnh không.

    ---

    8. Chế độ mô phỏng Paper Trading không cần pip

    Nếu chưa cài `python-binance`, script tự chuyển sang **chế độ mô phỏng** (paper trading) — dùng Binance **public API** (không cần key) và ghi log CSV:


    def run_simulate():

    cash, coins = 10000.0, 0.0

    while True:

    closes = fetch_klines("BTCUSDT") # public API

    price, ma20 = closes[-1], sum(closes) / len(closes)

    if price > ma20 and coins == 0:

    cash, coins = 0.0, cash / price # BUY

    action = "BUY"

    elif price 0:

    cash, coins = coins * price, 0.0 # SELL

    action = "SELL"

    else:

    action = "HOLD"

    # Ghi log CSV

    with open("bot_binance_log.csv", "a") as f:

    csv.writer(f).writerow([time, action, price, balance])

    time.sleep(60)

    # Điểm hay của paper trading:

  • **Không cần pip**: chỉ dùng `urllib` stdlib gọi Binance public klines API
  • **Không cần key**: dữ liệu giá công khai, ai cũng lấy được
  • **Ghi log CSV**: phân tích hiệu suất sau khi chạy
  • **Vốn ảo $10,000**: bắt đầu với 10k USDT giả, theo dõi PnL
  • Đây là cách tuyệt vời để **backtest chiến lược trước khi dùng tiền thật** — ngay cả khi bạn chưa có tài khoản Binance.

    ---

    9. Script Ngày 55 từng bước

    Dưới đây là toàn bộ cấu trúc script (~170 dòng), phân tích từng phần:

    # Bước 1: Imports + config


    import csv, json, os, sys, time, urllib.request

    from datetime import datetime

    from pathlib import Path

    SYMBOL = "BTCUSDT"

    LOG_FILE = BASE_DIR / "bot_binance_log.csv"

    # Bước 2: load_env()


    def load_env() -> dict:

    env = {}

    for line in ENV_FILE.read_text().splitlines():

    if "=" in line:

    k, v = line.split("=", 1)

    env[k.strip()] = v.strip().strip('"')

    return env

    # Bước 3: fetch_klines() — public API


    def fetch_klines(symbol, limit=20):

    url = f"https://api.binance.com/api/v3/klines?symbol={symbol}&interval=1h&limit={limit}"

    with urllib.request.urlopen(url) as resp:

    return [float(k[4]) for k in json.loads(resp.read())]

    # Bước 4: run_testnet() — kết nối + đọc dư + đặt lệnh


    client = Client(API_KEY, SECRET, testnet=True)

    info = client.get_account() # số dư

    ticker = client.get_symbol_ticker(symbol="BTCUSDT") # giá

    order = client.create_order(...) # đặt lệnh (nếu --order)

    # Bước 5: run_simulate() — paper trading fallback


    while True:

    price, ma20 = get_price_and_ma20()

    if price > ma20: BUY

    elif price < ma20: SELL

    write_log_CSV()

    time.sleep(60)

    # Bước 6: main() — dispatch


    if not API_KEY:

    run_simulate() # không key -> mô phỏng

    else:

    run_testnet("--order" in sys.argv)

    [Link GitHub source code đầy đủ](#) — hoặc tải về từ thư mục `Ngay 55_2026.08.16/`.

    ---

    10. So sánh 2 chế độ: Testnet vs Paper Trading

    | Tiêu chí | Testnet (python-binance) | Paper Trading (stdlib) |
    |---|---|---|
    | **Cần cài pip** | Có (`python-binance`) | Không |
    | **Cần API key** | Có (testnet key miễn phí) | Không |
    | **Đọc số dư** | Có (dư thật trên testnet) | Không (vốn ảo $10k) |
    | **Đặt lệnh thật** | Có (trên sandbox) | Không (chỉ log) |
    | **Ghi log CSV** | Không (có thể thêm) | Có |
    | **Độ chân thực** | Gần production nhất | Mô phỏng đơn giản |
    | **Rủi ro** | 0 (tiền ảo) | 0 |
    | **Phù hợp** | Test trước khi lên production | Học, backtest nhanh |

    **Khuyến nghị:** Bắt đầu với Paper Trading để hiểu logic → chuyển sang Testnet khi muốn test API thật → cuối cùng mới lên production với tiền thật.

    ---

    11. Bảo mật API key và .env

    # Tuyệt đối không commit key lên GitHub

    .gitignore

    .env

    bot_binance_log.csv

    # File .env mẫu

    Sao chép từ .env.example

    BINANCE_API_KEY=your_testnet_key_here

    BINANCE_SECRET=your_testnet_secret_here

    TESTNET=true

    # Cấp quyền tối thiểu cho API key

    Trên Binance testnet (và production), khi tạo API key:

  • **Bỏ chọn "Enable Withdrawals"** — không bao giờ cho phép rút tiền qua API
  • **Bỏ chọn "Enable Futures"** nếu chỉ trade spot
  • **Giới hạn IP** nếu có IP tĩnh
  • ---

    12. FAQ

    # Hỏi: Testnet có giống production 100% không?

    **Đáp:** API endpoints giống hệt. Điểm khác: thanh khoản thấp hơn (ít người trade trên testnet), giá có thể lệch nhẹ so với production. Nhưng để test logic bot thì quá đủ.

    # Hỏi: Tôi có cần tài khoản Binance thật để dùng testnet không?

    **Đáp:** Không. Bạn chỉ cần đăng nhập testnet bằng GitHub. Không liên quan gì đến tài khoản Binance thật.

    # Hỏi: Tôi dùng Claude Code để code bot này được không?

    **Đáp:** Được! Thực tế script Ngày 55 được viết với Claude Code. Bạn có thể copy prompt từ bài này, dán vào Claude Code/Cursor/Copilot, và nó sẽ sinh code cho bạn. Nhớ review kỹ trước khi chạy.

    # Hỏi: Từ khóa Claude Code, AI Code, Python có ý nghĩa gì trong bài này?

    **Đáp:** Đây là 3 từ khóa SEO chính. "Claude Code" và "AI Code" phản ánh xu hướng lập trình 2026: dùng AI để code bot trading. "Python" là ngôn ngữ chính của toàn bộ chuỗi. Bài viết tối ưu để Google hiểu đây là nội dung về lập trình bot trading với sự hỗ trợ của AI.

    # Hỏi: Làm sao để lấy được CHAT_ID cho Telegram (như Ngày 51)?

    **Đáp:** Xem lại **Ngày 51** trong playlist Python 365. Tóm tắt: gửi `/start` cho bot của bạn → gọi `https://api.telegram.org/bot/getUpdates` → copy `chat.id`.

    # Hỏi: Tôi muốn ghép Telegram (Ngày 51) + Binance (Ngày 55) thành 1 bot hoàn chỉnh?

    **Đáp:** Đó là mục tiêu! Bạn sẽ cần: MA20 (Ngày 48) → tín hiệu → Binance đặt lệnh (Ngày 55) → Telegram thông báo kết quả (Ngày 51). Bài tổng hợp sẽ có trong các ngày tiếp theo.

    # Hỏi: Làm sao để bot chạy 24/7?

    **Đáp:** Deploy lên VPS (DigitalOcean $6/tháng, hoặc Raspberry Pi ở nhà). Dùng `screen` hoặc `systemd` để keep-alive. Bài về deploy sẽ có trong các ngày sau.

    ---

    13. Kết luận

    **Ngày 55** là cột mốc: bot của bạn không còn là "công cụ xem giá" — nó đã trở thành **hệ thống tự động đặt lệnh**. Từ đây, bạn có thể:

  • ✅ **Kết nối Binance API** (testnet an toàn)
  • ✅ **Đọc số dư** tài khoản
  • ✅ **Tính MA20** làm tín hiệu BUY/SELL
  • ✅ **Đặt lệnh MARKET** tự động
  • ✅ **Fallback paper trading** khi chưa cài thư viện
  • ✅ **Ghi log CSV** để phân tích hiệu suất
  • Kết hợp với **Ngày 51** (Telegram cảnh báo) và **Ngày 48** (MA20), bạn đã có đủ 3 lớp: **phân tích → thực thi → thông báo**.

    # Tiếp theo trong Python 365:

  • **Ngày 56+**: Thêm LIMIT order, STOP_LOSS, OCO
  • **Ngày 60+**: Backtest chiến lược trên dữ liệu lịch sử
  • **Ngày 70+**: Deploy bot lên VPS chạy 24/7
  • **Ngày 80+**: Tích hợp Claude Code để bot tự phân tích tin tức
  • ---

    **Đăng ký kênh YouTube Hướng Nghiệp Dữ Liệu** để không bỏ lỡ bài nào trong chuỗi **Python 365 ngày**!

    [▶ Playlist Python 365](https://www.youtube.com/playlist?list=PLlvatcRiI_TLt4teIBQgtXBlGLAerk9Ce) · [🌐 Website HNDL](https://www.huongnghiepdulieu.com/) · [📘 Khóa học Python](https://www.huongnghiepdulieu.com/lap-trinh-python-co-ban/)

    ---

    *Bài viết trong chuỗi Python 365 ngày — hành trình 1 năm học Python từ số 0 đến bot trading tự động. Không cam kết lợi nhuận. Nội dung giáo dục.*

    Đặng Trí Thanh

    Đặng Trí Thanh

    Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL
    847 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.