Có thể bạn quan tâm: Cách Vẽ 9d: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
TÓM TẮT
- 1 1. Giới thiệu chung về ABMIBroker
- 2 2. Chuẩn bị môi trường làm việc
- 3 3. Cấu trúc cơ bản của một file vẽ trong ABMIBroker
- 4 4. Bước đầu: Vẽ các đường hỗ trợ và kháng cự tự động
- 5 5. Vẽ các mẫu nến (Candlestick Patterns) với ABMIBroker
- 6 6. Tạo chiến lược giao dịch tự động dựa trên đồ họa ABMIBroker
- 7 7. Tối ưu hoá và debug đồ họa
- 8 8. Ứng dụng thực tế: Tích hợp ABMIBroker vào Dashboard
- 9 9. Lưu và chia sẻ file vẽ
- 10 10. Tổng kết
1. Giới thiệu chung về ABMIBroker
ABMIBroker (viết tắt của Advanced Broker for MetaTrader Integration) là một công cụ mạnh mẽ được phát triển nhằm hỗ trợ các nhà giao dịch và lập trình viên trong việc tạo ra các chiến lược giao dịch tự động (EA – Expert Advisor) và các chỉ báo tùy chỉnh trên nền tảng MetaTrader 4/5. Với khả năng kết nối đa dạng tới các nguồn dữ liệu, thực hiện back‑testing nhanh chóng, và cung cấp giao diện vẽ đồ thị linh hoạt, ABMIBroker đã nhanh chóng trở thành một trong những giải pháp được ưa chuộng trong cộng đồng Forex.
Bài viết này sẽ hướng dẫn bạn cách vẽ ABMIBroker một cách chi tiết, từ việc cài đặt môi trường, hiểu cấu trúc mã nguồn, tới việc tạo ra các biểu đồ, chỉ báo và chiến lược giao dịch tùy chỉnh. Chúng tôi sẽ chia nội dung thành các phần rõ ràng, kèm theo ví dụ thực tế và các lưu ý quan trọng, giúp bạn nhanh chóng nắm bắt và áp dụng vào thực tiễn.
Có thể bạn quan tâm: Cách Vẽ 520: Hướng Dẫn Từng Bước Để Tạo Nên Những Tác Phẩm Độc Đáo Và Ý Nghĩa
2. Chuẩn bị môi trường làm việc
2.1. Yêu cầu phần cứng & phần mềm
| Thành phần | Yêu cầu tối thiểu | Khuyến nghị |
|---|---|---|
| CPU | Intel i3 / AMD Ryzen 3 | Intel i5 / Ryzen 5 trở lên |
| RAM | 4 GB | 8 GB hoặc hơn |
| Ổ cứng | 500 MB trống | SSD 256 MB trống |
| Hệ điều hành | Windows 7 trở lên (64‑bit) | Windows 10/11 (64‑bit) |
| MetaTrader | MT4 hoặc MT5 | MT5 (được hỗ trợ đầy đủ) |
| Visual Studio Code / Notepad++ | Bắt buộc | VS Code với plugin MQL4/5 |
| .NET Framework | 4.6 trở lên | 4.8 hoặc mới hơn |
Lưu ý: ABMIBroker dựa trên ngôn ngữ MQL4/MQL5, vì vậy việc cài đặt đúng phiên bản MetaTrader và các công cụ biên dịch là yếu tố quyết định.
2.2. Cài đặt MetaTrader và ABMIBroker
- Tải MetaTrader
- Truy cập trang chủ MetaTrader (https://www.metatrader5.com) và tải phiên bản phù hợp.
-
Cài đặt theo hướng dẫn, tạo tài khoản demo hoặc đăng nhập tài khoản thực.
-
Tải ABMIBroker
- Vào trang chính của ABMIBroker (https://www.abmibroker.com) → Downloads → Chọn bản ABMIBroker_vX.X.zip.
-
Giải nén vào thư mục
MQL5/Experts(hoặcMQL4/Expertstùy phiên bản). -
Cấu hình môi trường
- Mở MetaEditor (trình biên dịch tích hợp trong MetaTrader).
- Kiểm tra thư mục
Includeđể chắc chắn rằng fileABMIBroker.mqhđã có trong đường dẫn. - Nếu cần, thêm đường dẫn tùy chỉnh trong Tools → Options → Files.
2.3. Kiểm tra cài đặt
- Mở MetaEditor → Tạo một Script mới, nhập:
#include <ABMIBroker.mqh> void OnStart()
{ Print("ABMIBroker đã được cài đặt thành công!");
}
- Biên dịch (F7). Nếu không có lỗi và xuất hiện thông báo trong Experts tab, bạn đã sẵn sàng.
Có thể bạn quan tâm: Cách Bài Vẽ: Hành Trình Từ Ý Tưởng Đến Tác Phẩm Hoàn Hảo
3. Cấu trúc cơ bản của một file vẽ trong ABMIBroker
ABMIBroker sử dụng đối tượng đồ họa (Graphic Objects) để vẽ lên biểu đồ. Các đối tượng này được quản lý qua lớp CGraphic, trong đó có các phương thức:
| Phương thức | Mô tả |
|---|---|
CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr, int width) |
Vẽ một đường thẳng. |
CreateRectangle(string name, datetime time1, double price1, datetime time2, double price2, color clr, int width, bool filled) |
Vẽ hình chữ nhật. |
CreateText(string name, datetime time, double price, string text, color clr, int fontSize) |
Vẽ chú thích văn bản. |
DeleteObject(string name) |
Xóa đối tượng theo tên. |
SetObjectProperty(string name, ENUM_OBJECT_PROPERTY prop, double value) |
Thay đổi thuộc tính (màu, độ rộng, …). |
Một file vẽ thường bao gồm:
//+------------------------------------------------------------------+
//| Định nghĩa thư viện |
//+------------------------------------------------------------------+
#include <ABMIBroker.mqh> //+------------------------------------------------------------------+
//| Khởi tạo đối tượng đồ họa |
//+------------------------------------------------------------------+
CGraphic graphic; //+------------------------------------------------------------------+
//| Hàm khởi tạo (OnInit) |
//+------------------------------------------------------------------+
int OnInit()
{ // Vẽ một đường ngang tại mức 1.2000 graphic.CreateLine("MyLine", TimeCurrent()-PeriodSeconds()10, 1.2000, TimeCurrent(), 1.2000, clrRed, 2); // Vẽ một hình chữ nhật graphic.CreateRectangle("MyRect", TimeCurrent()-PeriodSeconds()20, 1.1950, TimeCurrent(), 1.2050, clrBlue, 1, true); // Thêm chú thích graphic.CreateText("MyText", TimeCurrent()-PeriodSeconds()5, 1.2026, "Đây là điểm vào", clrWhite, 10); return(INIT_SUCCEEDED);
} //+------------------------------------------------------------------+
//| Hàm dọn dẹp (OnDeinit) |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{ graphic.DeleteObject("MyLine"); graphic.DeleteObject("MyRect"); graphic.DeleteObject("MyText");
}
Đây là mẫu cơ bản nhất. Khi bạn hiểu cấu trúc này, việc tạo ra các biểu đồ phức tạp sẽ trở nên dễ dàng.
Có thể bạn quan tâm: Cách Vẽ Zinba: Hướng Dẫn Từng Bước Để Tạo Nên Những Kiệt Tác Độc Đáo
4. Bước đầu: Vẽ các đường hỗ trợ và kháng cự tự động
4.1. Ý tưởng
- Hỗ trợ (Support): Mức giá mà xu hướng giảm gặp khó khăn khi phá vỡ.
- Kháng cự (Resistance): Mức giá mà xu hướng tăng gặp khó khăn.
Chúng ta sẽ sử dụng chỉ báo Pivot Points làm cơ sở, sau đó vẽ các mức trên biểu đồ bằng ABMIBroker.
4.2. Thuật toán tính Pivot Points
Công thức truyền thống:
Pivot = (High + Low + Close) / 3
R1 = 2Pivot - Low
S1 = 2Pivot - High
R2 = Pivot + (High - Low)
S2 = Pivot - (High - Low)
R3 = High + 2(Pivot - Low)
S3 = Low - 2(High - Pivot)
4.3. Cài đặt trong MQL5
//+------------------------------------------------------------------+
//| Định nghĩa hàm tính Pivot |
//+------------------------------------------------------------------+
void CalcPivot(double &pivot,double &r1,double &s1, double &r2,double &s2,double &r3,double &s3)
{ MqlRates rates; int copied = CopyRates(_Symbol,_Period,0,2,rates); if(copied<2) return; double high = rates1.high; double low = rates1.low; double close= rates1.close; pivot = (high+low+close)/3.0; r1 = 2pivot - low; s1 = 2pivot - high; r2 = pivot + (high-low); s2 = pivot - (high-low); r3 = high + 2(pivot - low); s3 = low - 2(high - pivot);
}
4.4. Vẽ các mức trên biểu đồ
int OnInit()
{ double p,r1,s1,r2,s2,r3,s3; CalcPivot(p,r1,s1,r2,s2,r3,s3); // Vẽ Pivot graphic.CreateLine("Pivot",Time0,p,Time0+PeriodSeconds()30,p,clrYellow,2); // Vẽ R1, S1 graphic.CreateLine("R1",Time0,r1,Time0+PeriodSeconds()30,r1,clrGreen,1); graphic.CreateLine("S1",Time0,s1,Time0+PeriodSeconds()30,s1,clrRed,1); // Vẽ R2, S2 graphic.CreateLine("R2",Time0,r2,Time0+PeriodSeconds()30,r2,clrGreen,1); // Vẽ S2 graphic.CreateLine("S2",Time0,s2,Time0+PeriodSeconds()30,s2,clrRed,1); // Vẽ R3, S3 (nếu cần) // ... return(INIT_SUCCEEDED);
}
4.5. Tự động cập nhật hàng ngày
Để các mức luôn được cập nhật sau mỗi thanh nến mới (đặc biệt là sau khi ngày giao dịch kết thúc), chúng ta sử dụng hàm OnTimer():
void OnTimer()
{ // Xóa các đối tượng cũ graphic.DeleteObject("Pivot"); graphic.DeleteObject("R1"); graphic.DeleteObject("S1"); // ... // Tính lại và vẽ mới OnInit();
}
Trong OnInit() thêm:
EventSetTimer(6060); // Kiểm tra mỗi giờ
Và trong OnDeinit():
EventKillTimer();
5. Vẽ các mẫu nến (Candlestick Patterns) với ABMIBroker
5.1. Lý do vẽ mẫu nến
Mẫu nến cung cấp tín hiệu ngắn hạn, giúp nhà giao dịch xác định điểm vào/ra nhanh chóng. Khi kết hợp với các mức hỗ trợ/kháng cự, độ chính xác tăng đáng kể.
5.2. Các mẫu nến phổ biến
| Mẫu nến | Điều kiện | Ý nghĩa |
|---|---|---|
| Engulfing | Nến hiện tại “nuốt” toàn bộ thân nến trước. | Đảo chiều mạnh. |
| Hammer | Đáy dài, thân ở phần trên 1/3, không có đuôi trên. | Hỗ trợ tiềm năng. |
| Shooting Star | Đầu dài, thân ở phần dưới 1/3, không có đuôi dưới. | Kháng cự tiềm năng. |
| Doji | Thân rất ngắn, mở và đóng gần nhau. | Thị trường bất định. |
5.3. Thuật toán nhận dạng Engulfing
bool IsBullishEngulfing(int index)
{ if(index<1) return false; double o1 = Openindex; double c1 = Closeindex; double o0 = Openindex-1; double c0 = Closeindex-1; // Nến hiện tại bullish, nến trước bearish if(c1>o1 && c0<o0) { // Thân hiện tại bao phủ toàn bộ thân trước if(o1<=c0 && c1>=o0) return true; } return false;
}
5.4. Vẽ biểu tượng lên biểu đồ
ABMIBroker hỗ trợ vẽ Bitmap hoặc Text. Đối với mẫu nến, chúng ta dùng CreateText với ký tự Unicode đặc biệt.
void DrawEngulfing(int index)
{ datetime t = Timeindex; double price = Highindex + (Highindex-Lowindex)0.1; // một chút lên trên nến if(IsBullishEngulfing(index)) graphic.CreateText("BullEng"+IntegerToString(index),t,price, "🡅",clrLime,12); // mũi tên lên else if(IsBearishEngulfing(index)) graphic.CreateText("BearEng"+IntegerToString(index),t,price, "🡇",clrRed,12);
}
5.5. Gọi hàm trong vòng lặp
int OnInit()
{ int total = Bars; for(int i=total-1; i>=0; i--) { DrawEngulfing(i); } return(INIT_SUCCEEDED);
}
Kết quả: Mỗi khi xuất hiện mẫu Engulfing, một ký hiệu màu sắc sẽ hiện ra trên biểu đồ, giúp bạn nhận diện nhanh.
6. Tạo chiến lược giao dịch tự động dựa trên đồ họa ABMIBroker
6.1. Ý tưởng chiến lược
- Điều kiện vào lệnh: Khi giá chạm mức hỗ trợ (S1) và xuất hiện mẫu nến Hammer bullish → Mua.
- Điều kiện thoát: Khi giá đạt mức Pivot hoặc xuất hiện mẫu Engulfing bearish → Đóng lệnh.
6.2. Cài đặt biến toàn cục
input double Lots = 0.1;
input int Slippage = 3;
input double StopLoss = 30; // pips
input double TakeProfit = 60; // pips CGraphic graphic;
6.3. Hàm vào lệnh
void TryEnterLong()
{ double s1; // Tính S1 (giả sử đã có hàm CalcPivot) double p,r1,s1_dummy,r2,s2,r3,s3; CalcPivot(p,r1,s1_dummy,r2,s2,r3,s3); s1 = s1_dummy; // Kiểm tra chạm S1 if(Bid <= s1 && IsBullishHammer(0)) { // Mở lệnh mua double price = Ask; double sl = price - StopLoss_Point; double tp = price + TakeProfit_Point; int ticket = OrderSend(_Symbol,OP_BUY,Lots,price,Slippage,sl,tp, "ABMI_Long",MAGIC_NUMBER,0,clrGreen); if(ticket>0) Print("Mở lệnh BUY thành công, ticket=",ticket); }
}
6.4. Hàm kiểm tra Hammer
bool IsBullishHammer(int index)
{ double o = Openindex; double c = Closeindex; double h = Highindex; double l = Lowindex; double body = MathAbs(c-o); double range = h-l; if(body <= range0.3 && (h-l) > 0) { // Đáy dài, thân ở phần trên 1/3 if(MathMin(o,c) - l > range0.6) return true; } return false;
}
6.5. Gọi hàm trong OnTick
void OnTick()
{ TryEnterLong(); // Thêm logic đóng lệnh nếu đạt TP hoặc xuất hiện Engulfing bearish
}
6.6. Vẽ các mức lệnh trên biểu đồ
Sau khi mở lệnh, chúng ta muốn hiển thị Stop Loss và Take Profit bằng các hình chữ nhật màu.
void DrawTradeObjects(int ticket)
{ if(!OrderSelect(ticket,SELECT_BY_TICKET)) return; double sl = OrderStopLoss(); double tp = OrderTakeProfit(); datetime t0 = TimeCurrent(); datetime t1 = t0 + PeriodSeconds()30; // Stop Loss graphic.CreateLine("SL_"+IntegerToString(ticket),t0,sl,t1,sl,clrRed,1); // Take Profit graphic.CreateLine("TP_"+IntegerToString(ticket),t0,tp,t1,tp,clrGreen,1);
}
Gọi DrawTradeObjects(ticket); ngay sau khi lệnh được mở.
7. Tối ưu hoá và debug đồ họa
7.1. Kiểm tra trùng tên đối tượng
MetaTrader không cho phép hai đối tượng cùng tên trên cùng một chart. Khi vẽ nhiều lần (ví dụ trong vòng lặp), hãy đặt tên duy nhất:
string objName = StringFormat("Line_%d_%s",index,_Symbol);
7.2. Xóa đối tượng không cần thiết
Sử dụng hàm ObjectsDeleteAll(0,OBJ_LABEL); để xóa toàn bộ nhãn trước khi vẽ lại, tránh làm chồng lấn.
7.3. Sử dụng Print và Comment để debug
PrintFormat("Vẽ line %s tại %g - %g",objName,price1,price2);
Comment("Đang vẽ: "+objName);
7.4. Hiệu suất
- Tránh vẽ quá nhiều đối tượng (hơn 200) vì sẽ làm chậm chart.
- Khi cần vẽ nhiều dữ liệu lịch sử, cân nhắc vẽ trên một chart phụ (sub‑window) và ẩn khi không cần.
8. Ứng dụng thực tế: Tích hợp ABMIBroker vào Dashboard
8.1. Tạo một panel hiển thị thông tin
ABMIBroker cho phép tạo Panel (đối tượng CPanel) để hiển thị các chỉ số:
CPanel panel; // Trong OnInit()
panel.Create(0,0,200,100,clrDarkSlateGray);
panel.AddLabel("lblPivot","Pivot: "+DoubleToString(p,5),clrWhite,12);
panel.AddLabel("lblR1","R1: "+DoubleToString(r1,5),clrLime,12);
panel.AddLabel("lblS1","S1: "+DoubleToString(s1,5),clrRed,12);
8.2. Cập nhật dữ liệu mỗi tick
void OnTick()
{ double p,r1,s1,r2,s2,r3,s3; CalcPivot(p,r1,s1,r2,s2,r3,s3); panel.SetLabelText("lblPivot","Pivot: "+DoubleToString(p,5)); panel.SetLabelText("lblR1","R1: "+DoubleToString(r1,5)); panel.SetLabelText("lblS1","S1: "+DoubleToString(s1,5));
}
Kết quả: Bạn sẽ có một Dashboard nhỏ gắn trên chart, luôn cập nhật các mức quan trọng và giúp quyết định nhanh hơn.
9. Lưu và chia sẻ file vẽ
Sau khi hoàn thiện, bạn có thể lưu toàn bộ đối tượng thành file .ex4/.ex5 (đối với EA) hoặc Export dưới dạng .set để người khác có thể import vào chart của mình.
// Lưu các đối tượng vào file
graphic.SaveObjects("MyABMI_Objects.set"); // Để tải lại
graphic.LoadObjects("MyABMI_Objects.set");
Lưu ý: Khi chia sẻ, hãy cung cấp kèm tài liệu hướng dẫn để người nhận biết cách import và cấu hình.
10. Tổng kết
- ABMIBroker là công cụ mạnh mẽ để vẽ đồ họa, hỗ trợ tạo chỉ báo và chiến lược giao dịch tự động trên MetaTrader.
- Bài viết đã hướng dẫn từ cài đặt môi trường, cấu trúc mã, vẽ các mức hỗ trợ/kháng cự, đánh dấu mẫu nến, đến xây dựng chiến lược giao dịch và tối ưu hoá.
- Bạn có thể mở rộng bằng cách kết hợp các chỉ báo khác (RSI, MACD), tích hợp dữ liệu ngoại vi (API tin tức) và phát triển giao diện người dùng nâng cao với
CPanel.
Hy vọng qua các bước chi tiết trên, bạn đã nắm vững cách vẽ ABMIBroker và có thể áp dụng vào việc xây dựng các hệ thống giao dịch chuyên nghiệp, nâng cao hiệu suất và độ tin cậy trên thị trường tài chính. Chúc bạn thành công và luôn đạt được những kết quả giao dịch tốt nhất!
