Tôi còn nhớ cách đây 8 tháng, tôi mở sàn Binance, đặt một lệnh Long BTC bằng cảm tính, và mất gần 30% tài khoản chỉ trong 2 tuần. Đêm đó tôi ngồi gõ "cách test chiến lược crypto trước khi đánh thật" và lần đầu tiên biết đến ba từ khoá: Backtrader, VectorBT và Tardis API. Lúc đầu tôi tưởng đó là ba thư viện của cùng một dự án, nhưng thực ra chúng là ba mảnh ghép: một cái để lấy dữ liệu, một cái để chạy thử nhanh, một cái để kiểm tra kỹ lưỡng. Bài viết này tôi viết lại toàn bộ hành trình từ con số 0 — không cần biết lập trình trước đó, không cần hiểu thuật ngữ, chỉ cần một chiếc laptop và 30 phút rảnh.
Backtest crypto là gì? Giải thích trong 3 phút
Backtest nghĩa là cho chiến lược giao dịch chạy lại trên dữ liệu quá khứ để xem nếu hồi đó mình đánh theo nó thì lời bao nhiêu. Giống như xem lại bản đồ đường đi để biết con đường nào hay bị kẹt xe — bạn không cần thực sự lái xe để rút kinh nghiệm.
Với crypto, dữ liệu quá khứ thường gặp hai vấn đề:
- Sàn không cho tải về quá nhiều (Binance chỉ cho tải tối đa vài tháng qua UI).
- Dữ liệu tick-by-tick (từng lệnh) thì gần như không có sẵn, mà chiến lược lưới sóng (grid bot) hay arbitrage lại cần chính xác từng lệnh.
Đó là lúc Tardis API xuất hiện — một "kho dữ liệu lịch sử" của toàn bộ sàn lớn (Binance, Bybit, OKX…), có thể trả về tick, nến, funding rate, order book… theo yêu cầu.
Tại sao lại kết hợp cả ba: Backtrader + VectorBT + Tardis?
Mỗi công cụ giỏi một việc:
- Tardis API — đóng vai trò "kho dữ liệu", lấy dữ liệu chuẩn xác theo tick hoặc nến.
- VectorBT — chạy backtest cực nhanh bằng cách tính toán trên toàn bộ mảng dữ liệu (vector hóa). Phù hợp để thử hàng trăm tham số trong vài giây.
- Backtrader — backtest chi tiết từng tick, hỗ trợ commission, slippage, chỉ báo tuỳ biến, giao dịch ký quỹ (margin)…, chậm hơn nhưng kết quả "sát thực tế" hơn.
Quy trình tôi hay dùng: Tardis → VectorBT lọc nhanh → Backtrader kiểm chứng → HolySheep AI phân tích kết quả.
Bảng so sánh nhanh 3 công cụ
| Tiêu chí | Tardis API | VectorBT | Backtrader |
|---|---|---|---|
| Vai trò chính | Cung cấp dữ liệu | Backtest vector nhanh | Backtest sự kiện chi tiết |
| Tốc độ | Phụ thuộc gói dữ liệu | Rất nhanh (giây) | Chậm hơn (phút) |
| Loại dữ liệu hỗ trợ | Tick, nến, order book, funding | Nến OHLCV | Nến OHLCV, tick, custom |
| Độ khó cho người mới | Trung bình | Trung bình | Khó hơn |
| Phù hợp thử nhiều tham số | — | Có (rất mạnh) | Không |
| Mô phỏng commission/slippage | — | Cơ bản | Rất chi tiết |
| Chi phí | Có gói miễn phí | Miễn phí (open-source) | Miễn phí (open-source) |
Phù hợp / không phù hợp với ai?
Phù hợp với:
- Trader muốn thử chiến lược trước khi đánh thật, sợ mất tiền oan.
- Người đang học Python và muốn có dự án thực tế để làm.
- Người cần backtest trên dữ liệu tick (lưới sóng, arbitrage, market-making).
- Ai muốn tự động hoá toàn bộ: lấy dữ liệu → backtest → phân tích kết quả bằng AI.
Không phù hợp với:
- Người chỉ muốn "làm giàu nhanh" — backtest không đảm bảo lợi nhuận tương lai.
- Người không muốn cài Python, không muốn gõ lệnh terminal.
- Người cần backtest realtime (Tardis chỉ cung cấp dữ liệu quá khứ).
Chuẩn bị môi trường — chỉ mất 10 phút
- Cài Python 3.10 trở lên: tải từ python.org, tick "Add to PATH".
- Mở Terminal (cmd trên Windows), gõ:
pip install vectorbt backtrader pandas requests numpy - Tạo thư mục dự án, ví dụ:
mkdir crypto-backtest && cd crypto-backtest - Tạo file
strategy.pybằng VS Code hoặc Notepad.
[Ảnh chụp: cửa sổ Terminal sau khi pip install thành công]
Bước 1: Đăng ký Tardis API để lấy dữ liệu lịch sử
Truy cập tardis.dev, bấm Sign Up, điền email, xác nhận mail. Sau khi vào Dashboard, bấm API Keys → Create New Key, copy key lại cất cẩn thận. Gói miễn phí cho phép truy xuất dữ liệu nến 1 phút của hầu hết sàn — đủ cho người mới học.
[Ảnh chụp: giao diện Dashboard của Tardis, mục API Keys]
Bước 2: Tải dữ liệu BTC 1 phút từ Tardis bằng Python
Dán đoạn sau vào file fetch_data.py và chạy python fetch_data.py:
import requests
import csv
from datetime import datetime
Thay bằng key bạn vừa tạo trên tardis.dev
TARDIS_API_KEY = "YOUR_TARDIS_API_KEY"
symbol = "btcusdt"
exchange = "binance"
from_date = "2024-01-01"
to_date = "2024-01-02"
url = f"https://api.tardis.dev/v1/data-feeds/{exchange}/trades"
params = {
"symbols": symbol,
"from": from_date,
"to": to_date,
"limit": 1000
}
headers = {"Authorization": f"Bearer {TARDIS_API_KEY}"}
print("Đang tải dữ liệu từ Tardis...")
resp = requests.get(url, headers=headers, params=params)
print(f"HTTP {resp.status_code} - {len(resp.text)} bytes")
with open("btc_trades.csv", "w", newline="") as f:
f.write(resp.text)
print("Đã lưu vào btc_trades.csv")
[Ảnh chụp: Terminal in ra "Đã lưu vào btc_trades.csv" cùng file CSV mở trong Excel]
Bước 3: Backtest nhanh với VectorBT (SMA Crossover)
Tạo file backtest_vectorbt.py với nội dung sau. Chiến lược rất đơn giản: mua khi đường trung bình 10 phút cắt lên đường 50 phút, bán khi cắt xuống.
import vectorbt as vbt
import pandas as pd
Đọc dữ liệu đã tải ở Bước 2
df = pd.read_csv("btc_trades.csv", header=None,
names=["timestamp", "price", "qty", "side"])
Resample tick về nến 1 phút
df["timestamp"] = pd.to_datetime(df["timestamp"])
df = df.set_index("timestamp")
ohlc = df["price"].resample("1min").ohlc()
ohlc = ohlc.dropna()
print(f"Tổng số nến 1 phút: {len(ohlc)}")
print(ohlc.head())
close = ohlc["close"]
Hai đường trung bình
fast = vbt.MA.run(close, window=10, short_name="fast")
slow = vbt.MA.run(close, window=50, short_name="slow")
Tín hiệu mua/bán
entries = fast.ma_crossed_above(slow)
exits = fast.ma_crossed_below(slow)
Chạy backtest, giả sử vốn 10.000 USDT, fee 0.1%
pf = vbt.Portfolio.from_signals(
close, entries, exits,
init_cash=10000,
fees=0.001
)
print("===== Kết quả backtest VectorBT =====")
print(f"Tổng lợi nhuận : {pf.total_return():.2%}")
print(f"Sharpe ratio : {pf.sharpe_ratio():.2f}")
print(f"Số lệnh : {pf.trades.count()}")
print(f"Thắng/thua : {pf.trades.win_rate():.2%}")
print(f"Max drawdown : {pf.max_drawdown():.2%}")
[Ảnh chụp: Terminal in ra các chỉ số Sharpe, tổng lợi nhuận, win rate]
Bước 4: Backtest chi tiết với Backtrader
VectorBT cho ta biết chiến lược có lời không. Để biết nó có ổn định không khi tính slippage, commission thực tế, ta dùng Backtrader.
import backtrader as bt
import pandas as pd
class SmaCross(bt.Strategy):
params = dict(fast=10, slow=50)
def __init__(self):
self.fast_ma = bt.indicators.SMA(period=self.p.fast)
self.slow_ma = bt.indicators.SMA(period=self.p.slow)
self.crossover = bt.indicators.CrossOver(self.fast_ma, self.slow_ma)
def next(self):
if not self.position and self.crossover > 0:
self.buy(size=None) # dùng 95% vốn
elif self.position and self.crossover < 0:
self.close()
Tạo nguồn cấp dữ liệu từ DataFrame đã resample
df = pd.read_csv("btc_1min.csv", parse_dates=["timestamp"])
df.set_index("timestamp", inplace=True)
data = bt.feeds.PandasData(dataname=df)
cerebro = bt.Cerebro()
cerebro.addstrategy(SmaCross)
cerebro.adddata(data)
cerebro.broker.setcash(10000)
cerebro.broker.setcommission(commission=0.001) # 0.1% mỗi lệnh
cerebro.broker.set_slippage_perc(0.0005) # trượt giá 0.05%
print(f"Vốn ban đầu: {cerebro.broker.getvalue():.2f} USDT")
cerebro.run()
print(f"Vốn sau backtest: {cerebro.broker.getvalue():.2f} USDT")
print(f"Lợi nhuận: {(cerebro.broker.getvalue()/10000 - 1):.2%}")
cerebro.plot(style="candlestick", volume=True)
[Ảnh chụp: biểu đồ Backtrader hiển thị nến BTC, các điểm mua bán và equity curve]
Bước 5: Dùng HolySheep AI để "đọc" kết quả backtest cho bạn
Sau khi có các con số như Sharpe 1.85, win rate 56%, drawdown -12%, bạn thường tự hỏi: "Vậy con số này tốt hay xấu? Có nên đánh thật không?". Đây là lúc AI hữu ích. HolySheep AI — nền tảng cung cấp API các mô hình AI lớn (GPT-4.1, Claude Sonnet 4.5, Gemini 2.5 Flash, DeepSeek V3.2…) với chi phí rẻ hơn 85% nhờ tỷ giá ¥1 = $1. Đăng ký tài khoản tại đây để nhận tín dụng miễn phí dùng thử.
import openai
Lấy API key từ dashboard HolySheep sau khi đăng ký
client = openai.OpenAI(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1"
)
stats = """
- Tổng lợi nhuận: 47.3%
- Sharpe ratio: 1.85
- Max drawdown: -12.4%
- Số lệnh thắng: 23/41 (56%)
- Trượt giá trung bình: 0.05%
- Loại chiến lược: SMA Crossover 10/50 trên nến 1 phút BTC/USDT
"""
resp = client.chat.completions.create(
model="deepseek-v3.2", # rẻ và nhanh, phù hợp phân tích số liệu
messages=[
{"role": "system",
"content": "Bạn là chuyên gia quant crypto, trả lời bằng tiếng Việt, ngắn gọn."},
{"role": "user",
"content": f"Phân tích kết quả backtest sau và đề xuất 3 việc cần làm:\n{stats}"}
],
temperature=0.3
)
print(resp.choices[0].message.content)
HolySheep hỗ trợ thanh toán bằng WeChat, Alipay, độ trễ trung bình dưới 50ms — rất quan trọng khi bạn muốn chạy phân tích hàng loạt cho hàng trăm backtest cùng lúc.
Bảng so sánh giá AI phân tích kết quả backtest (đơn vị USD / 1 triệu token)
Giả sử mỗi tháng bạn chạy 500 lần phân tích, trung bình 6.000 token đầu vào + 2.000 token đầu ra = 8.000 token/lần, tổng cộng 4 triệu token/tháng.
| Mô hình | Giá gốc / 1M token | Chi phí qua HolySheep (¥=$1) | Tiết kiệm | Chi phí tháng (4M tok) |
|---|---|---|---|---|
| DeepSeek V3.2 | $0.
Tài nguyên liên quanBài viết liên quan🔥 Thử HolySheep AICổng AI API trực tiếp. Hỗ trợ Claude, GPT-5, Gemini, DeepSeek — một khóa, không cần VPN. |