| Bài 3: Toán Học Tính Tầng (s) và Kỹ Thuật Theo Dõi Biên Độ Lưới MinStep/MaxStep

Được viết bởi thanhdt vào ngày 09/06/2026 lúc 13:26 | 35 lượt xem

Toán Học Tính Tầng s và Biên Độ Lưới MinStep/MaxStep trong Nhị Quái V6 Pro

Trong Bài 2, chúng ta đã hiểu được tại sao $P_0$ (Price Origin) là “mỏ neo” bắt buộc phải có trong hệ thống lưới. Tuy nhiên, chỉ biết điểm neo thôi là chưa đủ — bot cần phải biết “Giá hiện tại đang ở tầng thứ mấy của lưới?”“Lưới đã mở rộng tới đâu trong phiên này?”.

Đây chính là nhiệm vụ của hai cơ chế cốt lõi trong bài học hôm nay:
1. Công thức tính tầng $s$ — bộ não định vị giá theo lưới toán học.
2. MinStep / MaxStep — bộ nhớ biên độ lưới giúp bot không bỏ sót và không nhồi trùng lệnh.


🎨 Minh họa trực quan: Không gian Lưới Phân Tầng

Hãy hình dung hệ thống lưới Nhị Quái như một tòa nhà nhiều tầng, trong đó $P_0$ là tầng trệt (Ground Floor = 0):

Tầng +3 │ [Sell gồng lỗ] ← Giá đang ở đây → [Buy đang có lãi]
Tầng +2 │ ............................................
Tầng +1 │ ............................................
────────┼─────────────── P₀ (Tầng 0) ──────────────
Tầng -1 │ ............................................
Tầng -2 │ ............................................
Tầng -3 │ [Buy gồng lỗ] ← Giá ở đây → [Sell đang có lãi]

Ý nghĩa thực chiến: Mỗi lần giá di chuyển qua một Step, bot sẽ kiểm tra xem đây có phải tầng mới chưa từng xuất hiện hay không. Nếu có, bot sẽ kích hoạt lệnh nhồi tiếp theo vào tầng mới đó.


1. Công thức Toán học Xác định Số Tầng ($s$)

Mỗi khi có biến động giá (Tick mới), bot Nhị Quái V6 Pro sẽ liên tục tính toán xem mức giá hiện tại đang nằm ở tầng thứ mấy ($s_{text{current}}$) so với gốc tọa độ $P_0$:

$$s_{text{current}} = text{Round}left(frac{P_{text{current}} – P_0}{text{Step}}right)$$

Trong mã nguồn thực tế Bot_Nhi_Quai_V9.2.1_Pro_23.04_1.mq5, dòng code tương ứng là:

double pr_ref = m_symbol.Bid();
int cur_s = (int)MathRound((pr_ref - p0) / base_step);

Trong đó:
* pr_ref: Giá Bid hiện tại (dùng Bid cho cả hai cụm Buy và Sell khi xác định vị trí tầng).
* p0: Điểm quy chiếu $P_0$ đã nạp từ Global Variables.
* base_step: Tham số InpBuyStep hoặc InpSellStep — khoảng cách bước lưới (tính theo đơn vị giá thực tế, ví dụ: 5.0 USD trên Vàng XAUUSD).
* MathRound(...): Làm tròn về số nguyên gần nhất (khác với hàm Floor làm tròn xuống).

Ý nghĩa các vùng tầng trong thực tế

Vùng tầng Ký hiệu Ý nghĩa với Cụm BUY Ý nghĩa với Cụm SELL
Tầng gốc $s = 0$ Vị trí mồi đầu tiên $S_0$ khi mới khởi động Vị trí mồi đầu tiên $S_0$ khi mới khởi động
Tầng dương $s > 0$ Giá lên — Vùng có lãi Giá lên — Vùng gồng lỗ
Tầng âm $s < 0$ Giá xuống — Vùng gồng lỗ Giá xuống — Vùng có lãi

Tại sao dùng MathRound thay vì MathFloor?

Trong phiên bản đầu của nhiều hệ thống lưới truyền thống, hàm MathFloor được sử dụng, khiến bot có xu hướng nhồi lệnh sớm hơn một chút so với khoảng cách thực tế. Nhị Quái V6 Pro sử dụng MathRound để bot chỉ xác nhận đã chạm tầng mới khi giá đã vượt qua điểm giữa của khoảng cách bước, tránh nhồi lệnh quá non.


2. Kỹ thuật Theo dõi Biên độ Lưới qua MinStep và MaxStep

Việc biết được “tầng hiện tại” là chưa đủ. Bot cần phải ghi nhớ: “Trong toàn bộ chu kỳ này, giá đã từng xuống thấp nhất tới tầng nào và lên cao nhất tới tầng nào?”

Nhị Quái V6 Pro giải quyết vấn đề này bằng hai biến Global Variable lưu trực tiếp xuống ổ cứng:

  • MinStep — Tầng thấp nhất (âm nhiều nhất) mà giá từng chạm tới trong chu kỳ hiện tại.
  • MaxStep — Tầng cao nhất (dương nhiều nhất) mà giá từng chạm tới trong chu kỳ hiện tại.

Cặp biến này giải quyết hai bài toán sống còn:

  1. Chống nhồi lệnh trùng tầng: Bot chỉ được đặt lệnh vào một tầng nếu $s_{text{current}}$ vượt ra ngoài biên độ [MinStep, MaxStep] hiện tại — tức là phải là tầng giá chưa từng được ghi nhận trong chu kỳ này.
  2. Tính toán phục hồi chính xác (Basket TP): Để biết cụm lưới cần giá phục hồi bao nhiêu tầng mới đạt được điểm chốt lời tổng hòa, cần biết chính xác MaxStep (hoặc MinStep) đã kéo dài đến đâu.

3. Phân tích mã nguồn MQL5: Hàm UpdateTraversedRange

Dưới đây là hàm cập nhật MinStep/MaxStep thực tế trong codebase Nhị Quái V6 Pro:

//+------------------------------------------------------------------+
//| Cập nhật biên độ tầng lịch sử cho cụm theo Magic Number          |
//+------------------------------------------------------------------+
void UpdateTraversedRange(int magic, int s)
{
    string prefix = GetGVPrefix(magic);
    string gv_min = prefix + "_MinStep";
    string gv_max = prefix + "_MaxStep";

    // Cập nhật tầng thấp nhất (MinStep)
    if(!GlobalVariableCheck(gv_min) || s < (int)GlobalVariableGet(gv_min)) {
        GlobalVariableSet(gv_min, (double)s);
        PrintFormat("📉 Cụm Magic %d: Cập nhật MinStep mới = %d", magic, s);
    }

    // Cập nhật tầng cao nhất (MaxStep)
    if(!GlobalVariableCheck(gv_max) || s > (int)GlobalVariableGet(gv_max)) {
        GlobalVariableSet(gv_max, (double)s);
        PrintFormat("📈 Cụm Magic %d: Cập nhật MaxStep mới = %d", magic, s);
    }
}

Hàm này được gọi mỗi tick trong ProcessCluster(magic) ngay sau khi tính cur_s, đảm bảo biên độ lưới luôn được cập nhật tức thời.

Tại sao phải dùng Global Variables thay vì biến RAM?

Câu trả lời giống hệt lý do của $P_0$: Crash-Proof. Khi VPS sập hoặc MT5 bị đóng đột ngột, các biến RAM (MinStep, MaxStep dạng int) sẽ bị xóa. Khi khởi động lại, nếu không có GV, bot sẽ coi như biên độ lưới bắt đầu từ 0, dẫn đến nhồi lệnh sai lệch hoàn toàn so với các lệnh đang gồng trên sàn.


4. Cơ chế Dynamic Step: Tự động giãn khoảng cách khi lưới chồng sâu

Một trong những cải tiến quan trọng nhất của Nhị Quái V9.2.1 Pro so với các phiên bản cũ chính là Dynamic Step (Bước lưới Động). Cơ chế này được kích hoạt bởi tham số InpDynamicStep = true:

if(InpDynamicStep) {
    int g_orders = (magic == InpBuyMagic) ? b_total : s_total;

    if(g_orders >= 3 && g_orders < 6)
        step_s *= 2.0;  // Từ lệnh thứ 4: giãn khoảng cách gấp đôi
    else if(g_orders >= 6)
        step_s *= 3.0;  // Từ lệnh thứ 7: giãn khoảng cách gấp ba
}

Tại sao đây là cơ chế phòng thủ quan trọng?

Hãy xem xét kịch bản thực chiến với InpBuyStep = 5 USD trên XAUUSD:

Số lệnh đang giữ Step thực tế áp dụng Khoảng cách lệnh tiếp theo
0-2 lệnh 5.0 USD (bình thường) 5 USD = 50 pips
3-5 lệnh 10.0 USD (x2) 10 USD = 100 pips
≥6 lệnh 15.0 USD (x3) 15 USD = 150 pips

Hiệu quả phòng thủ: Khi lưới đang gồng nhiều lệnh (có nghĩa là giá đang đi ngược xu hướng mạnh), cơ chế Dynamic Step tự động “giãn” khoảng cách để:
1. Giảm tốc độ nhồi lệnh — Không để tài khoản bị rút cạn margin quá nhanh.
2. Tạo vùng đệm giá — Mỗi lệnh tiếp theo cần giá đi xa hơn mới vào, mang lại thêm thời gian cho thị trường có cơ hội hồi phục.
3. Ưu tiên giải phóng lệnh hiện tại — Bot tập trung vào việc chốt lời toàn cụm (Basket TP) hơn là tiếp tục nhồi sâu.


💡 Ví dụ số thực chiến: Theo dõi tầng lưới XAUUSD

Cấu hình: InpBuyStep = 5.0, P0 = 2350.0, InpDynamicStep = true

Giá XAUUSD Tầng $s$ MinStep MaxStep Lệnh đang giữ Step thực tế
2350.00 0 0 0 0 (mồi $S_0$) 5.0
2345.00 -1 -1 0 1 5.0
2340.00 -2 -2 0 2 5.0
2335.00 -3 -3 0 3 10.0 (x2)
2325.00 -5 -5 0 4 10.0 (x2)
2315.00 -7 -7 0 5 10.0 (x2)
2300.00 -10 -10 0 6 15.0 (x3)

Nhận xét: Từ lệnh thứ 4 (3 lệnh đang giữ), bot tự động tăng khoảng cách lên 10 USD. Điều này có nghĩa là thay vì nhồi lệnh thứ 5 chỉ 5 USD sau lệnh thứ 4, bot phải chờ thêm 5 USD nữa — một vùng đệm quan trọng trong điều kiện thị trường đang rơi mạnh.


🎓 Kết luận & Bài học tiếp theo

Hệ thống tính tầng ($s$) kết hợp MinStep/MaxStep và Dynamic Step tạo nên bộ não định vị không gian cho toàn bộ lưới Nhị Quái V6 Pro. Nó đảm bảo rằng:
– Mỗi lệnh được đặt đúng tầng, đúng thời điểm.
– Bot không bao giờ nhồi trùng một tầng đã từng được mở.
– Rủi ro được kiểm soát tuyến tính khi lưới mở rộng sâu.

Trong bài học tiếp theo (Bài 4), chúng ta sẽ khám phá kỹ thuật FSM chống trùng lệnh (Anti-Multiposition) — cơ chế bảo vệ quan trọng khi giá biến động giật cục mạnh trong thời gian ngắn, ngăn bot nhồi nhiều lệnh vào cùng một tầng chỉ vì giá dao động qua lại ranh giới tầng đó.


Cảnh báo rủi ro: Giao dịch CFD và sử dụng bot giao dịch tự động luôn tiềm ẩn rủi ro tài chính cao. Khuyến cáo học viên luôn chạy thử nghiệm trên tài khoản Demo tối thiểu 2-4 tuần trước khi áp dụng trên tài khoản thực tế.


🎓 Học làm chủ thuật toán định lượng và lập trình Bot Auto Trading cùng chuyên gia tại:
👉 Khóa học Lập trình MT5 Nâng cao – Hedging & Tự động hóa
💬 Liên hệ nhận tài liệu và tư vấn 1-1 trực tiếp qua Zalo