Bài viết gần đây
-
Lộ Trình Học AI Trading Cho Người Đã Biết Bot Hedging (A–Z)
Tháng 9 8, 2026 -
Reinforcement Learning Cho Bot DCA: Dạy Bot Biết Khi Nào Nên Nín
Tháng 9 8, 2026
Trang chủ → Bài Viết → 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
| 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 Đặng Trí Thanh vào ngày 30/05/2026 lúc 15:41 | 178 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.
💬 LIÊN HỆ ĐĂNG KÝ VÀ TƯ VẤN TRỰC TIẾP QUA ZALO
Bot giao dịch tự động và vai trò của lập trình giao dịch
Bot giao dịch tự động (trading bot) thực thi lệnh theo lập trình, loại bỏ cảm xúc và đảm bảo kỷ luật. Lập Trình Giao Dịch là một phần quan trọng trong hệ thống, giúp nhà đầu tư kiểm soát toàn bộ quy trình từ tín hiệu đến lệnh thực tế.
Bài viết này phân tích chi tiết về lập trình giao dịch: kiến trúc hệ thống, cách xây dựng, quản lý rủi ro, và những sai lầm phổ biến khiến bot thua lỗ.
| Thành phần | Chức năng | Ví dụ |
|---|---|---|
| Thu thập dữ liệu | Lấy giá realtime | Binance API, MT5 |
| Xử lý tín hiệu | Tính toán điểm vào/ra | Python strategy |
| Quản lý lệnh | Đặt/sửa/đóng lệnh | python-binance, MT5 |
| Quản lý vốn | Tính khối lượng theo rủi ro | risk module |
| Cảnh báo | Thông báo kết quả | Telegram Bot |
Kiến trúc một bot giao dịch chuẩn
Một bot tốt không chỉ gồm phần sinh tín hiệu mà còn có lớp quản lý lệnh, quản lý vốn và giám sát lỗi. Tách lớp giúp bạn dễ kiểm thử và nâng cấp từng phần mà không phá vỡ toàn hệ thống.
# Vòng lặp chính của bot
import time
while True:
price = get_price()
signal = strategy(price)
if signal == 'BUY':
open_position()
elif signal == 'SELL':
close_position()
time.sleep(60)
Quản lý rủi ro — yếu tố sống còn
| Nguyên tắc | Mô tả | Áp dụng |
|---|---|---|
| Rủi ro cố định/lệnh | Không mạo hiểm quá 1-2% | Tính lot tự động |
| Dừng lỗ bắt buộc | Giới hạn thua mỗi lệnh | Stop loss luôn bật |
| Không gồng lỗ | Cắt lỗ ngay khi sai | Đóng lệnh theo điều kiện |
| Phân bổ vốn | Không dồn hết vào 1 cặp | Đa dạng hóa tài sản |
| Backtest trước | Kiểm chứng trước khi live | Backtest ít nhất 1 năm |
Dù chiến lược tốt đến đâu, nếu quản lý rủi ro kém thì tài khoản vẫn có thể cháy. Hãy coi quản lý vốn là phần quan trọng nhất của hệ thống.
Các sai lầm khiến bot thua lỗ
Sai lầm phổ biến nhất là tin vào backtest đẹp mà quên chi phí giao dịch và trượt giá. Một bot lời 10% trong backtest có thể lỗ ngoài thực tế nếu không tính spread, phí và độ trễ khớp lệnh.
Sai lầm thứ hai là chạy bot mà không giám sát. Bot có thể dừng do mất mạng, hết API credit hoặc lỗi logic. Cần có cảnh báo Telegram và log đầy đủ.
Mẹo vận hành bot ổn định 24/7
Để bot chạy liên tục, hãy dùng VPS thay vì máy cá nhân, cấu hình tự khởi động lại khi crash, và đặt log có xoay vòng để tránh đầy ổ cứng.
Câu hỏi thường gặp về lập trình giao dịch
Bot lập trình giao dịch có chắc chắn sinh lời không?
Không có bot nào chắc chắn sinh lời. Bot chỉ thực thi kỷ luật theo chiến lược. Lợi nhuận phụ thuộc chất lượng chiến lược và quản lý rủi ro.
Cần kiến thức gì để tự xây bot?
Cần Python cơ bản, hiểu API sàn giao dịch và khái niệm thị trường. Bạn có thể học theo lộ trình từ phân tích dữ liệu đến tự động hóa.
Có nên chạy bot với tiền thật ngay không?
Không. Hãy chạy demo ít nhất vài tuần, đối chiếu kết quả, rồi mới dùng vốn nhỏ thật.
Kết luận
Lập Trình Giao Dịch giúp bạn giao dịch kỷ luật và tiết kiệm thời gian, nhưng cần được xây dựng đúng chuẩn: dữ liệu sạch, backtest trung thực, quản lý rủi ro chặt chẽ và giám sát thường xuyên. Hãy bắt đầu nhỏ và tối ưu dần.
Case study điển hình về lập trình giao dịch
Để thấy rõ giá trị thực tế của lập trình giao dịch, chúng ta xem xét một case study điển hình. Một người mới bắt đầu với ít kinh nghiệm, sau khi áp dụng có hệ thống đã đạt được kết quả rõ rệt trong một khoảng thời gian nhất định.
Ban đầu, họ dành thời gian học khái niệm và xây dựng phiên bản tối giản. Thay vì tìm kiếm giải pháp hoàn hảo, họ tập trung vào việc hoàn thành từng bước nhỏ và đo lường kết quả. Cách tiếp cận này giúp họ duy trì động lực và cải thiện liên tục.
| Mốc thời gian | Hành động | Kết quả |
|---|---|---|
| Tháng 1 | Học cơ bản, chuẩn bị công cụ | Nắm nền tảng |
| Tháng 2 | Xây dựng phiên bản đầu tiên | Có sản phẩm chạy được |
| Tháng 3 | Kiểm thử và tối ưu | Kết quả cải thiện |
| Tháng 4 | Mở rộng và tự động hóa | Tiết kiệm thời gian đáng kể |
| Tháng 6 | Vận hành ổn định | Kết quả nhất quán, dài hạn |
Bài học rút ra từ case study
Bài học quan trọng nhất là sự kiên trì và làm có hệ thống. Không có bước nhảy thần kỳ nào, chỉ có sự tích lũy đều đặn. Bạn cũng nên sẵn sàng điều chỉnh khi dữ liệu cho thấy cần thay đổi, thay vì cố chấp giữ nguyên kế hoạch cũ.
Xu hướng và tương lai của lập trình giao dịch
Lĩnh vực liên quan đến lập trình giao dịch đang phát triển rất nhanh. Hiểu được xu hướng giúp bạn chuẩn bị tốt hơn và nắm bắt cơ hội trước khi chúng trở nên phổ biến.
Một xu hướng rõ ràng là sự tự động hóa ngày càng sâu. Những công việc từng đòi hỏi thao tác thủ công đang dần được thay thế bằng các quy trình tự động, giúp con người tập trung vào quyết định chiến lược.
Xu hướng thứ hai là vai trò ngày càng lớn của dữ liệu và trí tuệ nhân tạo. Việc ra quyết định dựa trên dữ liệu khách quan đang trở thành chuẩn mực, thay vì dựa vào cảm tính.
| Xu hướng | Tác động | Cơ hội |
|---|---|---|
| Tự động hóa | Giảm công việc thủ công | Xây dựng hệ thống 24/7 |
| Dữ liệu lớn | Quyết định chính xác hơn | Phân tích sâu hơn |
| AI / Machine Learning | Tự học và thích nghi | Mô hình thông minh hơn |
| Đa nền tảng | Phủ rộng người dùng | Ứng dụng linh hoạt |
| Bảo mật | An toàn hơn | Niềm tin của người dùng |
Chuẩn bị cho tương lai
Để không bị tụt lại, hãy xây dựng nền tảng vững chắc về kiến thức cốt lõi và không ngừng học hỏi công nghệ mới. Kỹ năng học cách học chính là lợi thế cạnh tranh bền vững nhất trong thời đại thay đổi nhanh.
Tổng kết và các bước hành động tiếp theo về lập trình giao dịch
Qua bài viết, chúng ta đã đi qua các khía cạnh quan trọng của lập trình giao dịch: khái niệm cốt lõi, cách triển khai, các lỗi cần tránh và những thực hành tốt nhất. Điều quan trọng là biến kiến thức thành hành động.
| Hành động | Chi tiết | Thời gian dự kiến |
|---|---|---|
| Ôn lại lý thuyết | Đọc lại các khái niệm chính | 30 phút |
| Làm bài tập nhỏ | Áp dụng vào một ví dụ cụ thể | 1-2 giờ |
| Xây dựng dự án nhỏ | Tạo sản phẩm tối giản | Vài ngày |
| Chia sẻ & phản hồi | Tham gia cộng đồng | Liên tục |
| Đánh giá định kỳ | Xem lại kết quả mỗi tuần | Định kỳ |
Hãy bắt đầu ngay hôm nay với một bước nhỏ. Đừng chờ đến khi có đủ điều kiện hoàn hảo, vì điều kiện hoàn hảo hiếm khi đến. Việc bắt đầu sớm và kiên trì chính là yếu tố quyết định sự thành công của bạn với chủ đề này.
Phân tích chuyên sâu về lập trình giao dịch
Để hiểu đầy đủ về lập trình giao dịch, chúng ta cần phân tích từ nhiều góc độ: bản chất, cách vận hành, điều kiện áp dụng và kết quả kỳ vọng. Mỗi góc độ giúp bạn có một bức tranh hoàn chỉnh hơn trước khi đưa ra quyết định.
Về bản chất, lập trình giao dịch không phải là một phép màu mà là kết quả của quá trình nghiên cứu, thử nghiệm và tối ưu liên tục. Người thành công thường bắt đầu từ những bước nhỏ, đo lường kết quả và điều chỉnh dần.
Điều kiện áp dụng cũng rất quan trọng. Một phương pháp hiệu quả với người này chưa chắc phù hợp với người khác, vì vậy bạn cần đối chiếu với hoàn cảnh cụ thể của mình: vốn, thời gian, kiến thức và khả năng chịu rủi ro.
| Góc độ | Câu hỏi cần trả lời | Ý nghĩa thực tế |
|---|---|---|
| Bản chất | Nó hoạt động dựa trên nguyên lý gì? | Hiểu cốt lõi để không áp dụng sai |
| Vận hành | Quy trình thực hiện ra sao? | Biết rõ từng bước để kiểm soát |
| Điều kiện | Khi nào nên / không nên dùng? | Tránh lạm dụng gây rủi ro |
| Kết quả | Kỳ vọng hợp lý là gì? | Đặt mục tiêu thực tế, đo lường được |
| Rủi ro | Điều gì có thể sai? | Có kế hoạch dự phòng |
Cách tư duy đúng khi nghiên cứu lập trình giao dịch
Hãy luôn đặt câu hỏi: dữ liệu này từ đâu, giả định nào đang được dùng, và nếu giả định sai thì kết quả thay đổi ra sao. Tư duy phản biện giúp bạn tránh những kết luận vội vàng và những quyết định thiếu cơ sở.
Ví dụ thực tế về lập trình giao dịch
Để minh họa rõ hơn, chúng ta xét một ví dụ thực tế áp dụng lập trình giao dịch. Giả sử bạn muốn triển khai nó vào công việc hằng ngày: bắt đầu từ việc xác định mục tiêu, thu thập dữ liệu cần thiết, rồi thực hiện từng bước.
Bước đầu tiên, hãy liệt kê các tài nguyên và công cụ bạn đang có. Bước thứ hai, xây dựng một phiên bản tối giản nhất có thể chạy được. Bước thứ ba, kiểm tra kết quả trên dữ liệu nhỏ trước khi mở rộng.
# ví dụ tối giản: chạy thử từng bước
def step_1():
print('Thu thập dữ liệu')
def step_2():
print('Xử lý và phân tích')
def step_3():
print('Đánh giá kết quả')
for f in (step_1, step_2, step_3):
f()
Kết quả ban đầu có thể chưa hoàn hảo, nhưng quan trọng là bạn có một vòng lặp làm → đo → học. Mỗi vòng lặp giúp bạn hiểu sâu hơn và cải thiện chất lượng.
Điều chỉnh sau khi thử nghiệm
Sau vòng lặp đầu tiên, hãy ghi lại những gì hoạt động tốt và những gì chưa. Dựa trên đó, điều chỉnh một tham số tại một thời điểm để dễ dàng xác định nguyên nhân của sự thay đổi.
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL Hướng Nghiệp Dữ LiệuĐặ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.