2026 Pricing .EX4 recovery from $29 and .EX5 from $49, saving up to 80% vs. hiring a freelance developer
Inspect file & view packages

5 Dấu Hiệu Trong Mã Máy Cho Thấy Một EA / Indicator Đang Gian Lận — Tự Kiểm Tra Trước Khi Xuống Tiền

Đường cong Backtest đẹp không chứng minh được gì. Bài viết tổng hợp 5 "dấu vân tay" mà kỹ sư MQL Restore gặp lặp đi lặp lại khi dịch ngược các file .ex4/.ex5 lừa đảo: rẽ nhánh MQL_TESTER, bảng ngày hardcode, đọc nến tương lai, hệ số nhồi Lot và lệnh không StopLoss — kèm code mẫu để bạn biết chính xác cần tìm gì.

On this page
  1. Key takeaways
  2. Example code
  3. Detailed analysis
  4. Vì sao không thể tin vào ảnh Backtest?
  5. 1. Rẽ nhánh theo môi trường chạy
  6. 2. Bảng ngày hardcode trong phân đoạn .data
  7. 3. Indicator đọc nến tương lai (Repaint)
  8. 4. Hệ số nhồi Lot
  9. 5. Lệnh không có StopLoss
  10. Bạn nên làm gì trước khi mua?

Key takeaways

  1. Rẽ nhánh theo môi trường. EA gọi MQLInfoInteger(MQL_TESTER) hoặc IsTesting() rồi quyết định vào lệnh khác nhau giữa Backtest và Live.
  2. Bảng ngày hardcode. Phân đoạn .data chứa hàng chục mốc datetime trùng các phiên NFP, CPI, FOMC để né lệnh thua trong quá khứ.
  3. Indicator đọc nến tương lai. Vòng lặp OnCalculate truy cập close[i-1], low[i-2] (TimeSeries) rồi ghi đè Buffer ở các nến đã đóng.
  4. Hệ số nhồi Lot. Một hằng số 1.3–2.0 nhân dồn vào khối lượng sau mỗi lệnh âm là Martingale, dù trang bán hàng ghi "không gồng lỗ".
  5. Lệnh mở với SL = 0. Trường sl của MqlTradeRequest hoặc tham số stoploss của OrderSend luôn bằng 0, rủi ro thực tế không có trần.

Example code

Mẫu tổng hợp — các đoạn code này xuất hiện trong phần lớn file gian lận chúng tôi từng dịch ngược:

Illustrative example · MQL5 / MQL4
// (1) Rẽ nhánh Backtest / Live — dấu hiệu nghiêm trọng nhất
if(MQLInfoInteger(MQL_TESTER) && IsBlockedDay(TimeCurrent()))
   return;                                    // chỉ né lệnh khi đang Backtest

// (3) Indicator Repaint — đọc nến "tương lai" theo chỉ số TimeSeries
for(int i = limit; i >= 2; i--) {
   if(low[i] < low[i - 1] && low[i] < low[i - 2])   // i-1, i-2 là nến SAU nến i
      ArrowBuffer[i] = low[i];                        // mũi tên chỉ hiện khi đáy đã xác nhận
}

// (4) + (5) Martingale không StopLoss
double lot = InitialLot * MathPow(LotMultiplier, CountLosingOrders()); // 1.65^n
request.sl = 0.0;                             // không có cắt lỗ trên máy chủ

Detailed analysis

Vì sao không thể tin vào ảnh Backtest?

Strategy Tester của MetaTrader chạy đúng những gì có trong file. Dữ liệu lịch sử thì tác giả đã biết trước, nên họ hoàn toàn có thể viết code để "né" mọi cú sập trong quá khứ. Ảnh chụp đường cong vốn chỉ chứng minh tác giả biết chọn khung thời gian đẹp, không chứng minh thuật toán.

Cách duy nhất để biết chắc là nhìn vào bên trong file .ex4 / .ex5.

1. Rẽ nhánh theo môi trường chạy

Một EA trung thực không cần biết nó đang chạy Backtest hay Live. Khi thấy MQLInfoInteger(MQL_TESTER), MQL_OPTIMIZATION hoặc IsTesting() (MQL4) nằm trong hàm quyết định vào lệnh — không phải phần vẽ giao diện hay ghi log — gần như chắc chắn hành vi trong Backtest khác với tài khoản thật.

2. Bảng ngày hardcode trong phân đoạn .data

Dữ liệu tĩnh của file chứa các hằng số datetime nằm liền nhau. Nếu đối chiếu thấy chúng trùng các phiên NFP, CPI, FOMC hoặc những ngày Vàng biến động mạnh, đó là danh sách "ngày được nghỉ" để đường cong Backtest không có vết lõm nào.

3. Indicator đọc nến tương lai (Repaint)

  • Với mảng TimeSeries, chỉ số i - 1 là nến mới hơn nến i. Chỉ báo dùng close[i - 1] để quyết định vẽ mũi tên tại nến i là đang nhìn trộm tương lai.
  • Dấu hiệu đi kèm: code ghi EMPTY_VALUE đè lên Buffer của những nến đã đóng — tức là xóa các mũi tên đã báo sai.
  • Chỉ báo chuẩn chỉ đọc dữ liệu từ nến đã đóng và không bao giờ sửa giá trị Buffer cũ.

4. Hệ số nhồi Lot

Tìm phép nhân khối lượng với một hằng số trong khoảng 1.3–2.0 gắn với số lệnh đang âm. Đó là Martingale, bất kể trang bán hàng gọi là "Smart Recovery" hay "AI Position Sizing". Với hệ số 1.65, lệnh nhồi thứ 10 có khối lượng gấp khoảng 150 lần lệnh đầu tiên.

5. Lệnh không có StopLoss

Kiểm tra mọi điểm gọi OrderSend (MQL4) hoặc nơi điền MqlTradeRequest (MQL5). Nếu trường sl luôn bằng 0 và không có cơ chế đóng lệnh theo Equity, rủi ro của tài khoản là không giới hạn.

Một dấu hiệu đơn lẻ chưa đủ để kết luận: có EA kiểm tra MQL_TESTER chỉ để tắt phần vẽ đồ họa cho Backtest chạy nhanh hơn. Điều cần xác định là nhánh đó có ảnh hưởng tới quyết định vào lệnh hay không.

Bạn nên làm gì trước khi mua?

  1. Yêu cầu người bán cung cấp bản Demo và chạy Forward Test trên tài khoản Demo ít nhất 4–6 tuần.
  2. So sánh Backtest ở chế độ Every tick based on real ticks với Open prices only — chênh lệch lớn cho thấy logic phụ thuộc vào biến động trong nến.
  3. Gửi file .ex4 / .ex5 cho MQL Restore để kiểm tra 5 dấu hiệu trên trực tiếp trong mã máy trước khi nạp tiền thật.

Topics: Reverse Engineering , Backtest Fraud , Repaint & Lookahead , Martingale & Grid