| Quản Lý Lệnh & Nền Tảng MT5 — Bot Auto Trading Buổi 1 (MQL5) | HNDL

Được viết bởi Đặng Trí Thanh vào ngày 07/08/2026 lúc 17:34 | 43 lượt xem

Quản lý lệnh là bài học nền tảng quan trọng nhất khi xây dựng bot auto trading trên MT5. Nếu bot không quản lý lệnh đúng cách, bạn sẽ gặp ba rủi ro chết người: lệnh mồ côi (orphan order), lệnh trùng lặp (duplicate order)bỏ sót lệnh đang quản lý (missed order).

Bài viết này là nội dung Buổi 1 — Quản Lý Lệnh & Nền Tảng MT5 trong khóa Lập trình MT5 nâng cao Hedging & Tự động hóa, hướng dẫn chi tiết cách dùng global variables (biến toàn cục)comment chuẩn hóa để bot luôn biết chính xác từng lệnh đang quản lý — nền tảng để xây bot hedging an toàn, không trùng lặp, không bỏ sót.

1. Vì sao bot cần quản lý lệnh?

Khi bot đã gửi lệnh lên sàn, bạn có thể tưởng rằng “xong” — nhưng thực tế mọi thứ mới bắt đầu. Nếu bot không ghi nhớ và quản lý các lệnh đang mở, nó sẽ rơi vào một trong ba tình huống nguy hiểm:

1.1. Lệnh trùng lặp (Duplicate Order)

Bot vào lệnh ở một tầng giá mới (ví dụ B0) mà không biết giá khởi tạo (base) ban đầu là bao nhiêu. Khi giá quay lại đúng vùng đó, bot lại vào lệnh trùng với lệnh cũ đang có. Kết quả: khối lượng gấp đôi, rủi ro ngoài kiểm soát.

1.2. Lệnh mồ côi (Orphan Order)

Bot vào lệnh nhưng không ghi lại thông tin. Khi chương trình khởi động lại hoặc bot bị ngắt (restart, VPS tắt, đổi cấu hình…), những lệnh cũ “biến mất” khỏi bộ nhớ của bot — trở thành lệnh mồ côi không ai quản lý. Lệnh này vẫn nằm trên sàn, vẫn bị âm/dương theo thị trường, nhưng bot không cắt được.

1.3. Bỏ sót lệnh đang quản lý (Missed Order)

Bot không biết lệnh đang quản lý ở đâu, trạng thái ra sao (âm hay dương), nên không thể đưa ra quyết định cắt lệnh, dịch lệnh hay thêm lệnh kịp thời.

2. Giải pháp: Dữ liệu bền vững (Global Variables + Comment)

Để bot luôn biết trạng thái lệnh kể cả sau khi khởi động lại, giải pháp chuẩn trong MQL5 là kết hợp hai lớp dữ liệu:

  1. Global Variables (biến toàn cục) — lưu trạng thái của bot, tồn tại độc lập với phiên làm việc của bot.
  2. Comment — ghi thông tin định danh trên chính lệnh trên sàn.

Hai lớp này bổ sung cho nhau:

  • Global variables giúp bot khôi phục trạng thái nhanh khi khởi động.
  • Comment giúp bot “nhận diện” từng lệnh cụ thể trên sàn, ngay cả khi biến toàn cục bị mất.

3. Comment trên lệnh MT5 — cách chuẩn hóa

Khi bạn nhìn vào danh sách lệnh trên MT5 (Tab Toolbox → Trade), mỗi lệnh có một cột Comment. Đây chính là nơi bot ghi “giấy khai sinh” cho lệnh.

3.1. Đặt tên lệnh có cấu trúc

Khi đẩy lệnh lên sàn, hãy ghi comment theo cấu trúc có quy ước, ví dụ:

TEN_BOT_B0_Buy_0
TEN_BOT_S1_Sell_1

Trong đó:

  • Tên bot — định danh bot sở hữu lệnh.
  • HướngBuy hoặc Sell.
  • Tầng giá (step/level)B0, B1, S1, S2… vị trí của lệnh trong cụm.
  • Chỉ số (index/type)0, 1, -1, -2… giúp bot cắt chuỗi comment và nhận biết đúng lệnh.

3.2. Quy ước dấu gạch dưới (underscore)

Quy tắc quan trọng khi đặt comment:

  • Giữa các giá trị khác nhau → dùng dấu gạch dưới _ để phân tách.
  • Trong cùng một giá trị (ví dụ tầng -1) → cũng dùng gạch dưới để giữ nguyên ý nghĩa khi bot cắt chuỗi (split).

Ví dụ comment B0_Sell_-1:

  • B0 = tầng giá.
  • Sell = hướng bán.
  • -1 = index của lệnh.

Khi bot cắt chuỗi bằng dấu _, nó nhận được các phần B0, Sell, -1 — đủ thông tin để biết đây là lệnh nào, thuộc cụm nào, cần xử lý ra sao.

3.3. Lợi ích của comment chuẩn hóa

  • Bot không vào lệnh trùng khi giá quay lại tầng đã có lệnh (vì đã ghi lại trên comment).
  • Bot nhận diện được lệnh mồ côi khi khởi động lại: quét toàn bộ lệnh trên sàn, đọc comment, tái lập trạng thái.
  • Bot phân biệt Buy/Sell, tầng, index chính xác — nền tảng của chiến lược hedging (có cả lệnh Buy lẫn Sell trong cùng cụm).

4. Kiểu dữ liệu cơ bản trong MQL5

Trước khi bắt tay viết mã quản lý lệnh, cần nắm chắc các kiểu dữ liệu nền tảng trong MQL5 — vì chúng quyết định cách bạn lưu giá, khối lượng, số lệnh và ticket.

4.1. double — kiểu thập phân (8 bytes)

  • Dùng 8 bytes bộ nhớ.
  • Lưu giá, khối lượng (volume)tiền — luôn là số thập phân.
  • Độ chính xác ~15 chữ số sau dấu phẩy.
  • Ví dụ: giá 1.10542, khối lượng 0.01, 0.5, 1.25 lot.
  • Lưu ý: khối lượng hiếm khi là số nguyên (1 lot nguyên có thể dùng, nhưng thường vào 0.01…).

4.2. int — kiểu số nguyên (4 bytes)

  • Dùng 4 bytes bộ nhớ.
  • Lưu số lượng lệnh, magic number, hoặc index/tầng (như 0, 1, -1, -2).
  • Giá trị tối đa khoảng 2 tỷ (~2.147.483.647).

4.3. ulong — kiểu số nguyên không dấu (8 bytes)

  • Dùng 8 bytes bộ nhớ.
  • Lưu ticket của lệnh/giao dịch — con số định danh duy nhất mà sàn cấp cho từng lệnh.
  • Giá trị có thể lên đến 18 tỷ tỷ — rất lớn, đủ để chứa ticket của hàng tỷ lệnh.
  • Vì ticket rất lớn và không bao giờ âm, nên dùng ulong thay vì int.

4.4. Bảng tóm tắt kiểu dữ liệu MQL5

Kiểu Bytes Dùng để lưu Phạm vi Ví dụ
double 8 Giá, khối lượng, tiền ~15 chữ số thập phân 1.10542, 0.01
int 4 Số lệnh, magic, index ±2 tỷ 0, 1, -1, 55111
ulong 8 Ticket lệnh 0 → 18 tỷ tỷ 1402553821…

5. Ghép lại: mô hình quản lý lệnh hoàn chỉnh

Kết hợp tất cả, một bot auto trading an toàn sẽ vận hành theo vòng lặp:

  1. Quét lệnh trên sàn — đọc toàn bộ lệnh đang mở (đúng magic number).
  2. Đọc comment từng lệnh — phân tích chuỗi B0_Sell_-1 để biết hướng, tầng, index.
  3. Đối chiếu global variables — khôi phục trạng thái bot (đã vào tầng nào, chưa vào tầng nào).
  4. Quyết định vào lệnh — chỉ vào khi chưa có lệnh ở tầng đó (tránh trùng lặp).
  5. Ghi lại dữ liệu — cập nhật global variable + comment cho lệnh mới.
  6. Quản lý & thoát — cắt lệnh theo chiến lược, chỉ cắt đúng lệnh bot sở hữu.

Mô hình này giúp bot sống sót qua restart: dù bot tắt rồi bật lại, nó vẫn “nhớ” tất cả lệnh từ comment + global variables → không tạo lệnh mồ côi.

6. Những lỗi người mới thường mắc

  1. Không ghi comment → bot không nhận diện được lệnh → trùng lặp khi giá quay lại.
  2. Comment không có cấu trúc → khó cắt chuỗi, khó phân biệt Buy/Sell/tầng.
  3. Dùng int cho ticket → tràn số với ticket lớn (nên dùng ulong).
  4. Chỉ dùng bộ nhớ tạm → mất trạng thái khi bot khởi động lại → lệnh mồ côi.
  5. Không lọc đúng magic number → bot “đụng” lệnh của bot khác / lệnh tay.

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

Lệnh mồ côi là gì?

Là lệnh vẫn tồn tại trên sàn nhưng bot không còn quản lý (thường do bot khởi động lại, mất trạng thái). Lệnh này vẫn chịu lời/lỗ theo thị trường nhưng bot không cắt được.

Comment lệnh có giới hạn độ dài không?

Có — comment trên MT5 có độ dài tối đa (thường ~31 ký tự tùy sàn). Vì vậy cần quy ước ngắn gọn nhưng đủ thông tin.

Global variables có mất khi bot tắt không?

Global variables của MQL5 nằm trong terminal MT5 và tồn tại qua các phiên — giúp bot khôi phục trạng thái khi chạy lại. Tuy nhiên nên kết hợp với comment để chắc chắn (vì biến có thể bị xóa khi terminal reset).

Vì sao dùng ulong cho ticket?

Vì ticket do sàn cấp là số rất lớn, không âm — ulong (8 bytes, đến 18 tỷ tỷ) đảm bảo không tràn số.

Học tiếp ở đâu?

Khóa Lập trình MT5 nâng cao Hedging & Tự động hóa tại Hướng Nghiệp Dữ Liệu — từ quản lý lệnh, global state, FSM đến chạy bot thực chiến trên VPS.

8. Kết luận

Quản lý lệnh là nền móng của mọi bot auto trading an toàn. Bằng cách kết hợp global variables (khôi phục trạng thái) và comment chuẩn hóa (nhận diện lệnh trên sàn), bot của bạn sẽ:

  • ✅ Không vào lệnh trùng lặp.
  • ✅ Không tạo lệnh mồ côi.
  • ✅ Không bỏ sót lệnh đang quản lý.
  • ✅ Đủ dữ liệu để thực hiện chiến lược hedging (Buy + Sell cùng cụm) một cách chính xác.

Đồng thời, nắm vững kiểu dữ liệu MQL5 (double, int, ulong) giúp bạn viết mã đúng, tránh lỗi tràn số và lưu trữ chính xác.

Đây chính là bước đầu tiên để bạn đi từ “viết bot chạy được” đến “viết bot vận hành an toàn, 24/7” — mục tiêu cốt lõi của khóa đào tạo tại HNDL.

Đặng Trí Thanh

Đặng Trí Thanh

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