Cập nhật lần cuối: Tháng 5/2026. Mọi chỉ số được mô tả ở đây đều là các trường thực tế trong engine sandbox của fomoed. Kết quả backtest mang tính giáo dục — hiệu suất quá khứ không dự báo được lợi nhuận tương lai.
Khác biệt giữa cảm giác chiến lược của bạn hoạt động và biết chắc nó hoạt động chỉ nằm ở một con số: nó sẽ vận hành ra sao xuyên suốt vài năm nến thật vừa qua, bao gồm cả những giai đoạn thị trường mà bạn không hề giao dịch trong đó. Đó là backtest. Làm trung thực, đây là bài tập hữu ích nhất một trader discretionary có thể chạy trước khi tự động hóa. Làm cẩu thả, nó chỉ là một bản chào hàng bạn tự viết cho chính mình — mọi tham số được tinh chỉnh đến khi đường cong đẹp như mơ, rồi tiền thật mới phát hiện ra những thứ bạn quên mô hình hóa.
Con đường truyền thống để backtest từng trông thế này: viết Python, kéo OHLCV lịch sử từ API sàn, tự tính indicator, mô phỏng slippage, tính phí, xử lý partial fill, viết phần phân tích, vẽ đường cong vốn. Đa số trader bỏ cuộc ngay ở bước một. Số ít đến được bước bảy thì lại có một engine backtest hơi khác so với nền tảng giao dịch thật mà họ sẽ deploy lên — và khoảng cách đó ăn mòn họ khi vào production.
Sandbox của fomoed bỏ luôn cả ngăn xếp đó. Chọn cặp, chọn template chiến lược, chọn khoảng thời gian, nhấn Run. Ba năm nến lịch sử trên mọi cặp được hỗ trợ, giả định phí thật theo từng sàn, cùng đường code engine chạy bot live, kết quả trong chưa đến một phút. Không Python, không API key, không Jupyter, không bảng tính. Bài viết này đi qua workflow từ đầu đến cuối và — quan trọng hơn — phân tích năm cạm bẫy biến một backtest đẹp đẽ thành khoản lỗ tiền thật.
Bỏ qua phần giải thích — chạy backtest ngay
Tài khoản miễn phí, không thẻ, không Python. Chọn cặp, chọn chiến lược, nhấn Run. Kết quả đầu tiên trong khoảng một phút.
Mở Sandbox →Bạn có thể backtest những gì trong sandbox
Engine sandbox hiện hỗ trợ bốn nhóm chiến lược, mỗi nhóm có không gian cấu hình riêng:
Chiến lược tùy biến dựa trên indicator
RSI mean-reversion, EMA crossover, MACD confluence, Bollinger Band squeeze, VWAP fade, các setup đa indicator. Mười hai indicator được mở (RSI, EMA, SMA, MACD, ATR, ROC, Bollinger, VWAP, Williams %R, Stochastic, OBV, ADX) và bất kỳ kết hợp nào cũng có thể đóng vai trò trigger vào lệnh hoặc bộ lọc. Engine xử lý các tham số động — so sánh độ rộng band, cửa sổ lookback, điều kiện "cross từ trên/dưới" — nên bạn không phải tự viết phần toán.
Bot DCA & grid
Dollar-cost averaging với tùy chọn thang safety-order, take-profit trên tổng vị thế, và điều kiện trigger có thể tùy biến. Bot grid xếp lệnh mua/bán dọc theo một khoảng giá xác định với TP từng ô. Cả hai chạy trong cùng engine với phiên bản live — sandbox không phải đường code khác, nó là cùng vòng lặp trader.execute() được nạp nến lịch sử thay vì feed live.
Smart Money Concepts (SMC)
CHoCH (change of character), BoS (break of structure), order block, fair value gap, Fibonacci retracement (gồm cả vùng OTE 0.618–0.79), và liquidity sweep. Bảy primitive, đều được phát hiện bằng thuật toán — sandbox cho bạn thấy chính xác những pivot mà engine live đã đánh dấu trong thời gian thực. Xem hướng dẫn pillar về SMC để biết phần toán.
Chiến lược AI Trading Agent
Nếu bạn có thể mô tả chiến lược trong hai đến bốn câu tiếng Anh đơn giản, AI trading agent của fomoed sẽ sinh ra một script Python chạy bên trong chính sandbox. Script có thể kết hợp các primitive indicator và SMC nhưng không tự bịa ra cái mới. Hữu ích cho kiểu "mua khi RSI<30 VÀ price>200EMA, thoát ở +3% hoặc RSI>70" — gõ một lần, AI lo phần đấu dây. Xem bài pillar về AI Trading Agent để biết kiến trúc.
Cách chạy một backtest trong 60 giây
Luồng đầu-cuối có sáu cú click, trong đó hai cú là tùy chọn. Con số trong ngoặc là thời gian thực tế của người dùng lần đầu.
- Mở sandbox (5s). Đăng ký miễn phí nếu chưa có — email hoặc ví, không KYC, không thẻ. Click Sandbox ở sidebar dashboard.
- Chọn thị trường (10s). Sàn (Hyperliquid / Binance / Bybit / OKX / Decibel / AsterDex / GRVT / Extended / StandX), symbol (ví dụ BTC/USDC:USDC), timeframe (1m / 5m / 15m / 30m / 1h / 4h).
- Chọn khoảng thời gian (5s). Mặc định là 30 ngày gần nhất. Click vào ô chọn ngày để mở rộng; sandbox hỗ trợ đến ba năm lịch sử cho mỗi cặp.
- Cấu hình chiến lược (20s). Chọn preset (RSI / Custom / DCA / Grid / SMC / AI Trading Agent) hoặc đặt tham số indicator thủ công. Giao diện sandbox phản chiếu wizard bot live y hệt — nếu bạn cấu hình được bot live, bạn cấu hình được backtest.
- Click Run (15–90s). Hầu hết backtest hoàn thành trong 10–30 giây; các lần chạy dài 5 phút có thể mất tới 90s lần đầu (được cache cho các lần sau).
- Đọc kết quả (10 phút tiếp theo — xem bên dưới).
Cách đọc kết quả một cách trung thực
Sáu chỉ số quan trọng. Ba cái đầu là phù phiếm; ba cái sau là thực tế. Hãy xem cả sáu — đừng bao giờ quyết định chỉ dựa trên một con số.
Win rate
Profit factor
Max drawdown
Sharpe ratio
Đường cong vốn (equity curve)
Trade log
5 cạm bẫy backtest (và cách sandbox xử lý chúng)
1. Overfit vào một giai đoạn duy nhất
Bạn tinh chỉnh cận dưới RSI từ 35 xuống 32 xuống 28 cho đến khi đường cong vốn trông tuyệt đẹp. Chúc mừng — bạn vừa tìm ra giá trị tham số phù hợp với đúng đoạn lịch sử giá đó. Chạy lại trên khoảng khác, lợi nhuận biến mất. Cách tránh: luôn test cùng bộ tham số trên ít nhất hai khoảng không chồng lấn (ví dụ 2023–2024 VÀ 2024–2025). Sandbox khiến việc này trở nên dễ dàng — nhân bản config, đổi khoảng ngày, so sánh kết quả. Nếu chỉ số rớt đài, bạn đã over-fit.
2. Giả vờ phí không tồn tại
Một chiến lược scalping bắn 30 lệnh/ngày với 0.1% mỗi fill đốt 6%/ngày chỉ riêng tiền phí. Sandbox áp đúng taker rate của từng sàn (Hyperliquid 0.045%, Binance 0.05%, Bybit 0.055%, v.v.) trên mỗi fill. Nếu bạn đang test một chiến lược tần suất cao mà kết quả không tính phí, con số bạn đang nhìn là hư cấu. Profit factor và PnL ròng của sandbox đều là sau phí. Kiểm tra: check trade log; phí trên mỗi lệnh nên xuất hiện như một khoản giảm nhỏ ở mỗi lần vào/ra.
3. Cho rằng fill tức thì
Trong giao dịch thật, lệnh của bạn không fill đúng giá bạn muốn — có slippage, đặc biệt với size lớn hoặc cặp thanh khoản mỏng. Một backtest ngây thơ fill ở open của bar kế tiếp, điều này quá lạc quan. Sandbox dùng mô hình fill thận trọng: lệnh market fill ở giá open của bar cộng với dung sai slippage có thể tùy chỉnh (mặc định 0.05%); take-profit fill khi high của bar chạm mức TP (hoặc tại close, tùy theo toggle "touch vs close"); stop loss fill ở giá SL khi bị trigger trong nến. Kiểm tra: siết dung sai slippage và chạy lại; nếu kết quả sụp đổ, chiến lược của bạn đang phụ thuộc vào fill hoàn hảo.
4. Look-ahead bias
Cái này lén lút. Nếu chiến lược dùng giá close của cây nến hiện tại để quyết định vào lệnh ngay trong cây đó, bạn đang gian lận — trong thời gian thực, nến chưa đóng tại thời điểm ra quyết định. Sandbox cưỡng chế tính nhân quả: tại bar N engine chỉ thấy OHLCV từ bar 0 đến N-1. Giá trị indicator dùng tại open của bar N được tính từ N-1 bar trước. Nếu bạn mô tả một chiến lược muốn đọc "close của nến hiện tại", sandbox dùng close của bar trước làm thay thế. Kiểm tra: một chiến lược kiểu "giá đoạt lại EMA tại bar này" nên được viết lại thành "bar trước đoạt lại EMA."
5. Mù trước thay đổi regime
Xu hướng crypto trông rất khác nhau ở từng regime — accumulation, markup, distribution, markdown. Một chiến lược in tiền trong pha markup thường chảy máu nặng trong distribution. Cửa sổ 3 năm mặc định của sandbox bao trùm ít nhất một chu kỳ đầy đủ kể cả một đợt drawdown đáng kể, nhưng bạn nên cắt khoảng thời gian thành các đoạn và kiểm tra từng giai đoạn con. Kiểm tra: chạy cùng config ba lần — 2023, 2024, 2025 — và xem chỉ số của từng năm độc lập. Nếu 2024 cõng cả kết quả, bạn đang đặt cược vào kịch bản 2024 lặp lại.
Sandbox của fomoed giữ tính trung thực thế nào
Engine sandbox chạy chính đoạn code Python như bot live — không phải một bản triển khai song song. Toán indicator, đánh giá tín hiệu, sizing vị thế, trừ phí, quy tắc fill TP/SL, theo dõi trailing stop: tất cả đều một-nguồn-sự-thật. Khi bạn chuyển một chiến lược đã backtest sang bot live, thứ duy nhất thay đổi là engine đọc luồng nến nào — parquet lịch sử hay WS sàn live — mọi byte logic khác đều y hệt.
Điều này quan trọng vì hầu hết công cụ backtest có sẵn lại là một đường code khác hẳn với nền tảng thực thi live mà cuối cùng bạn deploy. Chúng mô phỏng logic "đủ gần" với những giả định khác nhẹ — và khoảng cách đó âm thầm ăn mòn lợi thế của bạn khi fill thật vào cuộc. Sandbox loại bỏ khoảng cách đó bằng kiến trúc.
Engine cũng công bố schema kết quả công khai: các chỉ số (win rate, profit factor, max drawdown, Sharpe, gross/net PnL, avg win/loss, thời gian giữ lệnh trung bình), toàn bộ trade log kèm lý do, và đường cong vốn dưới dạng chuỗi thời gian. Không có trường "score" ẩn nào gộp mọi thứ thành một con số được tối ưu để trông đẹp — mỗi chỉ số đều có thể kiểm chứng độc lập từ trade log.
Câu hỏi thường gặp
Một backtest mất bao lâu?
Hầu hết backtest hoàn thành trong 10–30 giây với các khoảng dưới một năm. Backtest 5 phút dài qua nhiều năm có thể mất tới 90 giây ở lần đầu — sau đó, cache OHLCV được hit và các lần chạy lại nhanh hơn 5–10×.
Tôi có bao nhiêu dữ liệu lịch sử?
Ba năm OHLCV cho mỗi cặp được hỗ trợ trên sáu khung thời gian (1m, 5m, 15m, 30m, 1h, 4h). Cache được làm mới hàng đêm qua cron; nếu bạn backtest cặp mới list hay có lịch sử thưa, engine sẽ lấp khoảng từ CCXT live trong lần chạy đầu rồi cache cho các lần sau.
Kết quả có deterministic không?
Có — cùng config + cùng khoảng ngày = cùng kết quả. Engine không có yếu tố ngẫu nhiên ẩn; ngay cả slippage cũng được áp một cách xác định dựa trên open/high/low/close của nến. Điều này nghĩa là bạn có thể so sánh hai config một-một bằng cách chạy cả hai trên cùng khoảng thời gian.
Tôi có thể xuất trade log không?
Có — mỗi kết quả backtest đều kèm một file CSV tải về được với mọi lệnh đơn lẻ (timestamp và giá vào/ra, size vị thế, phí, P&L, lý do thoát). Hữu ích nếu bạn muốn tự phân tích trong bảng tính hoặc notebook pandas.
Backtest có mô hình funding rate không?
Với hợp đồng perpetual, có — engine áp funding rate 8 giờ thực tế tại mỗi cửa sổ funding trong khi đang giữ vị thế. Funding rate được lấy từ dữ liệu lịch sử của sàn khi có sẵn; cho những trường hợp hiếm không có, engine dùng giả định funding bằng không một cách thận trọng.
Khác biệt giữa "touch" và "close" cho take-profit là gì?
Touch nghĩa là TP fill ngay khoảnh khắc high của bar chạm giá TP trong nến. Close nghĩa là chỉ fill nếu bar đóng tại hoặc trên mức TP. Touch lạc quan hơn (khớp với hành vi lệnh market trong cú di chuyển nhanh); close thận trọng hơn (khớp với hành vi lệnh limit hoặc khi thanh khoản trong nến mỏng). Sandbox cho bạn chọn theo từng TP.
Có nên tin một backtest với win rate 90%?
Không. Win rate đơn thuần gần như không bao giờ là chỉ số cần tối đa hóa — hãy ghép cặp với profit factor, max drawdown, và đường cong vốn. Win rate 90% với profit factor 0.7 nghĩa là bạn thắng nhỏ và thua lớn; bạn sẽ phá sản từ từ. Win rate 45% với profit factor 2.5 nghĩa là bạn thắng to hơn lỗ; thường đây mới là chiến lược tốt hơn.
Đừng đoán mò nữa — hãy backtest ý tưởng của bạn
Bạn đọc đến đây vì một lý do. Sandbox miễn phí, không cần Python, ba năm dữ liệu lịch sử trên mọi cặp được hỗ trợ.
Bắt Đầu Miễn Phí →Tài nguyên liên quan
- Cách Dựng Bot Giao Dịch Bằng AI Với Tiếng Anh Đơn Giản (Không Cần Code)
- Smart Money Concepts Với AI: CHoCH, BoS và Fib
- 15 Prompt Bot Giao Dịch AI Bạn Có Thể Copy-Paste
- Paper Trading: Test Chiến Lược Không Rủi Ro
- Chiến Lược Bot Crypto Tốt Nhất 2026: Hướng Dẫn So Sánh
- Engine Chiến Lược Custom của fomoed
- AI Trading Agent của fomoed


