TÓM TẮ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.

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

  1. Tải MetaTrader
  2. Truy cập trang chủ MetaTrader (https://www.metatrader5.com) và tải phiên bản phù hợp.
  3. 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.

  4. Tải ABMIBroker

  5. Vào trang chính của ABMIBroker (https://www.abmibroker.com) → Downloads → Chọn bản ABMIBroker_vX.X.zip.
  6. Giải nén vào thư mục MQL5/Experts (hoặc MQL4/Experts tùy phiên bản).

  7. Cấu hình môi trường

  8. Mở MetaEditor (trình biên dịch tích hợp trong MetaTrader).
  9. Kiểm tra thư mục Include để chắc chắn rằng file ABMIBroker.mqh đã có trong đường dẫn.
  10. 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.

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.

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 LossTake 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 PrintComment để 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ịchtố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!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *