| Bot Auto Trading bằng Python: Hướng dẫn cơ bản từ A đến Z

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

Bot Auto Trading bằng Python: Hướng dẫn cơ bản từ A đến Z

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

Meta mô tả (SEO): Bot paper MA20 BTCUSDT, Binance API urllib, trade_log.csv — Ngày 48 Python 365.

Từ khóa: bot trading Python, MA20, paper trading, Binance API, Python 365

Video: https://www.youtube.com/watch?v=kG7SS5Xb_VY

Ngày 48 – Chuỗi Python 365 ngày | Hướng Nghiệp Dữ Liệu


Mục lục

  1. Bot auto trading là gì?
  2. Luồng hoạt động của một bot giao dịch
  3. Chuẩn bị môi trường
  4. Lấy dữ liệu giá realtime
  5. Chiến lược đơn giản: đường trung bình MA20
  6. Code bot hoàn chỉnh
  7. Chạy bot và đọc log lệnh
  8. Các hướng nâng cấp bot
  9. Câu hỏi thường gặp (FAQ)
  10. Kết luận

1. Bot auto trading là gì?

Bot auto trading là chương trình tự động thực hiện các bước giao dịch thay con người: lấy giá, phân tích tín hiệu, quyết định mua/bán và ghi lại kết quả. Thay vì ngồi nhìn màn hình cả ngày, bạn viết một script Python chạy liên tục và “canh” thị trường cho bạn.

Trong chuỗi Python 365 ngày của kênh Hướng Nghiệp Dữ Liệu, Ngày 48 dạy bạn viết một bot hoàn chỉnh với 30 dòng code — đúng tinh thần tiêu đề video: “Bot Auto Trading bằng Python chỉ 30 dòng code”.

Bot làm được gì cho bạn?

Việc thủ công Bot tự động
Mở app xem giá mỗi giờ Lấy giá realtime mỗi 60 giây
Tính xem nên mua hay bán Áp chiến lược (VD MA20) tự động
Nhớ mình đang giữ bao nhiêu Quản lý số dư, coin trong biến
Ghi chép giao dịch Ghi log vào file CSV tự động
Phải thức để canh Chạy 24/7, không biết mệt

💡 Triết lý của bài học: một bot giao dịch chỉ là sự kết hợp của 3 thứ bạn đã biết: gọi API lấy dữ liệu (Ngày 50 sắp tới), tính toán với Python (các ngày trước), và một chiến lược rõ ràng. Ngày 48 gộp tất cả lại.


2. Luồng hoạt động của một bot giao dịch

Mọi bot giao dịch, dù đơn giản hay phức tạp, đều chạy theo một vòng lặp cốt lõi:

flowchart LR
    A[Lấy giá realtime] --> B[Phân tích theo chiến lược]
    B --> C{Có tín hiệu?}
    C -- Mua --> D[Đặt lệnh MUA]
    C -- Bán --> E[Đặt lệnh BÁN]
    C -- Không --> F[Chờ 1 khoảng thời gian]
    D --> F
    E --> F
    F --> A

Chi tiết từng bước:

  1. Lấy giá — gọi API sàn giao dịch (VD Binance) lấy giá hiện tại và lịch sử.
  2. Phân tích — áp chiến lược (so giá với đường trung bình, chỉ báo RSI, …).
  3. Quyết định — nếu điều kiện mua/bán đúng thì thực hiện lệnh.
  4. Chờ — tạm dừng một khoảng (30s, 1 phút, 1 giờ…) rồi lặp lại.

Trong Ngày 48, bot demo thực hiện đúng vòng lặp này với chiến lược MA20 và ghi log lệnh vào file.


3. Chuẩn bị môi trường

Chúng ta không cần cài thêm thư viện nào — chỉ dùng urllib.request, csv, json, time đều có sẵn trong Python.

# Kiểm tra Python
python --version

Nếu chưa có Python, tải từ python.org và cài đặt (nhớ tick Add to PATH).


4. Lấy dữ liệu giá realtime

Binance cung cấp API công khai (không cần key) cho dữ liệu giá:

import json
import urllib.request

def fetch_price(symbol="BTCUSDT"):
    url = f"https://api.binance.com/api/v3/ticker/price?symbol={symbol}"
    with urllib.request.urlopen(url, timeout=10) as resp:
        data = json.loads(resp.read().decode("utf-8"))
    return float(data["price"])

print(fetch_price())   # ví dụ: 61234.56

Để tính đường trung bình MA20, ta cần lịch sử giá 20 phiên gần nhất. Binance API /klines trả về các cây nến (candlestick), mỗi cây có 12 trường, giá đóng cửa nằm ở vị trí index 4:

def fetch_klines(symbol="BTCUSDT", limit=20):
    url = (f"https://api.binance.com/api/v3/klines?"
           f"symbol={symbol}&interval=1h&limit={limit}")
    with urllib.request.urlopen(url, timeout=10) as resp:
        data = json.loads(resp.read().decode("utf-8"))
    return [float(k[4]) for k in data]   # k[4] = giá đóng cửa

🔍 Giải thích: interval=1h nghĩa là mỗi cây nến đại diện cho 1 giờ. MA20 = trung bình giá đóng cửa của 20 giờ gần nhất.


5. Chiến lược đơn giản: đường trung bình MA20

Đường trung bình (Moving Average – MA) là một trong những chiến lược dễ hiểu nhất và được dùng rộng rãi:

  • MA20 = trung bình giá của 20 phiên gần nhất.
  • Nếu giá hiện tại > MA20 → thị trường đang ở xu hướng tăng → tín hiệu MUA.
  • Nếu giá hiện tại < MA20 → xu hướng giảm → tín hiệu BÁN.
def ma(values):
    return sum(values) / len(values)

Ý tưởng: MA hoạt động như một “đường trung bình trượt” giúp làm mượt nhiễu giá. Khi giá vượt lên trên đường này, bot coi là cơ hội mua; khi giá tụt xuống dưới, bot coi là lúc nên bán/chốt.


6. Code bot hoàn chỉnh

Kết hợp tất cả lại thành một bot tự chạy liên tục:

# Day 48 - Bot Auto Trading cơ bản
import csv
import json
import time
import urllib.request
from datetime import datetime
from pathlib import Path

SYMBOL = "BTCUSDT"
BASE_URL = "https://api.binance.com/api/v3"
INTERVAL = 60              # giây giữa mỗi lần kiểm tra
LOG_FILE = Path("trade_log.csv")

cash = 10000.0             # số dư (đơn vị giả)
coins = 0.0                # lượng coin đang giữ
trade_count = 0
MAX_TRADES = 10            # giới hạn số lệnh để an toàn

def fetch_price(symbol):
    url = f"{BASE_URL}/ticker/price?symbol={symbol}"
    with urllib.request.urlopen(url, timeout=10) as resp:
        data = json.loads(resp.read().decode("utf-8"))
    return float(data["price"])

def fetch_klines(symbol, limit=20):
    url = f"{BASE_URL}/klines?symbol={symbol}&interval=1h&limit={limit}"
    with urllib.request.urlopen(url, timeout=10) as resp:
        data = json.loads(resp.read().decode("utf-8"))
    return [float(k[4]) for k in data]

def ma(values):
    return sum(values) / len(values)

def log_trade(action, price, balance):
    new = not LOG_FILE.exists()
    with open(LOG_FILE, "a", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        if new:
            writer.writerow(["time", "action", "price", "balance"])
        writer.writerow([datetime.now().isoformat(timespec="seconds"),
                         action, round(price, 2), round(balance, 2)])

def run():
    global cash, coins, trade_count
    print("🤖 Bot Auto Trading (PAPER)")
    while True:
        try:
            price = fetch_price(SYMBOL)
            ma20 = ma(fetch_klines(SYMBOL))

            if price > ma20 and coins == 0:      # tín hiệu MUA
                cash, coins = 0.0, cash / price
                trade_count += 1
                msg = f"🟢 MUA  {coins:.6f} {SYMBOL} @ {price:.2f}"
                log_trade("BUY", price, cash + coins * price)
            elif price < ma20 and coins > 0:     # tín hiệu BÁN
                cash, coins = coins * price, 0.0
                trade_count += 1
                msg = f"🔴 BÁN  {SYMBOL} @ {price:.2f} -> cash {cash:.2f}"
                log_trade("SELL", price, cash)
            else:
                msg = f"⚪ Giữ  giá {price:.2f}  MA20 {ma20:.2f}"

            balance = cash + coins * price
            print(f"[{datetime.now().strftime('%H:%M:%S')}] {msg} | "
                  f"Tổng: {balance:.2f}")

            if trade_count >= MAX_TRADES:
                print("Đã đủ số lệnh. Dừng bot.")
                break
            time.sleep(INTERVAL)

        except KeyboardInterrupt:
            print("Dừng bot. Log đã lưu tại:", LOG_FILE)
            break
        except Exception as exc:
            print(f"Lỗi (thử lại sau): {exc}")
            time.sleep(INTERVAL)

if __name__ == "__main__":
    run()

Giải thích từng phần

Phần Chức năng
fetch_price Lấy giá hiện tại của BTCUSDT
fetch_klines Lấy 20 cây nến 1h → list giá đóng cửa
ma Tính trung bình 20 giá
log_trade Ghi lệnh vào trade_log.csv (tạo header nếu file mới)
run Vòng lặp chính: kiểm tra → quyết định → chờ → lặp

7. Chạy bot và đọc log lệnh

Chạy

python "Day 48_Bot Auto Trading.py"

Output mẫu:

🤖 Bot Auto Trading (PAPER)
[09:00:01] ⚪ Giữ  giá 61234.56  MA20 60890.10
[09:01:01] ⚪ Giữ  giá 61210.20  MA20 60895.33
[09:02:01] 🟢 MUA  0.001632 BTCUSDT @ 61245.00
...

Đọc file trade_log.csv

Mở file bằng Excel hoặc Notepad:

time,action,price,balance
2026-08-09T09:02:01,BUY,61245.00,10000.00
2026-08-09T15:40:11,SELL,61890.22,10105.32

Từ log, bạn tính được bot mua ở đâu, bán ở đâu, số dư hiện tại bao nhiêu — dữ liệu để đánh giá chiến lược trước khi nghĩ tới bất kỳ bước mở rộng nào.

💡 Cách tư duy đúng: đây là bot paper — nó mô phỏng lệnh và ghi log. Chạy thật nhiều phiên, thu thập log, phân tích xem chiến lược có lời hay không. Đó chính là cách kiểm chứng trước khi quyết định bước tiếp theo (đặt lệnh thật). Nguyên tắc này là kim chỉ nam xuyên suốt chuỗi bài quant/trading của khóa học.


8. Các hướng nâng cấp bot

Sau khi bot MA20 chạy ổn, bạn có thể mở rộng theo từng hướng (đều nằm trong kế hoạch 30 ngày sắp tới):

  1. Đổi chỉ báo — RSI, MACD, Bollinger (Ngày 57: RSI).
  2. Gửi thông báo — bot Telegram báo giá khi có tín hiệu (Ngày 51).
  3. Backtest — kiểm chứng chiến lược trên dữ liệu quá khứ trước khi chạy thật (Ngày 56).
  4. Thêm nhiều cặp — quét BTC, ETH, SOL cùng lúc (Ngày 50 đã học gọi API).
  5. Lên lịch chạy — dùng schedule để bot chạy đúng giờ, không chiếm terminal (Ngày 68).
  6. Quản lý rủi ro — giới hạn kích thước lệnh, dừng lỗ (Ngày 66).
  7. Chạy trên sàn khác — Binance Futures, Bybit, hoặc sàn chứng khoán VN.
  8. Phân tích hiệu quả — tính Sharpe ratio để đo chất lượng chiến lược (Ngày 69).
flowchart TD
    B[Bot MA20 cơ bản] --> T1[Thông báo Telegram]
    B --> T2[Backtest]
    B --> T3[Nhiều chỉ báo]
    B --> T4[Nhiều cặp coin]
    B --> T5[Lên lịch tự chạy]
    B --> T6[Đo hiệu quả bằng Sharpe]


11. Paper trading vs live: ranh giới rõ ràng

Video kG7SS5Xb_VY demo bot MA20 không gọi endpoint đặt lệnh — biến cash / coins mô phỏng. Paper giúp hiểu vòng lặp while, log CSV, và slippage = 0 (lý tưởng hóa). Chuyển live cần key trade, quản lý rủi ro, phí, latency — không nằm trong phạm vi cam kết lời của khóa.


12. Phí, slippage và vì sao backtest cần Ngày 56

MA20 trên giá khớp 1h bỏ qua phí maker/taker. Khi backtest, trừ 0.1% mỗi lượt — metric lợi nhuận realistic hơn. Chuỗi Python 365 có ngày backtest riêng; Ngày 48 là prototype logic.


13. Logging nâng cao

Thêm cột ma20, position, equity vào CSV:

writer.writerow([ts, action, price, balance, ma20, coins])

Log giàu feature giúp vẽ equity curve sau bằng pandas.


14. MA vs EMA

MA20 rolling().mean() vs EMA ewm(span=20) — EMA nhạy hơn. Bot demo dùng MA đơn giản; bài tập đổi một dòng so sánh tín hiệu.


15. Rate limit Binance public API

Bot sleep(60) giữa vòng — tránh ban IP. Production dùng websocket hoặc cache klines.


16. Dừng bot an toàn

KeyboardInterrupt, MAX_TRADES, và try/except quanh urlopen — pattern vận hành script 24/7 trên VPS (giáo dục).


17. Từ MA20 tới chiến lược hedging

PyNhiQuaiBot dạy hedge nhiều chân, không chỉ một MA đơn. Ngày 48 là xương sống vòng lặp bot; hedging là tầng trên với sizing và correlation — xem hub Python hedging HNDL.


18. Kiểm tra log bằng pandas

import pandas as pd
log = pd.read_csv("trade_log.csv")
log["ret"] = log["balance"].pct_change()
print(log.describe())

19. Telegram alert (preview Ngày 51)

Gửi message khi action == BUY — cùng hook log_trade mở rộng requests.post tới Bot API (token trong .env).


20. QuantTrade và không cam kết lợi nhuận

Mọi chiến lược MA, RSI, grid đều cần kiểm chứng cá nhân. QuantTrade là cách giới thiệu khóa PyNhiQuaiBot trên fanpage quant — thương hiệu quant, cùng khóa thực hành, không hứa lãi.


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

Q1: Bot này đặt lệnh thật trên Binance không?
A: Không. Bot demo chỉ mô phỏng lệnh trong bộ nhớ và ghi log ra CSV. Đây là cách an toàn để hiểu cơ chế trước.

Q2: Cần API key Binance không?
A: Lấy dữ liệu giá công khai thì không cần key. Khi nào muốn đặt lệnh thật mới cần tài khoản + key (bảo mật tuyệt đối).

Q3: Chiến lược MA20 có lời không?
A: Chưa biết cho tới khi bạn backtest. Nhiệm vụ của khóa học là dạy bạn tự kiểm chứng — không cam kết lợi nhuận cho bất kỳ chiến lược nào.

Q4: Bot chạy liên tục bằng cách nào?
A: Vòng lặp while True + ime.sleep. Về lâu dài nên dùng thư viện schedule hoặc Task Scheduler để chạy đúng giờ.

Q5: Tôi muốn giao dịch nhiều loại coin thì sao?
A: Sửa vòng lặp để duyệt danh sách symbol, gọi API cho từng cặp — nội dung sẽ nâng cấp ở các ngày sau.

Q6: Nếu API Binance bị chặn ở vùng mạng của tôi?
A: Có thể dùng API khác (CoinGecko, Bybit…) hoặc dùng dữ liệu lưu sẵn trong file để luyện logic bot.


10. Kết luận

Trong Ngày 48, bạn đã học:

✅ Bot auto trading là gì và vòng lặp hoạt động
✅ Lấy giá realtime và lịch sử giá từ Binance API
✅ Chiến lược MA20 — tín hiệu mua/bán tự động
✅ Viết bot hoàn chỉnh ~30 dòng code
✅ Đọc log lệnh để đánh giá chiến lược
✅ Các hướng nâng cấp bot trong 30 ngày tới

Đây là nền tảng để bạn đi tiếp các chủ đề: bot Telegram báo giá (Ngày 51), backtest (Ngày 56), RSI (Ngày 57), và quant trade.

Nếu bạn muốn đi sâu tự động hóa Python cho bot hedging, hãy xem lộ trình PyNhiQuaiBot – Lập trình Python nâng cao Hedging và tự động hóa tại hub HNDL (link trong mô tả video).

📌 Theo dõi kênh để học Python mỗi ngày — hashtag #Python365. Hẹn gặp Ngày 49!


Cầu nối khóa PyNhiQuaiBot · QuantTrade

Cùng tư duy đọc dữ liệu → xử lý bằng Python → tự động hóa, khóa PyNhiQuaiBot (định vị quant trên fanpage: QuantTrade · Master Quantitative Trading) là lộ trình thực chiến bot hedging và tự động hóa nâng cao. Đăng ký tại hub: https://www.huongnghiepdulieu.com/lap-trinh-python-nang-cao-hedging-tu-dong-hoa/

QuantTrade là cách giới thiệu khóa PyNhiQuaiBot cho audience quant finance — cùng một khóa, không phải khóa riêng.


Xem thêm trên chuỗi Python 365

Theo dõi playlist Python 365 ngày trên kênh Hướng Nghiệp Dữ Liệu để học mỗi ngày một chủ đề: https://www.youtube.com/playlist?list=PLPython365HNDL

Hashtag gợi ý: #Python365 · #HướngNghiệpDữLiệu · #Python · #DataPass

Thực hành sâu (1)

Khi làm việc với Ngay 48, hãy luôn lưu snapshot dữ liệu kèm timestamp pull. Bạn sẽ cảm ơn chính mình khi API đổi schema hoặc khi cần tái hiện bug. Thêm cột mô tả nguồn, symbol, và phiên bản script.

Thực hành sâu (2)

Pipeline Ngay 48 nên tách ba lớp: fetch, transform, report. Fetch chỉ gọi API; transform ép kiểu và tính metric; report in ra hoặc vẽ chart. Tách lớp giúp test từng phần và tái sử dụng cho bot paper sau này.

Thực hành sâu (3)

Trong môi trường giáo dục, Ngay 48 không nhằm tìm ‘thánh grail’. Hãy đặt câu hỏi đúng: dữ liệu có đủ sạch không? Metric có định nghĩa rõ không? Biểu đồ có misleading không? Đây là tư duy quant trước khi nói tới lợi nhuận.

Thực hành sâu (4)

Nếu bạn dùng Ngay 48 cho báo cáo nội bộ, thêm bước validate: min/max price, qty âm, timestamp lùi. Pandas describe()isna().sum() là hai lệnh đầu tiên nên chạy.

Thực hành sâu (5)

So sánh Ngay 48 với công việc văn phòng: kéo log CRM, gom theo ngày, vẽ xu hướng — cùng kỹ năng pandas. Trading chỉ là domain data có biến động nhanh; kỹ năng core vẫn là Python.

Thực hành sâu (6)

Khi mở rộng Ngay 48, thử parameter hóa symbol và interval. Một hàm load_trades(symbol) tái sử dụng cho BTC, ETH — tránh copy-paste ba file giống nhau.

Thực hành sâu (7)

Ghi log lỗi API: status code, message, thời điểm. Với Binance, rate limit là thực tế — sleep 0.2–1 giây giữa các request khi học, đừng hammer API.

Thực hành sâu (8)

Bảo mật: không paste API key vào notebook public. Dùng .env và thêm .env vào .gitignore. Key read-only vẫn cần bảo vệ vì lộ key là lộ thói quen làm việc kém.

Thực hành sâu (9)

Thử nghiệm Ngay 48 trên máy offline: lưu JSON mẫu, viết script đọc file thay vì API — luyện transform khi không có mạng.

Thực hành sâu (10)

Kết hợp Ngay 48 với Jupyter: chạy từng cell, quan sát head() sau mỗi bước. Người mới hay nhảy cóc tới vẽ chart mà chưa hiểu dtypes.

Thực hành sâu (11)

Viết checklist trước khi publish báo cáo từ Ngay 48: nguồn dữ liệu, thời gian, đơn vị (USDT), giới hạn mẫu, disclaimer không cam kết lợi nhuận.

Thực hành sâu (12)

Nếu metric VWAP hoặc MA lệch kỳ vọng, kiểm tra timezone và đơn vị. Lỗi timezone làm lệch nến một giờ — đủ phá chiến lược demo.

Thực hành sâu (13)

Document cho đồng đội: một README ngắn trong folder ngày — cài gì, chạy lệnh gì, output mong đợi. Python 365 mỗi folder Ngay XX là một mini portfolio.

Thực hành sâu (14)

Sau Ngay 48, export CSV và mở Excel kiểm tra chéo vài dòng. Một lần so tay giúp tin tưởng code hơn mười lần chạy mù.

Thực hành sâu (15)

Học thêm: đọc tài liệu chính thức API song song video. Video HNDL cho lộ trình; docs cho chi tiết field và giới hạn.

Thực hành sâu (16)

Thử refactor hàm dài thành hàm nhỏ có tên tiếng Việt hoặc tiếng Anh nhất quán — fetch_trades, clean_trades, summarize, plot.

Thực hành sâu (17)

QuantTrade / PyNhiQuaiBot dùng cùng tư duy: data sạch, log rõ, tự động hóa từng bước. Ngày học Ngay 48 là ngày luyện nền.

Thực hành sâu (18)

Đặt giới hạn thời gian học: 45 phút code, 15 phút ghi chú. Ghi chú bằng lời của bạn — não nhớ lâu hơn copy slide.

Thực hành sâu (19)

Tham gia cộng đồng HNDL: comment video, nêu lỗi bạn gặp — có thể thành FAQ cho ngày sau.

Thực hành sâu (20)

Lên lịch ôn: sau 7 ngày mở lại notebook Ngay 48 và viết lại từ đầu không xem code. Retrieval practice củng cố Python.

Thực hành sâu (21)

Khi sang Ngày 44–48, bạn sẽ thấy mảnh ghép nối tiếp: trades → nến Plotly → bot paper. Giữ folder gọn, đặt tên file theo ngày.

Thực hành sâu (22)

Nếu dùng AI viết code (Ngày 47), vẫn review từng dòng Ngay 48. AI tăng tốc, không thay hiểu biết.

Thực hành sâu (23)

Thử metric phụ: đếm số lệnh, max qty, spread price max-min trong tape — bài tập mở rộng không cần thư viện mới.

Thực hành sâu (24)

Cuối buổi, commit Git (không kèm key). Một history sạch là kỹ năng professional.

Thực hành sâu (25)

Nhắc lại: mọi ví dụ thị trường trên kênh HNDL là giáo dục, không cam kết lợi nhuận — kể cả khi bạn mở rộng Ngay 48 cho nhiều symbol.

Thực hành sâu (26)

Khi làm việc với Ngay 48, hãy luôn lưu snapshot dữ liệu kèm timestamp pull. Bạn sẽ cảm ơn chính mình khi API đổi schema hoặc khi cần tái hiện bug. Thêm cột mô tả nguồn, symbol, và phiên bản script.

Thực hành sâu (27)

Pipeline Ngay 48 nên tách ba lớp: fetch, transform, report. Fetch chỉ gọi API; transform ép kiểu và tính metric; report in ra hoặc vẽ chart. Tách lớp giúp test từng phần và tái sử dụng cho bot paper sau này.

Thực hành sâu (28)

Trong môi trường giáo dục, Ngay 48 không nhằm tìm ‘thánh grail’. Hãy đặt câu hỏi đúng: dữ liệu có đủ sạch không? Metric có định nghĩa rõ không? Biểu đồ có misleading không? Đây là tư duy quant trước khi nói tới lợi nhuận.

Thực hành sâu (29)

Nếu bạn dùng Ngay 48 cho báo cáo nội bộ, thêm bước validate: min/max price, qty âm, timestamp lùi. Pandas describe()isna().sum() là hai lệnh đầu tiên nên chạy.

Thực hành sâu (30)

So sánh Ngay 48 với công việc văn phòng: kéo log CRM, gom theo ngày, vẽ xu hướng — cùng kỹ năng pandas. Trading chỉ là domain data có biến động nhanh; kỹ năng core vẫn là Python.

Thực hành sâu (31)

Khi mở rộng Ngay 48, thử parameter hóa symbol và interval. Một hàm load_trades(symbol) tái sử dụng cho BTC, ETH — tránh copy-paste ba file giống nhau.

Thực hành sâu (32)

Ghi log lỗi API: status code, message, thời điểm. Với Binance, rate limit là thực tế — sleep 0.2–1 giây giữa các request khi học, đừng hammer API.

Thực hành sâu (33)

Bảo mật: không paste API key vào notebook public. Dùng .env và thêm .env vào .gitignore. Key read-only vẫn cần bảo vệ vì lộ key là lộ thói quen làm việc kém.

Thực hành sâu (34)

Thử nghiệm Ngay 48 trên máy offline: lưu JSON mẫu, viết script đọc file thay vì API — luyện transform khi không có mạng.

Thực hành sâu (35)

Kết hợp Ngay 48 với Jupyter: chạy từng cell, quan sát head() sau mỗi bước. Người mới hay nhảy cóc tới vẽ chart mà chưa hiểu dtypes.

Thực hành sâu (36)

Viết checklist trước khi publish báo cáo từ Ngay 48: nguồn dữ liệu, thời gian, đơn vị (USDT), giới hạn mẫu, disclaimer không cam kết lợi nhuận.

Thực hành sâu (37)

Nếu metric VWAP hoặc MA lệch kỳ vọng, kiểm tra timezone và đơn vị. Lỗi timezone làm lệch nến một giờ — đủ phá chiến lược demo.

Thực hành sâu (38)

Document cho đồng đội: một README ngắn trong folder ngày — cài gì, chạy lệnh gì, output mong đợi. Python 365 mỗi folder Ngay XX là một mini portfolio.

Thực hành sâu (39)

Sau Ngay 48, export CSV và mở Excel kiểm tra chéo vài dòng. Một lần so tay giúp tin tưởng code hơn mười lần chạy mù.

Thực hành sâu (40)

Học thêm: đọc tài liệu chính thức API song song video. Video HNDL cho lộ trình; docs cho chi tiết field và giới hạn.

Thực hành sâu (41)

Thử refactor hàm dài thành hàm nhỏ có tên tiếng Việt hoặc tiếng Anh nhất quán — fetch_trades, clean_trades, summarize, plot.

Thực hành sâu (42)

QuantTrade / PyNhiQuaiBot dùng cùng tư duy: data sạch, log rõ, tự động hóa từng bước. Ngày học Ngay 48 là ngày luyện nền.

Thực hành sâu (43)

Đặt giới hạn thời gian học: 45 phút code, 15 phút ghi chú. Ghi chú bằng lời của bạn — não nhớ lâu hơn copy slide.

Thực hành sâu (44)

Tham gia cộng đồng HNDL: comment video, nêu lỗi bạn gặp — có thể thành FAQ cho ngày sau.

Thực hành sâu (45)

Lên lịch ôn: sau 7 ngày mở lại notebook Ngay 48 và viết lại từ đầu không xem code. Retrieval practice củng cố Python.

Thực hành sâu (46)

Khi sang Ngày 44–48, bạn sẽ thấy mảnh ghép nối tiếp: trades → nến Plotly → bot paper. Giữ folder gọn, đặt tên file theo ngày.

Thực hành sâu (47)

Nếu dùng AI viết code (Ngày 47), vẫn review từng dòng Ngay 48. AI tăng tốc, không thay hiểu biết.

Thực hành sâu (48)

Thử metric phụ: đếm số lệnh, max qty, spread price max-min trong tape — bài tập mở rộng không cần thư viện mới.

Thực hành sâu (49)

Cuối buổi, commit Git (không kèm key). Một history sạch là kỹ năng professional.

Thực hành sâu (50)

Nhắc lại: mọi ví dụ thị trường trên kênh HNDL là giáo dục, không cam kết lợi nhuận — kể cả khi bạn mở rộng Ngay 48 cho nhiều symbol.

Thực hành sâu (51)

Khi làm việc với Ngay 48, hãy luôn lưu snapshot dữ liệu kèm timestamp pull. Bạn sẽ cảm ơn chính mình khi API đổi schema hoặc khi cần tái hiện bug. Thêm cột mô tả nguồn, symbol, và phiên bản script.

Thực hành sâu (52)

Pipeline Ngay 48 nên tách ba lớp: fetch, transform, report. Fetch chỉ gọi API; transform ép kiểu và tính metric; report in ra hoặc vẽ chart. Tách lớp giúp test từng phần và tái sử dụng cho bot paper sau này.

Thực hành sâu (53)

Trong môi trường giáo dục, Ngay 48 không nhằm tìm ‘thánh grail’. Hãy đặt câu hỏi đúng: dữ liệu có đủ sạch không? Metric có định nghĩa rõ không? Biểu đồ có misleading không? Đây là tư duy quant trước khi nói tới lợi nhuận.

Thực hành sâu (54)

Nếu bạn dùng Ngay 48 cho báo cáo nội bộ, thêm bước validate: min/max price, qty âm, timestamp lùi. Pandas describe()isna().sum() là hai lệnh đầu tiên nên chạy.

Thực hành sâu (55)

So sánh Ngay 48 với công việc văn phòng: kéo log CRM, gom theo ngày, vẽ xu hướng — cùng kỹ năng pandas. Trading chỉ là domain data có biến động nhanh; kỹ năng core vẫn là Python.

Thực hành sâu (56)

Khi mở rộng Ngay 48, thử parameter hóa symbol và interval. Một hàm load_trades(symbol) tái sử dụng cho BTC, ETH — tránh copy-paste ba file giống nhau.

Thực hành sâu (57)

Ghi log lỗi API: status code, message, thời điểm. Với Binance, rate limit là thực tế — sleep 0.2–1 giây giữa các request khi học, đừng hammer API.

Thực hành sâu (58)

Bảo mật: không paste API key vào notebook public. Dùng .env và thêm .env vào .gitignore. Key read-only vẫn cần bảo vệ vì lộ key là lộ thói quen làm việc kém.

Đặng Trí Thanh

Đặng Trí Thanh

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