Bài viết gần đây
| Lập trình Web Dashboard Python giám sát 100+ tài khoản MT5 Realtime
Được viết bởi thanhdt vào ngày 28/05/2026 lúc 07:03 | 27 lượt xem
Khi quy mô hệ thống của một Introducing Broker (IB) hoặc Quỹ giao dịch mở rộng từ 10 lên hàng trăm tài khoản khách hàng, thách thức lớn nhất không còn là chiến thuật giao dịch, mà chính là năng lực giám sát và quản trị rủi ro tập trung.
Thử tưởng tượng nỗi đau của một IB truyền thống: Mỗi ngày phải mở hàng chục màn hình VPS khác nhau chỉ để kiểm tra xem tài khoản nào đang sụt giảm vốn (Drawdown) cao, tài khoản nào bị mất kết nối mạng hay gặp sự cố lệnh. Quy trình thủ công này cực kỳ tốn thời gian, dễ sai sót và có độ trễ cảnh báo rất lớn – chỉ cần chậm trễ vài phút khi thị trường bão giá, khách hàng có thể cháy tài khoản.
Để giải quyết triệt để bài toán này, các IB công nghệ xuất sắc đang sở hữu một Web Dashboard giám sát tập trung realtime viết bằng Python (FastAPI & Streamlit). Hệ thống này thu thập toàn bộ dữ liệu số dư, tài sản, trạng thái lệnh từ hàng trăm tài khoản MT5 và đẩy lên một giao diện web duy nhất trực quan.
Hôm nay, DNT Academy sẽ hướng dẫn bạn phương pháp xây dựng và lập trình toàn bộ hệ thống đỉnh cao này!
🖥️ Trung tâm điều hành – Giao diện Giám sát Tập trung

1. Kiến trúc hệ thống giám sát tập trung 100+ tài khoản MT5
Để hệ thống hoạt động mượt mà, chịu tải tốt và không làm nghẽn Terminal MT5 của khách hàng, chúng ta xây dựng theo mô hình Client-Server phi tập trung (Decentralized Collector & Central Web Server):
graph TD
subgraph VPS Clients
A[Client MT5 - Account 1] -->|1. Python Collector| B(REST POST JSON)
C[Client MT5 - Account 2] -->|1. Python Collector| B
D[Client MT5 - Account N] -->|1. Python Collector| B
end
subgraph Central Server
B -->|2. FastAPI Endpoint| E[Central Web Server Backend]
E -->|3. Save to In-Memory Cache| F[Redis / RAM Cache]
G[Streamlit / React Dashboard] -->|4. Get Realtime Stats| E
E -->|5. Alert Trigger| H[Telegram API Channel]
end
- Python Collector (Tại mỗi VPS Client): Một script Python nhỏ chạy ngầm song song với Terminal MT5 của khách hàng, cứ mỗi 3 giây sẽ đọc thông tin tài khoản qua thư viện
MetaTrader5và gửi dữ liệu dạng JSON qua giao thức HTTP POST về Server trung tâm. - FastAPI Backend (Tại Server trung tâm): Tiếp nhận dữ liệu đồng thời từ hàng trăm Client gửi về, lưu trữ tạm thời vào bộ nhớ RAM cực nhanh (In-Memory Cache).
- Streamlit Frontend (Giao diện giám sát): Đọc dữ liệu từ Backend và hiển thị trực quan lên trình duyệt web của Admin/IB dưới dạng bảng biểu và cảnh báo đỏ realtime.
- Telegram Bot: Tự động bắn cảnh báo SOS về nhóm chat Telegram của đội ngũ kĩ thuật khi có tài khoản sụt giảm vượt ngưỡng quy định.
2. Lập trình script Python Collector thu thập dữ liệu trên MT5 Client
Tại mỗi VPS khách hàng, chúng ta chạy script Python sử dụng thư viện chính thức MetaTrader5 để đọc trực tiếp số dư (Balance), tài sản thực tế (Equity) và sụt giảm vốn hiện tại (Drawdown):
import MetaTrader5 as mt5
import requests
import time
import json
# Cấu hình kết nối Backend Server trung tâm
SERVER_URL = "http://YOUR_CENTRAL_SERVER_IP:8000/api/update_account"
UPDATE_INTERVAL = 3 # Quét và gửi dữ liệu mỗi 3 giây
def get_account_data():
if not mt5.initialize():
print("Không thể khởi động kết nối MetaTrader5")
return None
# Lấy thông tin tài khoản thời gian thực
acc_info = mt5.account_info()
if acc_info is None:
print("Không thể lấy thông tin tài khoản")
return None
balance = acc_info.balance
equity = acc_info.equity
drawdown_percent = ((balance - equity) / balance) * 100 if balance > 0 else 0
data = {
"account_id": acc_info.login,
"name": acc_info.name,
"broker": acc_info.company,
"balance": balance,
"equity": equity,
"drawdown": round(drawdown_percent, 2),
"positions_count": mt5.positions_total()
}
mt5.shutdown()
return data
print("Bắt đầu Collector giám sát tài khoản MT5...")
while True:
data = get_account_data()
if data:
try:
# Gửi dữ liệu về Server trung tâm
res = requests.post(SERVER_URL, json=data, timeout=2)
print(f"Đã gửi dữ liệu Tài khoản {data['account_id']} | Drawdown: {data['drawdown']}%")
except Exception as e:
print(f"Lỗi kết nối tới Server trung tâm: {e}")
time.sleep(UPDATE_INTERVAL)
3. Xây dựng API Backend bằng FastAPI tiếp nhận dữ liệu song song
Tại Server trung tâm, chúng ta lập trình API Backend bằng FastAPI. Nhờ cơ chế bất đồng bộ (async/await), FastAPI có thể xử lý đồng thời hàng nghìn request gửi về từ hàng trăm tài khoản khách hàng cùng lúc mà không gây trễ.
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Dict
import uvicorn
app = FastAPI(title="MT5 Centralized Monitoring System API")
# Bộ nhớ đệm RAM lưu trữ dữ liệu thời gian thực của 100+ khách hàng
accounts_db: Dict[int, dict] = {}
class AccountSchema(BaseModel):
account_id: int
name: str
broker: str
balance: float
equity: float
drawdown: float
positions_count: int
@app.post("/api/update_account")
async def update_account(data: AccountSchema):
# Lưu hoặc cập nhật dữ liệu vào bộ nhớ đệm RAM
accounts_db[data.account_id] = {
"name": data.name,
"broker": data.broker,
"balance": data.balance,
"equity": data.equity,
"drawdown": data.drawdown,
"positions_count": data.positions_count,
"last_update": time.time()
}
# Kích hoạt cảnh báo Telegram nếu drawdown vượt ngưỡng an toàn (> 20%)
if data.drawdown > 20.0:
send_telegram_alert(data.account_id, data.name, data.drawdown)
return {"status": "success"}
@app.get("/api/get_all_accounts")
async def get_all_accounts():
return accounts_db
def send_telegram_alert(account_id, name, drawdown):
bot_token = "YOUR_TELEGRAM_BOT_TOKEN"
chat_id = "YOUR_TELEGRAM_CHAT_ID"
msg = f"⚠️ <b>CẢNH BÁO SỤT GIẢM NGUY HIỂM!</b>nn📌 Tài khoản: <b>{account_id}</b> ({name})n🚨 Drawdown hiện tại: <b>{drawdown}%</b>nn<i>Yêu cầu kỹ thuật kiểm tra VPS ngay lập tức!</i>"
url = f"https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&text={msg}&parse_mode=HTML"
try:
requests.get(url, timeout=2)
except:
pass
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
4. Thiết kế giao diện Web Dashboard realtime bằng Streamlit
Để trực quan hóa dữ liệu, chúng ta sử dụng Streamlit – thư viện thiết kế ứng dụng web cực kỳ nhanh bằng Python. Dashboard sẽ tự động đọc dữ liệu từ API FastAPI và hiển thị bảng biểu sắp xếp theo Drawdown giảm dần, giúp quản trị viên nhận biết tài khoản nào đang gặp rủi ro nhất ngay lập tức.
import streamlit as st
import pandas as pd
import requests
import time
st.set_page_config(page_title="DNT Quant-Driven IB Realtime Dashboard", layout="wide")
st.title("🖥️ TRUNG TÂM GIÁM SÁT RỦI RO HỆ THỐNG IB AUTO TRADING")
st.subheader("Bảng điều khiển giám sát thời gian thực 100+ tài khoản MT5")
placeholder = st.empty()
# Vòng lặp cập nhật giao diện realtime mỗi 2 giây
while True:
try:
res = requests.get("http://localhost:8000/api/get_all_accounts", timeout=2)
accounts_data = res.json()
except Exception as e:
accounts_data = {}
if accounts_data:
# Chuyển đổi dữ liệu sang Pandas DataFrame để dễ dàng lọc và sắp xếp
df = pd.DataFrame.from_dict(accounts_data, orient='index')
df.index.name = 'Account ID'
df = df.reset_index()
# Sắp xếp tài khoản có Drawdown lớn nhất lên trên cùng
df = df.sort_values(by="drawdown", ascending=False)
with placeholder.container():
# 1. Thống kê nhanh các chỉ số tổng
col1, col2, col3, col4 = st.columns(4)
col1.metric(label="Tổng số Tài khoản", value=len(df))
col2.metric(label="Tổng dòng vốn (Equity)", value=f"${df['equity'].sum():,.2f}")
col3.metric(label="Drawdown trung bình", value=f"{df['drawdown'].mean():.2f}%")
col4.metric(label="Tài khoản nguy hiểm (>20% DD)", value=len(df[df['drawdown'] > 20.0]))
# 2. Bảng dữ liệu chi tiết kèm màu sắc cảnh báo
st.write("### 📊 DANH SÁCH CHI TIẾT TÀI KHOẢN KHÁCH HÀNG")
# Hàm highlight màu đỏ cho các hàng có Drawdown > 20%
def highlight_danger(row):
return ['background-color: #ffcccc' if row.drawdown > 20.0 else '' for _ in row]
styled_df = df.style.apply(highlight_danger, axis=1)
st.dataframe(styled_df, use_container_width=True)
else:
st.warning("Đang kết nối tới Backend Server...")
time.sleep(2)
🎓 Khóa học Chuyển giao Công nghệ tại DNT Academy
Lập trình Web Dashboard giám sát tập trung Python là học phần cao cấp và thực chiến nhất trong chương trình đào tạo của chúng tôi (Buổi 15).
Khi tham gia khóa học “Xây dựng hệ thống IB bằng Bot Auto Trading” tại DNT Academy, học viên sẽ được chuyển giao hoàn chỉnh:
* Mã nguồn kịch bản Python Collector tối ưu hóa bộ nhớ, không ngốn tài nguyên VPS.
* Cấu trúc API Server Backend FastAPI bảo mật kết nối mã hóa.
* Mã nguồn giao diện Web Dashboard Streamlit/React hiển thị đa phương tiện trực quan, biểu diễn dữ liệu dưới dạng đồ thị nến, đường sụt giảm vốn cuốn chiếu.
* Tích hợp hệ thống phân tích báo cáo PnL hàng ngày và gửi tin nhắn cảnh báo rủi ro tự động qua Telegram API Channel.
🔥 Kết luận: Đỉnh cao quản trị là Tự động hóa
Một Introducing Broker chuyên nghiệp không thể quản lý vốn bằng niềm tin hay sự may mắn. Sự vững mạnh của dòng doanh thu hoa hồng thụ động tỷ lệ thuận với mức độ hài lòng và thời gian sống sót của tài khoản khách hàng trên thị trường.
Sở hữu Web Dashboard Python giám sát 100+ tài khoản MT5 Realtime kết hợp cùng giải pháp Bot Auto Trading cày Commission giúp bạn giải quyết triệt để bài toán quản trị rủi ro ở quy mô lớn, tạo dựng uy tín tuyệt đối và khẳng định vị thế dẫn đầu công nghệ trong cộng đồng IB tài chính.
👉 Nâng tầm hệ thống IB của bạn lên quy mô công nghiệp ngay hôm nay!
Đăng ký nhận tư vấn lộ trình chuyển giao công nghệ và trải nghiệm thực tế các hệ thống Bot, Dashboard thông minh của DNT Academy thông qua Zalo:
💬 LIÊN HỆ TƯ VẤN TRỰC TIẾP QUA ZALO
Thông tin khóa học chi tiết và lịch khai giảng xem thêm tại: Xây dựng hệ thống IB bằng Bot Auto Trading
🌐 Đọc chi tiết bài viết và đăng ký khóa học tại Website: https://huongnghiepdulieu.com/?p=5318