Danh mục: Tin tức
Bài viết gần đây
| 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 | 11 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.