| Hướng Dẫn Lập Trình Grid Trading Bot (Giao Dịch Lưới) Tự Động Bằng Python

Được viết bởi thanhdt vào ngày 16/06/2026 lúc 16:34 | 39 lượt xem

Chiến lược giao dịch lưới (Grid Trading) là một trong những chiến thuật phổ biến và hiệu quả nhất trong thị trường tài chính đi ngang (sideway hoặc swing). Grid Bot kiếm lợi nhuận bằng cách tự động đặt các lệnh giới hạn (Limit Orders) mua thấp và bán cao theo các khoảng giá cách đều nhau (lưới).

Bài viết này thuộc nội dung Buổi 19 của khóa học Vibe Code Python Bot, hướng dẫn bạn tự tay lập trình một Grid Trading Bot đơn giản bằng Python.


1. Nguyên Lý Hoạt Động Của Grid Trading

Grid Bot hoạt động mà không cần dự báo xu hướng thị trường:
1. Thiết lập biên độ giao dịch: Chọn một khoảng giá trên (Upper Limit) và khoảng giá dưới (Lower Limit).
2. Chia lưới (Grid Levels): Chia khoảng giá này thành nhiều mức (ví dụ: 10 mức lưới cách đều nhau).
3. Đặt lệnh chờ sẵn:
* Các mức lưới dưới mức giá hiện tại sẽ được đặt sẵn lệnh Mua giới hạn (Buy Limit).
* Các mức lưới trên mức giá hiện tại sẽ được đặt sẵn lệnh Bán giới hạn (Sell Limit).
4. Vòng lặp khớp lệnh: Khi giá thị trường quét qua một mức Mua, lệnh mua khớp → Bot lập tức đặt một lệnh Bán giới hạn đối ứng ở mức lưới ngay phía trên để chốt lời. Ngược lại, khi lệnh bán khớp → Bot lập tức đặt lệnh Mua giới hạn đối ứng ở mức phía dưới.


2. Lập Trình Grid Bot Đơn Giản Bằng Python

Dưới đây là đoạn mã Python mô phỏng công cụ thực thi logic Grid Trading hoạt động trên thị trường giả lập thời gian thực:

“`python
import time
import random

class SimpleGridBot:
def init(self, symbol, start_price, lower_limit, upper_limit, grid_count, quantity_per_grid):
self.symbol = symbol
self.current_price = start_price
self.lower_limit = lower_limit
self.upper_limit = upper_limit
self.grid_count = grid_count
self.qty = quantity_per_grid

    # Tính khoảng cách giữa các lưới
    self.grid_step = (upper_limit - lower_limit) / (grid_count - 1)

    # Danh sách các mức giá của lưới
    self.grid_prices = [lower_limit + i * self.grid_step for i in range(grid_count)]

    # Theo dõi trạng thái lệnh tại mỗi mức giá: 'BUY', 'SELL', hoặc 'FILLED_BUY' (đã mua, chờ bán)
    self.orders = {}
    self.setup_grids()

def setup_grids(self):
    print(f"=== KHỞI TẠO LƯỚI CHO {self.symbol} ===")
    print(f"Khoảng giá: {self.lower_limit} - {self.upper_limit} | Khoảng cách lưới: {self.grid_step:.2f}")
    for price in self.grid_prices:
        if price < self.current_price:
            self.orders[price] = 'BUY'
            print(f"  [Buy Limit] đặt sẵn tại giá: {price:.2f}")
        else:
            self.orders[price] = 'SELL'
            print(f"  [Sell Limit] đặt sẵn tại giá: {price:.2f}")

def update_market_price(self, new_price):
    print(f"nGiá thị trường cập nhật: {new_price:.2f}")
    old_price = self.current_price
    self.current_price = new_price

    # Quét kiểm tra xem giá có đi qua các mức lưới nào không
    for price in self.grid_prices:
        # Mô phỏng giá đi qua mức lưới
        if min(old_price, new_price) <= price <= max(old_price, new_price):
            self.execute_grid_logic(price)

def execute_grid_logic(self, price):
    state = self.orders.get(price)

    if state == 'BUY':
        # Khớp lệnh mua giới hạn
        self.orders[price] = 'FILLED_BUY'
        print(f"🟢 [KHỚP LỆNH MUA] Mức lưới: {price:.2f} | Đã mua {self.qty} {self.symbol}")
        # Lập tức đặt lệnh bán chốt lời ở mức lưới phía trên
        target_sell_price = price + self.grid_step
        if target_sell_price in self.orders:
            self.orders[target_sell_price] = 'SELL'
            print(f"  → Đặt sẵn lệnh [Bán chốt lời] đối ứng tại mức: {target_sell_price:.2f}")

    elif state == 'SELL':
        # Khớp lệnh bán giới hạn
        self.orders[price] = 'BUY'
        print(f"🔴 [KHỚP LỆNH BÁN] Mức lưới: {price:.2f} | Đã bán chốt lời {self.qty} {self.symbol}!")
        # Lập tức đặt lệnh mua lại ở mức lưới phía dưới
        target_buy_price = price - self.grid_step
        if target_buy_price in self.orders:
            self.orders[target_buy_price] = 'BUY'
            print(f"  → Đặt sẵn lệnh [Mua cover] đối ứng tại mức: {target_buy_price:.2f}")

Chạy thử nghiệm mô phỏng hoạt động của bot

if name == “main“:
# Khởi tạo Grid Bot cho cặp BTC với biên độ từ 60,000 USDT đến 69,000 USDT chia làm 10 lưới
bot = SimpleGridBot(
symbol=”BTC/USDT”,
start_price=65000,
lower_limit=60000,
upper_limit=69000,
grid_count=10,
quantity_per_grid=0.01
)

#  phỏng giá chạy ngẫu nhiên trong vùng lưới
simulated_price = 65000
for i in range(10):
    time.sleep(2)
    # Giá thay đổi ngẫu nhiên tăng hoặc giảm từ 500 - 1500 USD
    change = random.choice([-1, 1]) * random.randint(500, 1500)
    simulated_price += change
    bot.update_market_price(simulated_price)