Bài viết gần đây
| Lập trình giao dịch tự động Chứng khoán DNSE qua Entrade API: Hướng dẫn chi tiết gửi lệnh Mua/Bán (Buy/Sell) thực chiến
Được viết bởi thanhdt vào ngày 30/05/2026 lúc 15:41 | 40 lượt xem
Trong việc xây dựng hệ thống giao dịch tự động (Algo Trading), việc kết nối và lấy dữ liệu thị trường mới chỉ là một nửa chặng đường. Nửa chặng đường quan trọng và thử thách nhất chính là Khớp lệnh tự động (Execution). Tại thị trường Việt Nam, DNSE Securities nổi lên như một công ty chứng khoán công nghệ tiên phong cung cấp hệ sinh thái Open API chuyên nghiệp thông qua nền tảng Entrade.
Bài viết này sẽ hướng dẫn bạn từng bước lập trình bằng ngôn ngữ Python để tự động hóa toàn bộ luồng xác thực bảo mật, lấy mã OTP, tạo Trading Token và gửi lệnh Mua/Bán (Buy/Sell) cổ phiếu thực chiến trực tiếp lên sàn giao dịch thông qua API của DNSE.
🎨 Sơ đồ tổng quan luồng thu thập và xử lý dữ liệu của Bot

1. Xác thực người dùng và Quản lý tiểu khoản
Để tương tác với API của DNSE, đầu tiên bạn cần thực hiện đăng nhập để lấy mã khóa bảo mật JWT Token. Sử dụng JWT này để truy vấn các thông tin cơ bản về tài khoản và lấy mã số tiểu khoản giao dịch mặc định.
Bước 1.1: Lấy thông tin tài khoản cá nhân
import requests
# jwt_token nhận được từ API Login của DNSE
jwt_token = "YOUR_JWT_TOKEN"
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {jwt_token}'
}
# Lấy thông tin chi tiết người dùng
url_profile = 'https://services.entrade.com.vn/dnse-user-service/api/me'
response_profile = requests.get(url_profile, headers=headers)
print("Thông tin tài khoản:", response_profile.json())
Bước 1.2: Lấy ID tiểu khoản giao dịch mặc định
Mỗi tài khoản DNSE có thể chia thành nhiều tiểu khoản khác nhau. Chúng ta cần truy vấn danh sách tiểu khoản và trích xuất ID tiểu khoản mặc định (Default Account ID) để phục vụ đặt lệnh giao dịch:
url_accounts = 'https://services.entrade.com.vn/dnse-order-service/accounts'
response_accounts = requests.get(url_accounts, headers=headers)
tieukhoan = ""
if response_accounts.status_code == 200:
tieukhoan = response_accounts.json()['default']['id']
print(f"👉 Tiểu khoản mặc định sử dụng đặt lệnh: {tieukhoan}")
else:
print(f"❌ Thất bại khi truy vấn danh sách tiểu khoản. Mã lỗi: {response_accounts.status_code}")
2. Luồng bảo mật 4 bước để gửi lệnh giao dịch thực chiến
DNSE áp dụng cơ chế bảo mật cực kỳ chặt chẽ đối với các yêu cầu giao dịch tiền tệ/đặt lệnh. Để gửi lệnh thành công, Bot giao dịch của bạn phải đi qua luồng xử lý nghiêm ngặt sau:
graph TD
A[Bước 1: Gọi API Yêu Cầu Email/SMS OTP] --> B[Nhận OTP từ Email/SMS]
B --> C[Bước 2: Gửi OTP lên API để lấy Trading Token]
C --> D[Bước 3: Lấy danh sách Gói vay Margin và LoanPackageId]
D --> E[Bước 4: Đóng gói và gửi yêu cầu đặt lệnh /v2/orders]
Bước 2.1: Gọi mã OTP gửi về Email/SMS
Bot sẽ kích hoạt yêu cầu lấy mã OTP bảo mật giao dịch:
url_otp = 'https://services.entrade.com.vn/dnse-auth-service/api/email-otp'
response_otp = requests.get(url_otp, headers=headers)
if response_otp.status_code == 200:
print("📩 Mã OTP đã được gửi về Email/SMS của bạn thành công!")
Bước 2.2: Tạo mã khóa giao dịch (Trading Token)
Sau khi nhận được mã OTP (ví dụ: 772166), Bot cần gửi mã OTP này lên để đổi lấy Trading Token có thời hạn:
otp_from_email = '772166' # Nhập mã OTP nhận được
url_trading_token = 'https://services.entrade.com.vn/dnse-order-service/trading-token'
headers_token = {
'Authorization': f'Bearer {jwt_token}',
'Content-Type': 'application/json',
'otp': otp_from_email
}
response_token = requests.post(url_trading_token, headers=headers_token, json={})
tradingToken = ""
if response_token.status_code == 200:
tradingToken = response_token.json()['tradingToken']
print(f"🔑 Khởi tạo Trading Token thành công: {tradingToken}")
Bước 2.3: Truy xuất mã gói vay Margin (Loan Package ID)
Khi mua chứng khoán trên DNSE, bạn cần chỉ định rõ gói vay Margin hỗ trợ giao dịch (kể cả khi bạn dùng 100% tiền thịt, bạn vẫn cần mã ID gói vay thông thường):
url_loans = f'https://services.entrade.com.vn/dnse-order-service/accounts/{tieukhoan}/loan-packages'
response_loans = requests.get(url_loans, headers={'Authorization': f'Bearer {jwt_token}'})
loanPackageId = None
if response_loans.status_code == 200:
loan_packages = response_loans.json()
if loan_packages and 'loanPackages' in loan_packages:
# Lấy ID của gói vay thông thường/mặc định đầu tiên
loanPackageId = loan_packages['loanPackages'][0]['id']
print(f"📦 ID Gói vay áp dụng: {loanPackageId}")
3. Lập trình gửi lệnh giao dịch tự động Mua/Bán (Buy/Sell)
Sau khi có đầy đủ JWT Token, Trading Token, Default Account ID và Loan Package ID, chúng ta tiến hành đóng gói gói tin yêu cầu đặt lệnh gửi tới máy chủ DNSE:
symbol: Mã cổ phiếu (ví dụ:ACB,TCB,SSI,VND).side: Chiều giao dịch. ChọnNB(New Buy) đối với lệnh Mua vàNS(New Sell) đối với lệnh Bán.orderType: Loại lệnh giao dịch (LO,ATO,ATC,MP…).price: Giá đặt (dạng số thực).quantity: Khối lượng cổ phiếu cần đặt (dạng số nguyên).
import json
url_order = 'https://services.entrade.com.vn/dnse-order-service/v2/orders'
# Cấu hình header chứa cả JWT Token và Trading Token bảo mật
headers_order = {
'Authorization': f'Bearer {jwt_token}',
'Content-Type': 'application/json',
'Trading-Token': tradingToken
}
# Đóng gói dữ liệu gói tin Mua 100 cổ phiếu ACB giá ATC
order_payload = {
"symbol": "ACB",
"side": "NB", # NB = Buy; NS = Sell
"orderType": "ATC",
"price": 28500,
"quantity": 100,
"loanPackageId": loanPackageId,
"accountNo": tieukhoan
}
# Thực hiện gửi yêu cầu đặt lệnh dạng POST
response_order = requests.post(url_order, headers=headers_order, data=json.dumps(order_payload))
if response_order.status_code == 200:
print("🎉 [THÀNH CÔNG RỰC RỠ] Đã gửi lệnh lên sàn chứng khoán thành công!")
print("Phản hồi hệ thống:", response_order.json())
else:
print(f"❌ Gửi lệnh thất bại. Mã phản hồi: {response_order.status_code}")
print(response_order.text)
🎓 Làm chủ kỹ năng xây dựng hệ thống Auto Trading chuyên nghiệp
Việc làm chủ kỹ nghệ kết xuất lệnh giao dịch thông qua cổng API DNSE là cột mốc đột phá giúp bạn biến các mô hình phân tích chỉ báo thành một cỗ máy tự động sinh lời thụ động 24/7 thực thụ.
Để nắm vững toàn bộ kiến thức nâng cao, tránh các bẫy logic khi đặt lệnh thực tế và nhận bộ mã nguồn cấu trúc khớp lệnh an toàn tuyệt đối, hãy đăng ký tham gia ngay chương trình đào tạo chuyên sâu:
👉 Khóa học Lập trình Bot Auto Trading thực chiến – Vibe Code Python Bot
- Chuyên gia dẫn dắt 1-1: Giải quyết trực tiếp các bài toán phân bổ vốn, tối ưu tốc độ gửi lệnh và phòng ngừa rủi ro mất mát kết nối.
- Hỗ trợ trọn đời: Bàn giao hệ thống khung kết nối DNSE, SSI, Exness, Binance chuẩn hóa đã được kiểm chứng hoạt động ổn định trên thị trường thực tế.
- Cộng đồng Quantitative Developers: Giao lưu, học hỏi và chia sẻ cơ hội đầu tư cùng các lập trình viên Algo Trading xuất sắc.