Chốt lời một phần + trailing stop: điểm dễ lỗi
Mục lục (5)
- Kết luận: thứ dễ hỏng là "việc truyền trạng thái", không phải logic
- Vì sao kết hợp lại dễ hỏng
- Không thể dựa vào "trí nhớ" của EA để biết khối lượng còn lại
- Lot phải "làm tròn xuống", không phải làm tròn thường
- Chỉ ghi SL ở một nơi duy nhất
- Danh sách kiểm tra khi triển khai và xác nhận
- Giới hạn và lưu ý
- Tóm tắt
Mục lục
- Kết luận: thứ dễ hỏng là "việc truyền trạng thái", không phải logic
- Vì sao kết hợp lại dễ hỏng
- Không thể dựa vào "trí nhớ" của EA để biết khối lượng còn lại
- Lot phải "làm tròn xuống", không phải làm tròn thường
- Chỉ ghi SL ở một nơi duy nhất
- Danh sách kiểm tra khi triển khai và xác nhận
- Giới hạn và lưu ý
- Tóm tắt
Kết luận: thứ dễ hỏng là "việc truyền trạng thái", không phải logic
Chốt lời một phần và trailing stop, nếu dùng riêng lẻ thì đều không phải xử lý khó. Lỗi chỉ xuất hiện khi áp cả hai lên cùng một vị thế. Theo kinh nghiệm phát triển của chúng tôi, vấn đề gần như tập trung vào 3 chỗ sau:
- Quản lý khối lượng còn lại: EA không "nhớ" được mình đã chốt một phần hay chưa
- Bước lot: khối lượng đóng không khớp lot tối thiểu hoặc bước lot của broker
- Thứ tự đặt lại SL: chốt một phần, dời SL về điểm hòa vốn và trailing ghi đè lên nhau
Cả ba đều khó lộ ra khi backtest, và thường chỉ bị phát hiện khi chạy thực tế.
So sánh nhà môi giới khuyên dùng →
🎁 Tải EA miễn phí📧 Khóa học email miễn phí (8 email) + gói 13 chỉ báo MT5 dành riêng cho người đăng ký
* Quyền riêng tư được bảo vệ nghiêm ngặt. Bạn có thể hủy đăng ký bất cứ lúc nào.
Vì sao kết hợp lại dễ hỏng
Không thể dựa vào "trí nhớ" của EA để biết khối lượng còn lại
Trên MT5, khi chốt một phần thì ticket của vị thế không đổi, chỉ có POSITION_VOLUME giảm đi. Nếu chỉ dùng một biến bool để lưu trạng thái "đã chốt một phần", giá trị này sẽ mất khi EA khởi động lại, VPS kết nối lại hoặc đổi khung thời gian. Ở tick đầu tiên sau đó, EA lại chốt một nửa vị thế còn lại thêm lần nữa — đây là sự cố điển hình.
Cách chúng tôi xử lý là dùng HistorySelectByPosition() để lần theo lịch sử khớp lệnh của vị thế đó, rồi so sánh khối lượng mở ban đầu với khối lượng còn lại để xác định đang ở giai đoạn chốt nào. Cờ lưu trong bộ nhớ chỉ đóng vai trò hỗ trợ.
Lot phải "làm tròn xuống", không phải làm tròn thường
Chia đôi 0.03 lot được 0.015. Với tài khoản có bước lot 0.01, nếu làm tròn thông thường sẽ đóng 0.02 lot, tức là bán ra nhiều hơn dự kiến. Khối lượng đóng cần được làm tròn xuống theo SYMBOL_VOLUME_STEP, đồng thời phải kiểm tra khối lượng còn lại sau khi đóng có lớn hơn hoặc bằng SYMBOL_VOLUME_MIN hay không. Vị thế 0.01 lot vốn không thể chia nhỏ, nên nếu không quy định rõ trong thiết kế là "không chốt một phần" hay "đóng toàn bộ", EA sẽ liên tục trả về lỗi.
Chỉ ghi SL ở một nơi duy nhất
PositionModify() là hàm chỉ định SL và TP cùng lúc. Nếu xử lý trailing truyền giá trị 0 cho TP thì TP sẽ biến mất. Ngoài ra, nếu bước dời SL về điểm hòa vốn sau khi chốt một phần và bước kéo SL của trailing chạy riêng rẽ trong cùng một tick, bên ghi sau sẽ thắng. Kết quả là SL đã được nâng lên điểm hòa vốn có thể bị hạ xuống lại.
Thứ tự mà chúng tôi áp dụng như sau:
- Gửi lệnh chốt một phần → chọn lại vị thế và kiểm tra khối lượng còn lại
- Tính cả hai ứng viên: SL hòa vốn và SL trailing
- Chỉ dời theo hướng "có lợi hơn SL hiện tại" (lệnh mua thì lấy giá cao hơn, lệnh bán thì lấy giá thấp hơn)
- Kiểm tra stop level và freeze level, rồi truyền lại giá trị TP hiện tại và chỉ sửa lệnh đúng 1 lần
Danh sách kiểm tra khi triển khai và xác nhận
| Hạng mục cần kiểm tra | Triệu chứng khi hỏng | Cách kiểm tra |
|---|---|---|
| Giai đoạn chốt một phần có được xác định từ lịch sử khớp lệnh không | Chốt một phần hai lần sau khi khởi động lại | Gắn lại EA khi đang chạy và theo dõi thay đổi khối lượng còn lại |
| Khối lượng đóng có được làm tròn xuống theo bước lot không | Đóng nhiều hơn dự kiến hoặc phát sinh lỗi | Mở lệnh với lot tối thiểu rồi xem log |
| Đã quy định cách xử lý khi chia nhỏ ở lot tối thiểu chưa | Lệnh đóng thất bại ở mỗi tick | Thử với 0.01 lot |
| SL có bị lùi về hướng bất lợi không | Bị đóng lỗ sau khi đã đặt SL hòa vốn | Theo dõi diễn biến SL theo thời gian trong log |
| Việc sửa SL có làm mất TP không | Chốt lời không hoạt động | Xem ô TP của vị thế sau khi sửa |
| Khi chốt một phần thất bại, SL có được giữ nguyên không | Khối lượng còn lại và SL lệch giả định | Đặt lệnh ngay trước lúc thị trường đóng cửa để cố tình gây lỗi |
| Có đang chạy trên tài khoản netting không | Bị gộp với vị thế của EA khác | Kiểm tra loại tài khoản |
Ở góc độ người dùng, cách kiểm tra nhanh nhất là chạy bằng lot tối thiểu trên tài khoản demo và xem hành vi có thay đổi hay không khi gắn lại EA giữa chừng. Các thiết lập cơ bản được tổng hợp trong Hướng dẫn cài đặt EA.
Giới hạn và lưu ý
Strategy Tester khớp lệnh tức thời và gần như không bao giờ xảy ra tình huống chỉ một phần của lệnh được khớp. Vì vậy, các lỗi liên quan đến chốt lời một phần hầu như không hiện ra trong số liệu backtest. Thành thật mà nói, sự khác biệt về phương thức khớp lệnh (filling mode) trên tài khoản thực và hành vi khi requote chỉ có thể kiểm chứng riêng với từng broker.
Thêm chốt lời một phần cũng không đồng nghĩa với hiệu suất tốt hơn. Với các EA theo xu hướng có tỷ lệ thắng thấp và dựa vào một số ít khoản lãi lớn để nâng đỡ toàn bộ kết quả (ví dụ DONCHIAN ENGINE có tỷ lệ thắng 34.5% trong backtest), việc giảm khối lượng đúng lúc lợi nhuận đang kéo dài có thể làm kỳ vọng giảm xuống. Biên độ dao động lãi lỗ sẽ nhỏ lại, nhưng đổi lại mất đi điều gì thì phải kiểm chứng riêng cho từng EA. Chúng tôi cũng chưa kiểm tra được hết mọi tổ hợp.
Khi tự bổ sung chốt lời một phần vào một chiến lược như DONCHIAN ENGINE, hãy lưu ý rằng kết quả kiểm chứng ban đầu sẽ không còn áp dụng nguyên vẹn nữa.
Tóm tắt
- Khi kết hợp chốt lời một phần và trailing, thứ dễ hỏng là "việc truyền trạng thái" chứ không phải logic
- Giai đoạn chốt một phần nên được xác định từ lịch sử khớp lệnh và khối lượng còn lại, không dựa vào cờ trong bộ nhớ
- Làm tròn lot xuống theo bước lot và kiểm tra khối lượng còn lại không thấp hơn lot tối thiểu
- Gom việc sửa SL về một chỗ, chỉ dời theo hướng có lợi và không làm mất TP
- Backtest khó phát hiện lỗi, nên hãy thử gắn lại EA trên tài khoản demo
- Chốt lời một phần làm biên độ lãi lỗ nhỏ lại, nhưng cũng có thể làm giảm kỳ vọng
Những lưu ý khác khi triển khai được tổng hợp tại Kiến thức EA và MT5.
Liên quan
2026-10-29
OnTick và OnTimer trong MQL5: cách dùng khi thiết kế EA
2026-11-07
Stop Level và Freeze Level: vì sao không đặt được SL
2026-11-01
Vì sao EA chỉ xét nến đã đóng thì không repaint
2026-10-21
Monte Carlo đo biên độ may rủi của drawdown
📧 Khóa học email miễn phí (8 email) + gói 13 chỉ báo MT5 dành riêng cho người đăng ký
* Quyền riêng tư được bảo vệ nghiêm ngặt. Bạn có thể hủy đăng ký bất cứ lúc nào.
Bạn có câu hỏi về EA hay Forex?
Bạn có thể đăng câu hỏi trên diễn đàn giao dịch Nattzy (đăng ký miễn phí). Không nhất thiết liên quan đến bài viết này — cài đặt EA, chọn sàn môi giới, v.v. đều được.
Hỏi trên Nattzy ↗