FIN3B – FIN BOT BYTE BIT

Bot giao dịch định lượng theo xu hướng cho Crypto Futures Bitget

6
Fin3B – Fin Bot Byte Bit là bot giao dịch crypto futures được xây dựng theo tư duy định lượng, tập trung vào xác định xu hướng, kiểm định chiến lược và triển khai lệnh nhanh qua API Bitget , nhưng vẫn giữ nguyên tắc quản trị rủi ro trước khi trade thật.
Dự án hướng tới 3 mục tiêu chính:
- Thu thập và kích hoạt tín hiệu mua/bán theo đúng bối cảnh xu hướng
- Kiểm định lợi thế chiến lược bằng backtest
- Triển khai lệnh nhanh qua API Bitget nhưng không bỏ qua risk control
1. Tư duy cốt lõi khi xây bot
Bot được thiết kế dựa trên nguyên tắc phân tích kỹ thuật chuyên nghiệp theo logic:
- Trend First – Chỉ giao dịch khi xu hướng rõ ràng
- Data Driven Decisions – Không vào lệnh theo cảm giác
- Edge Validation – Chiến lược phải kiểm chứng được
- Risk Managed Positioning – Không all-in, không quá đòn bẩy
Đây cũng là tư duy nền tảng mà CMT (Chartered Market Technician) hướng đến khi đào tạo trader chuyên nghiệp.
2. Kiến trúc vận hành của Fin3B
Fin3B hoạt động theo pipeline 3 lớp:
a. Byte (Buy Signal Bot)
- Quét danh sách coin futures USDT trên Bitget
- Đọc cấu trúc giá HH–HL hoặc LH–LL
- Đánh giá xu hướng bằng MA6–10–20 và MACD
- Tạo tín hiệu mua/bán khi đúng pha xu hướng
b. Test (Backtest Engine)
- Lấy dữ liệu lịch sử OHLCV từ API Bitget
- Kiểm định quy tắc chiến lược
- Đo lường hiệu suất: expectancy, RR, drawdown, streak
- Lưu log ra CSV để trader đánh giá
c. Bit (Deploy nhanh qua Bitget API)
- Ký request REST trực tiếp vào API Bitget
- Triển khai lệnh nhanh nhưng có tính toán vị thế theo risk %
- Monitoring lệnh theo ngày: fee, funding, P&L thực
- Cảnh báo khi xu hướng đổi pha hoặc drawdown cao
3. Các sai lầm mà Fin3B giúp tránh được
- Không phân biệt xu hướng → bot giao dịch sai pha
- Không kiểm định chiến lược → bot tưởng edge nhưng không có
- Tín hiệu trễ, mâu thuẫn khi dùng quá nhiều indicator
- Không có SL/TP rõ ràng trước khi triển khai
- Vào vị thế quá lớn so với tài khoản
- Gồng lệnh ngược trend vì tin vào “indicator bất bại”
Fin3B không cố tìm chiến lược hoàn hảo, mà giúp bot:
Giao dịch đúng bối cảnh, đúng xu hướng, đúng khối lượng và có vòng kiểm định bắt buộc trước khi trade thật.
4. Mối liên hệ giữa Fin3B và khóa học sắp khai giảng
Khóa học Phân Tích Kỹ Thuật – Chiến Lược Xu Hướng VIP của Hướng Nghiệp Dữ Liệu đang chuẩn bị khai giảng là môi trường phù hợp nhất để bạn:
- Học cách xác định xu hướng bài bản bằng MA và MACD
- Hiểu chu kỳ thị trường, sóng cung cầu và retest cấu trúc giá
- Thực hành backtest chiến lược crypto đúng chuẩn
- Xây hệ thống giao dịch có quy tắc rõ ràng, tái lập được
- Có 6 buổi phụ đạo 1:1 để tối ưu chiến lược/bot cá nhân
- Không đi theo đường tắt ảo tưởng “chén thánh”
Thông tin khóa học sắp khai giảng:
5. Chén thánh trong Fin3B không phải indicator
Nếu có “chén thánh”, đó không phải:
- một indicator,
- một mô hình nến,
- hay một công thức bí mật.
Mà là sự kết hợp có kiểm chứng giữa:
| Thành phần | Vai trò trong bot |
|---|---|
| Xu hướng (MA + cấu trúc giá) | Định hướng lệnh |
| Động lượng (MACD + Volume) | Đo cấp độ trend |
| Chu kỳ & nhịp sóng | Định thời điểm tham gia |
| Risk Control + Position Size | Bảo vệ tài khoản |
| Kỷ luật triển khai | Quyết định hiệu quả |
Khóa Xu Hướng VIP đang đào tạo học viên theo đúng khung tư duy này.
Kiến trúc Fin3B — ba khối và cách chúng nói chuyện với nhau
Fin3B không phải một "bot thần kỳ". Nó là một hệ thống gồm ba khối rõ ràng, mỗi khối có trách nhiệm riêng và có thể kiểm thử độc lập.
flowchart TB
A[Raw Data Block - thu thap] --> B[Logic/AI Block - chuan hoa va sinh tin hieu]
B --> C[Risk Block - tinh khoi luong, SL/TP]
C --> D[Execution Block - dat lenh]
D --> E[Monitoring Block - giam sat va bao cao]
E -.->|phan hoi| B
| Khối | Trách nhiệm | Nếu khối này hỏng thì sao? |
|---|---|---|
| Raw Data | Thu thập nến, tick, thông tin tài khoản | Bot không có dữ liệu → dừng an toàn |
| Logic/AI | Chuẩn hoá, tính chỉ báo, sinh tín hiệu | Vào lệnh sai → nguy hiểm nhất |
| Risk | Tính khối lượng, SL/TP, giới hạn lỗ | Rủi ro vượt kiểm soát → có thể cháy tài khoản |
| Execution | Gửi lệnh, xác nhận khớp, xử lý lỗi | Không vào được lệnh, hoặc vào lặp |
| Monitoring | Log, cảnh báo, báo cáo | Bạn không biết bot đang làm gì |
💡 Nguyên tắc thiết kế quan trọng nhất: mỗi khối phải thất bại an toàn. Nếu không lấy được dữ liệu, bot không được vào lệnh với dữ liệu cũ. Nếu tính khối lượng lỗi, bot phải từ chối giao dịch thay vì vào lệnh với số mặc định.
Khối Risk — phần quyết định bot sống hay chết
from dataclasses import dataclass
from decimal import Decimal
@dataclass
class CauHinhRuiRo:
"""Toàn bộ tham số rủi ro ở một chỗ — dễ kiểm tra, dễ thay đổi."""
rui_ro_moi_lenh_pct: float = 1.0 # tối đa 1% số dư mỗi lệnh
so_lenh_toi_da_moi_ngay: int = 3
drawdown_dung_bot_pct: float = 10.0 # lỗ 10% thì tự dừng
he_so_atr_sl: float = 2.0
he_so_atr_tp: float = 4.0 # R:R = 1:2
class QuanTriRuiRo:
def __init__(self, cau_hinh: CauHinhRuiRo):
self.ch = cau_hinh
self.so_du_ban_dau: Decimal | None = None
self.so_lenh_hom_nay = 0
self.dang_dung = False
def ghi_nhan_so_du_ban_dau(self, so_du: Decimal) -> None:
if self.so_du_ban_dau is None:
self.so_du_ban_dau = so_du
def kiem_tra_drawdown(self, so_du_hien_tai: Decimal) -> bool:
"""Trả True nếu ĐƯỢC phép giao dịch tiếp."""
if self.so_du_ban_dau is None:
return True
drawdown = (1 - so_du_hien_tai / self.so_du_ban_dau) * 100
if drawdown >= self.ch.drawdown_dung_bot_pct:
self.dang_dung = True
return False
return True
def co_the_vao_lenh(self) -> tuple[bool, str]:
if self.dang_dung:
return False, "Bot đang tạm dừng do vượt ngưỡng drawdown"
if self.so_lenh_hom_nay >= self.ch.so_lenh_toi_da_moi_ngay:
return False, f"Đã đạt giới hạn {self.ch.so_lenh_toi_da_moi_ngay} lệnh/ngày"
return True, ""
def tinh_khoi_luong(self, so_du: Decimal, gia: float, atr: float) -> Decimal:
"""Khối lượng sao cho khi chạm SL chỉ mất đúng rui_ro_moi_lenh_pct."""
so_tien_rui_ro = so_du * Decimal(str(self.ch.rui_ro_moi_lenh_pct / 100))
khoang_cach_sl = atr * self.ch.he_so_atr_sl
if khoang_cach_sl <= 0:
raise ValueError("ATR không hợp lệ — không tính được khối lượng")
khoi_luong = so_tien_rui_ro / Decimal(str(gia)) / Decimal(str(khoang_cach_sl / gia))
return round(khoi_luong, 6)
Vì sao dùng Decimal thay float cho tiền: float có sai số dấu phẩy động. Cộng 0,1 + 0,2 trong Python cho ra 0.30000000000000004. Với hàng nghìn giao dịch, sai số này tích luỹ và có thể làm lệch báo cáo. Decimal chính xác tuyệt đối.
Khối Monitoring — biến bot từ "hộp đen" thành hệ thống kiểm soát được
import csv
import logging
from datetime import datetime
from pathlib import Path
logger = logging.getLogger(__name__)
COT_NHAT_KY = [
"thoi_diem", "su_kien", "symbol", "huong", "khoi_luong",
"gia", "sl", "tp", "so_du", "ly_do",
]
class NhatKyGiaoDich:
def __init__(self, duong_dan: str = "nhat-ky-giao-dich.csv"):
self.path = Path(duong_dan)
if not self.path.exists():
with self.path.open("w", newline="", encoding="utf-8-sig") as f:
csv.writer(f).writerow(COT_NHAT_KY)
def ghi(self, su_kien: str, **thong_tin) -> None:
dong = {"thoi_diem": datetime.now().isoformat(timespec="seconds"),
"su_kien": su_kien}
dong.update({k: thong_tin.get(k, "") for k in COT_NHAT_KY if k not in dong})
with self.path.open("a", newline="", encoding="utf-8-sig") as f:
csv.DictWriter(f, fieldnames=COT_NHAT_KY).writerow(dong)
logger.info("[%s] %s", su_kien, {k: v for k, v in dong.items() if v != ""})
Dùng encoding="utf-8-sig" để Excel mở file CSV tiếng Việt không bị lỗi font — chi tiết nhỏ nhưng tiết kiệm rất nhiều thời gian.
Bốn câu hỏi kiểm định trước khi tin một chiến lược
Fin3B hướng tới "kiểm định lợi thế". Đây là cách kiểm định cụ thể:
| Câu hỏi | Cách trả lời | Dấu hiệu cảnh báo |
|---|---|---|
| Chiến lược có lợi thế thật không? | Backtest ≥ 500 lệnh, ≥ 2 năm dữ liệu | < 100 lệnh → chưa đủ mẫu |
| Lợi thế có bền không? | Chia dữ liệu thành 4 giai đoạn, xem từng giai đoạn | Chỉ 1 giai đoạn lãi → overfit |
| Có bị phụ thuộc tham số không? | Đổi tham số ±20%, xem kết quả | Kết quả sụp hoàn toàn → quá nhạy |
| Có chịu được chi phí không? | Trừ spread + phí vào mọi lệnh | Lãi biến mất sau khi trừ phí |
import numpy as np
import pandas as pd
def kiem_dinh_on_dinh(ket_qua_lenh: pd.Series, so_phan: int = 4) -> pd.DataFrame:
"""Chia chuỗi lệnh thành nhiều giai đoạn — phát hiện overfit."""
doan = np.array_split(ket_qua_lenh.values, so_phan)
ban_ghi = []
for i, d in enumerate(doan, 1):
thang = (d > 0).sum()
ban_ghi.append({
"giai_doan": f"{i}/{so_phan}",
"so_lenh": len(d),
"ty_le_thang": round(thang / len(d) * 100, 1) if len(d) else 0,
"loi_nhuan": round(float(np.sum(d)), 4),
"dat": np.sum(d) > 0,
})
return pd.DataFrame(ban_ghi)
# Ví dụ minh hoạ: 400 lệnh mô phỏng
rng = np.random.default_rng(42)
lenh_mo_phong = pd.Series(rng.normal(0.004, 0.02, 400)) # kỳ vọng dương nhẹ
print(kiem_dinh_on_dinh(lenh_mo_phong))
⚠️ Đây là phép thử khiến nhiều chiến lược "đẹp" trên giấy bị loại. Nếu lợi nhuận chỉ đến từ một giai đoạn duy nhất, gần như chắc chắn đó là may mắn chứ không phải lợi thế.
Kết luận
Fin3B – Fin Bot Byte Bit không hứa hẹn chiến lược hoàn hảo. Nó hướng tới mục tiêu thực tế hơn và bền vững hơn:
Xây bot giao dịch theo xu hướng có kiểm định lợi thế, triển khai nhanh nhưng không đánh mất quản trị rủi ro.