| 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 | 95 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.*

    1. Tổng quan — Ngày 55, chuỗi Python 365 ngày

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

    Ở 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 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.

    Lợi íchMô tả
    Tốc độCode 170 dòng trong < 5 phút thay vì 2–3 giờ gõ tay
    Chính xácAI biết chính xác syntax Binance API, xử lý lỗi, format JSON
    Best practiceTự độ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ạyBạ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 mô tả yêu cầu → AI sinh ~170 dòng Python → bạn đọc, kiểm tra 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.
    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 - BASH]
    pip install python-binance
    
    # [KẾT NỐI TESTNET - PYTHON]
    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.

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

    # [GRACEFUL DEGRADATION - PYTHON]
    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
    

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

    # [ĐỌC SỐ DƯ - PYTHON]
    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.0, USDT free ~10000, ETH free ~10 — đây là tiền ảo, 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):

    # [MA20 SIGNAL - PYTHON]
    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"
    
    • 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

    # [ĐẶT LỆNH MARKET - PYTHON]
    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')}")
    
    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. Script không tự động đặt lệnh khi chạy mặc định — bạn phải thêm flag --order:

    # [CHẠY VỚI LỆNH - BASH]
    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:

    # [PAPER TRADING - PYTHON]
    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 < ma20 and coins > 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 (giá công khai), ghi log CSV để phân tích hiệu suất, vốn ảo $10,000 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 chưa có tài khoản Binance.

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

    Cấu trúc script (~170 dòng) gồm: imports + config, load_env() đọc .env, fetch_klines() lấy giá public, run_testnet() kết nối + đọc dư + đặt lệnh, run_simulate() paper fallback, main() dispatch — không key thì chạy mô phỏng, có key thì testnet (với --order mới đặt lệnh).

    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ó 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. File .gitignore:

    # .gitignore
    .env
    bot_binance_log.csv
    

    Khi tạo API key trên Binance testnet (và production): 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

    Testnet có giống production 100% không? API endpoints giống hệt; khác ở thanh khoản thấp hơn và giá có thể lệch nhẹ. Nhưng để test logic bot thì quá đủ.

    Tôi có cần tài khoản Binance thật để dùng testnet không? Không. Chỉ cần đăng nhập testnet bằng GitHub.

    Dùng Claude Code để code bot này được không? Được! Thực tế script Ngày 55 được viết với Claude Code. Nhớ review kỹ trước khi chạy.

    Làm sao bot chạy 24/7? Deploy lên VPS (DigitalOcean ~$6/tháng hoặc Raspberry Pi), dùng screen hoặc systemd để keep-alive.

    Tôi muốn ghép Telegram (Ngày 51) + Binance (Ngày 55) thành 1 bot? Đó là mục tiêu! Bạn 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).

    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. Bạn đã: kết nối Binance API (testnet an toàn), đọc số dư, 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 · 🌐 Website HNDL · 📘 Khóa học Python

    Đặng Trí Thanh

    Đặng Trí Thanh

    Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL Hướng Nghiệp Dữ Liệu
    839 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.