Bài viết gần đây
-
Quản lý CRM toàn diện: Từ lead đến học viên trung thành
Tháng 8 16, 2026 -
Auto Trading MQL5: Xây Dựng Bot Giao Dịch Tự Động Trên MetaTrader 5
Tháng 8 15, 2026
| Kiến Trúc Copy Trade Đồng Bộ 10 Tài Khoản Quỹ: …
Được viết bởi Đặng Trí Thanh vào ngày 27/06/2026 lúc 23:55 | 29 lượt xem
Kiến Trúc Copy Trade Đồng Bộ 10 Tài Khoản Quỹ: Giải Pháp Tối Ưu Cho Prop Trader
Trong cộng đồng Prop Trader hiện nay, việc sở hữu cùng lúc nhiều tài khoản quỹ từ các tổ chức khác nhau (như FTMO, MFF, hay các quỹ tại Việt Nam) đã trở thành một chiến lược phổ biến. Tuy nhiên, thách thức lớn nhất không phải là tìm điểm vào lệnh, mà là làm sao để đồng bộ hóa giao dịch trên 10 tài khoản một cách chính xác, nhanh chóng và an toàn.
Hôm nay, Học viện DNT Academy sẽ chia sẻ về kiến trúc hệ thống Copy Trade quy mô lớn – một phần quan trọng trong khóa học MetaTrader 5 nâng cao của chúng tôi.
1. Tại sao cần Kiến trúc Copy Trade chuyên nghiệp?
Giao dịch thủ công trên 10 terminal khác nhau là một cơn ác mộng. Bạn sẽ gặp phải:
– Độ trễ (Latency): Lệnh vào ở tài khoản 1 nhưng đến tài khoản 10 thì giá đã chạy đi xa.
– Sai số khối lượng: Nhầm lẫn lot size giữa tài khoản 100k và 200k.
– Rủi ro vi phạm quy tắc: Một tài khoản vi phạm Daily Drawdown có thể kéo theo cả hệ thống nếu không có cơ chế ngắt kết nối tự động.
2. Mô hình Master-Slave: Trái tim của hệ thống đồng bộ
Hệ thống được thiết kế theo kiến trúc Master-Slave (Chủ – Tớ) cực kỳ chặt chẽ:
– Master Account: Nơi Trader thực hiện các phân tích và vào lệnh trực tiếp.
– Slave Accounts: Các tài khoản quỹ mục tiêu. Mỗi tài khoản này sẽ chạy một “Receiver EA” (Expert Advisor nhận lệnh) kết nối thông qua giao thức truyền tin nội bộ hoặc API.
Cơ chế vận hành:
1. Khi có lệnh tại Master, hệ thống ghi nhận các thông số: Cặp tiền, Loại lệnh, Giá vào, SL/TP.
2. Thông tin được mã hóa và đẩy qua một cấu trúc dữ liệu chung (Memory Mapping hoặc Global Variables trong MT5).
3. Các Slave EA sẽ quét dữ liệu này liên tục (với tần suất mili giây) và thực thi lệnh tương ứng.
3. Xử lý bài toán “Độ trễ” và “Trượt giá” (Slippage)
Trong lập trình MT5 nâng cao, chúng tôi không chỉ đơn thuần là “copy” lệnh. Hệ thống phải thông minh hơn thế:
– Virtual SL/TP: Sử dụng SL/TP ảo để tránh việc bị quét bởi các Broker khác nhau trước khi lệnh tại Master đóng.
– Slippage Control: Thiết lập ngưỡng trượt giá tối đa. Nếu giá tại tài khoản Slave chênh lệch quá nhiều so với Master, lệnh sẽ không được thực thi để đảm bảo tỷ lệ R:R.
– Auto Lot Scaling: Tự động tính toán khối lượng dựa trên Balance của từng tài khoản. Ví dụ: Nếu Master vào 1 lot cho tk 100k, Slave tk 200k sẽ tự động vào 2 lot.
4. Quản trị rủi ro tập trung
Điểm đặc biệt nhất của kiến trúc này là khả năng Ngắt kết nối khẩn cấp.
Nếu một tài khoản Slave chạm ngưỡng sụt giảm 4.5% (gần mức vi phạm 5% của quỹ), Receiver EA tại tài khoản đó sẽ tự động ngắt kết nối hoàn toàn với Master, bảo vệ phần vốn còn lại và ngăn chặn việc vi phạm quy tắc quỹ.
5. Học hỏi từ chuyên gia Đặng Trí Thanh
Kiến trúc này không chỉ là lý thuyết. Nó được đúc kết từ hàng chục năm kinh nghiệm làm việc trong lĩnh vực Data và Technology tại các ngân hàng lớn (Sacombank, Citibank) của thầy Đặng Trí Thanh.
Với tư duy của một CTO, thầy Thanh hướng dẫn học viên cách xây dựng hệ thống không chỉ “chạy được” mà phải “chạy bền vững và hiệu suất cao”. Đây chính là chìa khóa để bạn khai phóng toàn bộ quyền năng của hệ sinh thái Trading.
Kết luận
Kiến trúc Copy Trade đồng bộ 10 tài khoản quỹ là lời giải cho bài toán quy mô của một Pro Trader. Nếu bạn muốn chuyên nghiệp hóa con đường giao dịch của mình và sở hữu những hệ thống tự động hóa hàng đầu:
👉 Đăng ký ngay tại: Lập trình Forex MQL MT5 nâng cao Hedging tự động hóa
—
*DNT Academy – Đồng hành cùng bạn trên hành trình chinh phục thị trường tài chính.*
Mở rộng — Kiến trúc tổng quan hệ thống Copy Trade
Một hệ thống Copy Trade đồng bộ 10 tài khoản quỹ cần được thiết kế theo ba lớp rõ ràng: lớp phát tín hiệu (Signal Layer), lớp truyền tin (Transport Layer) và lớp thực thi (Execution Layer). Việc tách lớp giúp bạn thay thế từng phần mà không phá vỡ toàn bộ hệ thống.
Ba lớp của hệ thống
| Lớp | Nhiệm vụ | Công nghệ MT5 |
|---|---|---|
| Signal Layer | Master phân tích và ra lệnh | EA Master, OnTick |
| Transport Layer | Truyền thông tin lệnh an toàn | Global Variables, File, TCP socket |
| Execution Layer | Slave nhận và khớp lệnh | Receiver EA, OrderSendAsync |
Với quy mô 10 tài khoản trên cùng một VPS, giải pháp truyền tin nhanh nhất là Global Variables của MT5. Chúng là biến toàn cục dùng chung cho mọi terminal MT5 đăng nhập cùng một tài khoản trên cùng máy, có thể đọc/ghi với tốc độ mili giây.
# [GLOBAL VARIABLES - MQL5]
// Master: phát tín hiệu lệnh qua Global Variables
void BroadcastSignal(string symbol, int type, double price, double sl, double tp)
{
GlobalVariableSet("SIG_SYMBOL", StringToInteger(symbol));
GlobalVariableSet("SIG_TYPE", type);
GlobalVariableSet("SIG_PRICE", price);
GlobalVariableSet("SIG_SL", sl);
GlobalVariableSet("SIG_TP", tp);
GlobalVariableSet("SIG_SEQ", GlobalVariableGet("SIG_SEQ") + 1);
GlobalVariableSet("SIG_TIME", TimeCurrent());
}
Vì sao cần số thứ tự (SEQ)?
Biến SIG_SEQ tăng dần giúp mỗi Slave biết mình đã xử lý tín hiệu nào chưa. Nếu không có số thứ tự, các Slave có thể xử lý trùng hoặc bỏ sót lệnh khi tần suất phát quá nhanh.
Mở rộng — Receiver EA bên phía Slave
Mỗi tài khoản quỹ chạy một Receiver EA. Nhiệm vụ của nó là quét Global Variables mỗi tick, so sánh số thứ tự đã xử lý, rồi khớp lệnh bằng OrderSendAsync để không chặn luồng chính.
# [RECEIVER EA - MQL5]
int lastSeq = 0;
void OnTick()
{
long seq = (long)GlobalVariableGet("SIG_SEQ");
if(seq <= lastSeq) return; // không có tín hiệu mới
lastSeq = (int)seq;
string symbol = SymbolName((int)GlobalVariableGet("SIG_SYMBOL"), false);
int type = (int)GlobalVariableGet("SIG_TYPE");
double price = GlobalVariableGet("SIG_PRICE");
double sl = GlobalVariableGet("SIG_SL");
double tp = GlobalVariableGet("SIG_TP");
MqlTradeRequest req = {};
req.action = TRADE_ACTION_DEAL;
req.symbol = symbol;
req.volume = ComputeLot(); // tự tính lot theo balance
req.type = (ENUM_ORDER_TYPE)type;
req.price = (type == ORDER_TYPE_BUY) ? SymbolInfoDouble(symbol, SYMBOL_ASK)
: SymbolInfoDouble(symbol, SYMBOL_BID);
req.sl = sl;
req.tp = tp;
req.deviation = 20;
MqlTradeResult res = {};
if(!OrderSend(req, res))
PrintFormat("Loi dat lenh: retcode=%d", res.retcode);
}
Ưu điểm của OrderSendAsync là EA không bị treo khi chờ server phản hồi, giúp hệ thống xử lý nhiều tài khoản cùng lúc mượt mà.
Bảng mã lỗi retcode thường gặp
| retcode | Ý nghĩa | Cách xử lý |
|---|---|---|
| 10009 | Lệnh đã được thực hiện | Thành công, ghi log |
| 10004 | Yêu cầu không hợp lệ | Kiểm tra lại tham số |
| 10006 | Không đủ tiền | Giảm lot, chặn lệnh mới |
| 10008 | Giá thay đổi quá nhiều | Tăng deviation hoặc hủy |
| 10014 | Hết hạn | Mở lại với giá mới |
Mở rộng — Auto Lot Scaling theo Balance từng tài khoản
Mỗi tài khoản quỹ có balance khác nhau: 100k, 200k, 400k. Nếu Master vào 1 lot, Slave phải tính lại lot theo tỷ lệ balance để rủi ro tương đương trên mọi tài khoản.
# [AUTO LOT - MQL5]
double ComputeLot()
{
double masterBalance = GlobalVariableGet("MASTER_BALANCE");
double myBalance = AccountInfoDouble(ACCOUNT_BALANCE);
double masterLot = GlobalVariableGet("MASTER_LOT");
if(masterBalance <= 0) return 0;
double raw = masterLot * (myBalance / masterBalance);
// làm tròn về bước lot hợp lệ
double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
double lot = MathFloor(raw / step) * step;
double minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
if(lot < minLot) lot = minLot;
if(lot > maxLot) lot = maxLot;
return lot;
}
Bảng ví dụ scaling
| Balance Master | Lot Master | Balance Slave | Lot Slave |
|---|---|---|---|
| 100.000 | 1.00 | 200.000 | 2.00 |
| 100.000 | 1.00 | 50.000 | 0.50 |
| 100.000 | 0.50 | 200.000 | 1.00 |
| 400.000 | 2.00 | 100.000 | 0.50 |
Lưu ý: một số quỹ cấm copy trade giữa các tài khoản hoặc yêu cầu lot tối thiểu. Luôn kiểm tra quy tắc của từng quỹ trước khi bật chế độ tự động.
Mở rộng — Equity Guard: bảo vệ tài khoản khỏi vi phạm Drawdown
Quỹ prop có quy tắc nghiêm ngặt về drawdown hằng ngày và tổng. Receiver EA cần một “cầu dao” tự động ngắt kết nối khi equity chạm ngưỡng an toàn.
# [EQUITY GUARD - MQL5]
input double MaxDailyLossPercent = 3.0; // mức an toàn thấp hơn quy định quỹ
input double DisconnectBelowEquity = 0; // 0 = tắt
void CheckEquityGuard()
{
double equity = AccountInfoDouble(ACCOUNT_EQUITY);
double balance = AccountInfoDouble(ACCOUNT_BALANCE);
double dayStart = GlobalVariableGet("DAY_START_EQUITY");
double dropPct = (dayStart - equity) / dayStart * 100.0;
if(dropPct >= MaxDailyLossPercent)
{
// ngắt nhận tín hiệu, đóng toàn bộ lệnh mở (tuỳ cấu hình)
GlobalVariableSet("SLAVE_DISCONNECTED", 1);
PrintFormat("Equity guard: dung nhan tin hieu, giam %.2f%%", dropPct);
}
}
Quy trình ngắt an toàn
- Đặt ngưỡng thấp hơn quy định quỹ (ví dụ quỹ 5% → hệ thống ngắt ở 4%).
- Khi ngắt, EA ngừng mở lệnh mới nhưng không đóng lệnh đang chạy (tuỳ chính sách).
- Gửi cảnh báo Telegram để trader xử lý thủ công.
Mở rộng — Virtual SL/TP và Slippage Control
Khi copy lệnh sang nhiều broker, SL/TP thật trên mỗi tài khoản có thể bị quét khác nhau do chênh lệch giá. Giải pháp chuyên nghiệp là dùng Virtual SL/TP: hệ thống tự theo dõi và đóng lệnh khi giá chạm mức, thay vì đặt lệnh stop trên server.
# [VIRTUAL SL/TP - MQL5]
void ManageVirtualLevels()
{
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
ulong ticket = PositionGetTicket(i);
if(!PositionSelectByTicket(ticket)) continue;
if(PositionGetInteger(POSITION_MAGIC) != MagicSlave) continue;
double price = PositionGetDouble(POSITION_PRICE_CURRENT);
double sl = PositionGetDouble(POSITION_SL);
double tp = PositionGetDouble(POSITION_TP);
if(sl != 0 && price <= sl) // giả định lệnh BUY, SL dưới giá
ClosePosition(ticket, "virtual SL");
if(tp != 0 && price >= tp) // lệnh BUY, TP trên giá
ClosePosition(ticket, "virtual TP");
}
}
Slippage Control
Nếu giá tại tài khoản Slave chênh lệch quá ngưỡng so với giá Master, lệnh không được khớp để bảo vệ tỷ lệ R:R. Bạn cấu hình ngưỡng này theo pip.
# [SLIPPAGE CONTROL - MQL5]
input double MaxSlippagePips = 2.0;
bool AcceptablePrice(double masterPrice, double currentPrice, int type)
{
double diff = MathAbs(masterPrice - currentPrice);
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double pips = diff / (point * 10); // pip = 10 point (forex 5 số)
return pips <= MaxSlippagePips;
}
Bảng cấu hình khuyến nghị
| Tham số | Khuyến nghị | Vai trò |
|---|---|---|
| MaxSlippagePips | 1–2 pip | Chặn khớp giá xấu |
| MaxDailyLossPercent | 3–4% | Cầu dao drawdown |
| Deviation | 20–50 point | Độ trễ khớp lệnh |
| MagicSlave | Số riêng | Nhận diện lệnh của EA |
Mở rộng — Heartbeat và Watchdog giám sát hệ thống
Hệ thống 10 tài khoản cần biết tài khoản nào còn hoạt động. Mỗi Receiver EA gửi tín hiệu “còn sống” (heartbeat) định kỳ; nếu hết hạn, hệ thống báo động và chuyển sang chế độ an toàn.
# [HEARTBEAT - MQL5]
void OnTimer()
{
// gửi trạng thái mỗi 60 giây
GlobalVariableSet("SLAVE_ALIVE_" + IntegerToString(SlaveId), TimeCurrent());
GlobalVariableSet("SLAVE_EQUITY_" + IntegerToString(SlaveId),
AccountInfoDouble(ACCOUNT_EQUITY));
}
void OnDeinit(const int reason)
{
// khi EA tắt, báo "mất kết nối"
GlobalVariableSet("SLAVE_ALIVE_" + IntegerToString(SlaveId), 0);
}
Trên Master hoặc một EA giám sát trung tâm, bạn quét danh sách Slave: nếu một Slave không gửi heartbeat quá 5 phút, gửi cảnh báo Telegram.
Bảng trạng thái Slave trên Dashboard
| Slave | Balance | Equity | Heartbeat | Trạng thái |
|---|---|---|---|---|
| Quỹ A | 100.000 | 102.300 | 12 giây | OK |
| Quỹ B | 200.000 | 198.400 | 12 giây | OK |
| Quỹ C | 100.000 | 95.100 | — | DISCONNECTED |
Mở rộng — Tích hợp cảnh báo Telegram cho hệ thống Copy Trade
Khi vận hành 10 tài khoản, trader không thể canh màn hình suốt ngày. Cảnh báo Telegram là kênh giám sát chuẩn: mỗi lệnh, mỗi lần ngắt kết nối đều được đẩy về điện thoại.
# [TELEGRAM ALERT - PYTHON]
import requests
def send_telegram(token, chat_id, text):
url = f"https://api.telegram.org/bot{token}/sendMessage"
requests.post(url, json={"chat_id": chat_id, "text": text})
TOKEN = "123456:ABC-DEF" # token bot Telegram
CHAT_ID = "987654321" # chat id của bạn
send_telegram(TOKEN, CHAT_ID, "Slave Quy A ngat ket noi - equity -4.2%")
Các sự kiện nên gửi cảnh báo
- Mỗi lệnh copy thành công (symbol, lot, giá).
- Equity guard kích hoạt.
- Heartbeat của Slave nào đó hết hạn.
- Sai lệch lot hoặc retcode lỗi.
Mở rộng — Vòng lặp OnTick đầy đủ của Master EA
Master EA kết hợp mọi thứ: nhận tín hiệu từ chiến lược, phát broadcast, gửi cảnh báo và theo dõi equity.
# [MASTER EA - MQL5]
void OnTick()
{
// 1) chạy chiến lược
if(!CheckStrategy()) return;
// 2) xác định lệnh
double price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
int type = GetSignalType(); // ORDER_TYPE_BUY / SELL
double sl = price - 200 * _Point;
double tp = price + 400 * _Point;
// 3) phát tín hiệu qua Global Variables
BroadcastSignal(_Symbol, type, price, sl, tp);
// 4) ghi log + cảnh báo
PrintFormat("Broadcast %s %d @ %.5f", _Symbol, type, price);
SendNotification("Copy Trade: lenh moi " + _Symbol);
}
Kiểm tra an toàn trước khi phát
- Kiểm tra số lệnh mở đang dưới giới hạn.
- Kiểm tra equity chưa chạm ngưỡng rủi ro.
- Kiểm tra giờ giao dịch hợp lệ.
Khi đã vững kiến trúc trên, bạn có thể nâng cấp lên truyền qua file chia sẻ hoặc TCP socket để copy giữa các VPS khác nhau — phục vụ quy mô hàng chục tài khoản.
Bảng so sánh phương thức truyền tin
| Phương thức | Độ trễ | Giới hạn | Dùng khi |
|---|---|---|---|
| Global Variables | Mili giây | Cùng máy/tài khoản | 1 VPS, 1 tài khoản MT5 |
| File chia sẻ | Vài ms | Cùng máy, nhiều tài khoản | Nhiều terminal MT5 |
| TCP Socket | Mili giây | Khác máy được | Nhiều VPS |
| API trung tâm | Chậm hơn | Không giới hạn | Quy mô doanh nghiệp |
Mở rộng — Case study: triển khai thực tế trên 10 tài khoản quỹ
Dưới đây là kịch bản triển khai điển hình, giúp bạn hình dung thứ tự làm việc khi xây hệ thống copy trade của riêng mình.
- Chuẩn bị: Cài đặt một MT5 Master và mười MT5 Slave trên cùng VPS Ubuntu, mỗi Slave đăng nhập một tài khoản quỹ.
- Cấu hình: Bật Allow AutoTrading, đặt Magic số riêng, khai báo balance Master để tính lot.
- Kiểm tra: Chạy demo vài ngày, đối chiếu từng lệnh giữa Master và các Slave.
- Điều chỉnh: Tinh chỉnh ngưỡng slippage và drawdown theo từng quỹ.
- Giám sát: Theo dõi Telegram và dashboard heartbeat mỗi ngày.
Những lưu ý quan trọng khi vận hành
- Một số quỹ cấm copy trade hoặc quy định lot tối thiểu — luôn đọc kỹ quy tắc.
- Không để Master và Slave cùng trên tài khoản có rủi ro trùng lệnh.
- Backup cấu hình và mã nguồn EA trước mỗi lần thay đổi.
- Kiểm tra phiên bản MT5 và build của tất cả terminal đồng bộ.
Hệ thống copy trade chuyên nghiệp là sự kết hợp của kiến trúc tốt, xử lý lỗi chặt chẽ và quy trình vận hành kỷ luật. Đây chính là nội dung thực chiến bạn được thực hành trong khóa học MT5 nâng cao tại DNT Academy.
Trader hiện đại và kiến trúc copy trade
Trader chuyên nghiệp ngày nay không chỉ đọc biểu đồ mà còn dùng kiến trúc copy trade để tự động hóa phân tích, kiểm tra chiến lược và quản lý rủi ro. Python giúp biến ý tưởng thành công cụ một cách nhanh chóng.
Bài viết trình bày chi tiết về kiến trúc copy trade, từ thiết lập môi trường đến ví dụ áp dụng thực tế trong quy trình giao dịch hằng ngày.
Thiết lập môi trường nhanh
# Cài đặt các thư viện cần thiết
pip install pandas numpy matplotlib requests
# kiểm tra phiên bản
import pandas as pd
print(pd.__version__)
Sau khi cài đặt, bạn có thể bắt đầu nạp dữ liệu giá, tính chỉ báo và vẽ biểu đồ. Quy trình lặp nhanh giúp bạn thử nghiệm nhiều ý tưởng trong thời gian ngắn.
Các bài toán thường gặp của trader
| Bài toán | Mô tả | Thư viện |
|---|---|---|
| Tải giá | Lấy OHLCV từ sàn | requests, ccxt |
| Tính chỉ báo | SMA, RSI, MACD | pandas, ta-lib |
| Backtest | Mô phỏng chiến lược | backtrader, vectorbt |
| Cảnh báo | Thông báo tín hiệu | telegram, twilio |
| Quản lý vốn | Tính khối lượng | numpy |
Ví dụ: tính RSI và phát hiện tín hiệu
def rsi(close, period=14):
delta = close.diff()
gain = delta.clip(lower=0).rolling(period).mean()
loss = (-delta.clip(upper=0)).rolling(period).mean()
rs = gain / loss
return 100 - (100 / (1 + rs))
df['rsi'] = rsi(df['close'])
print(df[['close', 'rsi']].tail())
RSI trên 70 cho thấy vùng quá mua, dưới 30 là quá bán. Đây là tín hiệu tham khảo, cần kết hợp thêm xu hướng và khối lượng trước khi vào lệnh.
Sai lầm phổ biến và cách tránh
| Sai lầm | Vì sao nguy hiểm | Cách tránh |
|---|---|---|
| Dùng dữ liệu demo thay live | Không đúng thực tế | Kiểm tra dữ liệu thật |
| Bỏ qua phí & trượt giá | Lợi nhuận ảo | Mô phỏng chi phí thực |
| Overfitting tham số | Chiến lược không ổn định | Giữ tham số ít, hợp lý |
| Không kiểm soát rủi ro | Cháy tài khoản | Đặt stop loss mọi lệnh |
Câu hỏi thường gặp về kiến trúc copy trade
Tôi mới bắt đầu, học kiến trúc copy trade từ đâu?
Bắt đầu từ việc nạp dữ liệu và tính chỉ báo cơ bản. Làm được hai việc này, bạn đã có nền tảng để xây dựng công cụ của riêng mình.
Có cần giỏi toán không?
Chỉ cần kiến thức thống kê cơ bản. Các thư viện đã đóng gói sẵn hầu hết phép tính, bạn chỉ cần hiểu ý nghĩa để dùng đúng.
Dùng bot tự động có an toàn không?
An toàn khi bạn hiểu rõ logic, quản lý rủi ro tốt và giám sát thường xuyên. Chạy demo trước khi dùng tiền thật.
Kết luận
Kiến Trúc Copy Trade giúp trader tiết kiệm thời gian, tăng độ chính xác và giảm căng thẳng. Hãy xây dựng từng bước, kiểm chứng kỹ lưỡng và luôn ưu tiên quản lý rủi ro.
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.
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Giảng viên HNDLĐặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.