Bài viết gần đây
-
Global State & Pandas/NumPy cho Bot Hedging Python
Tháng 7 20, 2026 -
Buổi 18 IB Bot — Lab Pilot 10 Khách Silver 30 Ngày
Tháng 7 20, 2026 -
Buổi 17 IB Bot — Funnel Onboarding Trial → Active
Tháng 7 20, 2026
| Bài 3.2: Thiết kế chiến lược Hedging tự động hóa & Ví dụ Code MQL5
Được viết bởi thanhdt vào ngày 25/04/2026 lúc 23:15 | 89 lượt xem
Để hiện thực hóa chiến lược Hedging, bước đầu tiên là hiểu về cấu trúc logic của một Expert Advisor (EA). Dưới đây là nội dung trọng tâm về thiết kế Hedging và một ví dụ mã nguồn thực tế.
1. Nguyên lý thiết kế Hedging
- Xác định điều kiện kích hoạt: Khi nào hệ thống cần mở vị thế đối ứng? (Dựa trên Drawdown, khoảng cách giá hoặc tín hiệu nến).
- Quản lý khối lượng (Lot sizing): Đảm bảo khối lượng lệnh Hedge đủ để trung hòa rủi ro nhưng không gây áp lực quá lớn lên Margin.
- Logic đóng lệnh (Exit Strategy): Làm sao để thoát cả cụm lệnh Hedge an toàn khi thị trường đảo chiều hoặc đạt mục tiêu lợi nhuận ròng.
2. Ví dụ thực tế: Mã nguồn Simple Hedging EA (MQL5)
Dưới đây là một ví dụ code MQL5 đơn giản mô tả logic hedging tự động: mỗi khi có một lệnh mới, EA sẽ mở thêm một lệnh ngược chiều (Buy/Sell) với cùng khối lượng và symbol.
//+------------------------------------------------------------------+
//| SimpleHedgingEA.mq5 |
//+------------------------------------------------------------------+
#property strict
#include <Trade/Trade.mqh>
input double LotSize = 0.01; // Khối lượng
input int StopLossPoints = 100; // SL theo point
input int TakeProfitPoints = 200; // TP theo point
input int MagicNumber = 12345; // Magic số để phân biệt EA
CTrade trade;
int OnInit() {
Print("Simple Hedging EA started. Magic = ", MagicNumber);
return(INIT_SUCCEEDED);
}
void OnTick() {
string sym = _Symbol;
if(!HasPosition(sym)) return;
int total = PositionsTotal();
bool hasBuy = false, hasSell = false;
double lot = 0.0;
for(int i = 0; i < total; i++) {
if(PositionGetSymbol(i) == sym && PositionGetInteger(POSITION_MAGIC) == MagicNumber) {
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) hasBuy = true;
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) hasSell = true;
lot = PositionGetDouble(POSITION_VOLUME);
}
}
if(hasBuy && hasSell) return;
if(hasBuy && !hasSell) {
trade.SetExpertMagicNumber(MagicNumber);
trade.Sell(lot, sym, 0.0, Bid + StopLossPoints * _Point, Bid - TakeProfitPoints * _Point, "Hedge Sell");
}
if(hasSell && !hasBuy) {
trade.SetExpertMagicNumber(MagicNumber);
trade.Buy(lot, sym, 0.0, Ask - StopLossPoints * _Point, Ask + TakeProfitPoints * _Point, "Hedge Buy");
}
}
bool HasPosition(const string symb) {
for(int i = 0; i < PositionsTotal(); i++)
if(PositionGetSymbol(i) == symb && PositionGetInteger(POSITION_MAGIC) == MagicNumber) return true;
return false;
}
3. Giải thích ngắn gọn
Logic hedging: Mỗi khi EA thấy trên symbol có một lệnh Buy hoặc Sell với MagicNumber của chính nó, nó sẽ ngay lập tức mở lệnh ngược chiều để hedging 1:1.
Cải tiến cần thiết trước khi chạy Live:
- Thêm quản lý rủi ro theo phần trăm vốn (Risk % Account).
- Chỉ hedging tại các vùng giá xác định (Price Action/Indicator) thay vì hedging mọi lúc.
- Hạn chế số lần hedging để tránh tình trạng Grid quá lớn gây áp lực Margin.
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
Thành ĐT
Founder & Chief Technology Officer, HNDLChuyên gia với hơn 10 năm kinh nghiệm trong phát triển hệ thống giao dịch tự động (Trading Bot), Fintech, Mobile App và phân tích dữ liệu tài chính (Quantitative Analysis). Người sáng lập và trực tiếp dẫn dắt các khóa học thực chiến tại Hướng Nghiệp Dữ Liệu.