API đặt lệnh giao dịch với DNSE
Cập nhật lần cuối:
Thảo luậnDNSE API
Vnstock cung cấp phương thức kết nối API hoàn chỉnh với DNSE để cộng đồng có thể từng bước làm quen với hình thức tự động hoá giao dịch với thuật toán.
Để bắt đầu sử dụng, các bạn cần cài đặt gói thư viện vnstock3 phiên bản từ v0.3.0.7 có hỗ trợ đầy đủ các chức năng cho DNSE Lightspeed API. Từ các hàm python này, các bạn có thể xây dựng bot giao dịch/web app dễ dàng từ môi trường cloud hoặc máy tính cá nhân.
Đăng nhập và xác thực
Khởi tạo DNSE Client
Để có thể sử dụng các chức năng của DNSE API, trước hết bạn cần khởi tạo một đối tượng DNSE Client, theo đó các hàm chức năng sẽ là các phương thức của đối tượng Client này. Chúng ta gán Client này với biến client
cho ngắn gọn để gọi trong các bước tiếp theo.
from vnstock.connector.dnse import Trade client = Trade()
Đăng nhập hệ thống
JWT token
Bạn sử dụng đoạn mã sau để đăng nhập hệ thống API.
user_name = "TÊN_ĐĂNG_NHẬP_TÀI_KHOẢN_DNSE" password = "MẬT_KHẨU_TÀI_KHOẢN_DNSE" client.login(user_name, password)
Sau bước này, mã JWT token được tạo ra để sử dụng trong các bước tiếp theo.
Xác thực giao dịch
Xác thực cấp 2 với OTP
Khi nào sử dụng SmartOTP, emailOTP?
- SmartOTP là phương thức xác thực mặc định khi bạn mở tài khoản DNSE, có thể sử dụng để thực hiện toàn bộ nhu cầu giao dịch của bạn.
- emailOTP được các nhà đầu tư lựa chọn khi muốn xây dựng bot giao dịch tự động hoàn toàn. Khi đó, bạn sử dụng một email chuyên biệt (khuyên dùng Gmail) đăng ký với DNSE để nhận OTP, trích xuất OTP với API từ Google và xác thực hệ thống DNSE hoàn toàn tự động. Lưu ý nhỏ là mã OTP gửi qua email chỉ tồn tại trong 2 phút.
Yêu cầu hệ thống gửi OTP qua email
Bỏ qua bước này nếu bạn chọn sử dụng SmartOTP thay vì email OTP. Dòng lệnh sau giúp bạn yêu cầu hệ thống gửi OTP qua email, mã OTP này dùng để tạo trading token
cho phép thực hiện giao dịch.
client.email_otp()
Sau khi nhận mã OTP qua email, bạn sử dụng cho bước tiếp theo. Bạn cũng có thể tự động hóa quá trình trích xuất OTP này và nạp cho bước tiếp theo bằng cách sử dụng Gmail API. Tham khảo thêm thông tin tại đây
Tạo mã trading token để giao dịch
Tại bước này, bạn có thể nhập mã OTP để tạo trading token
bằng mã SmartOTP hoặc email OTP.
trading_token = client.get_trading_token(otp = 'MÃ_OTP_CỦA_BẠN', smart_otp=True)
Trong đó:
otp
là mã xác thực cấp 2 lấy từ app EntradeX dưới dạng SmartOTP hoặc mã được gửi qua email. Mã này phải được nhập dưới dạng string'12345'
.smart_otp
: nhận giá trịTrue
nếu bạn lấy mã từ app,False
nếu lấy mã từ email
Tra cứu thông tin
Tra cứu thông tin với tên đăng nhập và mật khẩu tài khoản
Thông tin tài khoản
Để truy cập thông tin tài khoản của bạn tại DNSE, bạn sử dụng câu lệnh sau:
client.account()
Kết quả trả về có dạng:
>>> client.account() id 0123456789 investorId 0123456789 name Vũ Thịnh custodyCode 064C12345 email support@vnstocks.com unverifiedEmail support@vnstocks.com mobile 0123456789 status ACTIVE createdDate 2023-01-01T00:00:00.007Z modifiedDate 2023-01-01T00:00:00.007Z enId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx identificationCode 0123456789010101 identificationDate 2021-01-01T00:00:00Z identificationExpiredDate 2100-01-01T00:00:00Z identificationPlace Cục CS QLHC về TTXH birthday XXXX-XX-XXT00:00:00Z address vnstock chào đón các nhà đầu tư 😁 gender MALE flexCustomerId 000000000 smartOtpRegistrationId xxxxx userApproveType AUTO_APPROVED referralCode xxxxxx referralUrl https://s.dnse.vn/xxxxxx avatarUrl https://lh3.googleusercontent.com/xyzxyz needToChangePassword True registeredSmartOtp False isEmailVerified False
Thông tin tiểu khoản
Tiểu khoản
Để tra cứu thông tin các tiểu khoản trong tài khoản của bạn, sử dụng hàm sau:
client.sub_accounts()
Thông tin số dư tài khoản
Cho phép tra cứu thông tin tiền số dư tiền theo mã tiểu khoản của bạn.
client.account_balance (sub_account='MÃ_TIỂU_KHOẢN_CỦA_BẠN')
Danh sách gói vay
Gói vay
client.loan_packages(sub_account='MÃ_TIỂU_KHOẢN_CỦA_BẠN', asset_type='stock')
Trong đó:
sub_account
: là mã tiểu khoản trên tài khoản DNSE của bạn.asset_type
: nhậpstock
cho giao dịch cơ sở,derivative
cho giao dịch phái sinh.
Sức mua, sức bán
Lấy thông tin sức mua sức bán tối đa theo tiểu khoản, mã, giá và gói vay
client.trade_capacities(symbol='VIC', price=41600, sub_account='MÃ_TIỂU_KHOẢN_CỦA_BẠN', asset_type='stock', loan_package_id=None)
Trong đó:
symbol
: là tên mã cổ phiếu hoặc mã hợp đồng phái sinh, ví dụVN30F2311
price
: giá, đơn vị là đồng.sub_account
: là mã tiểu khoản của bạn sử dụng để giao dịch, lấy từ hàmsub_accounts
asset_type
: nhận một trong hai giá trị làstock
cho cổ phiếu hoặcderivative
cho phái sinh.loan_package_id
: mã gói vay, lấy từ danh sách gói vay áp dụng với tài khoản của bạn.
Đặt lệnh, sửa lệnh, hủy lệnh
Đặt lệnh
sub_account = "MÃ_TIỂU_KHOẢN_CỦA_BẠN" symbol = "VIC" side = "buy" quantity = 100 price = 41600 order_type = 'LO' loan_package_id = None # Thay thế với mã gói vay thực tế của bạn asset_type = 'stock' client.place_order(account, symbol, side, quantity, price, order_type, loan_package_id, asset_type)
hoặc sử dụng dạng rút gọn
client.place_order('MÃ_TIỂU_KHOẢN_CỦA_BẠN', 'VIC', 'buy', 500, 41600, 'LO', None, 'stock')
Trong đó:
sub_account
: là mã tiểu khoản của bạn sử dụng để giao dịch, lấy từ hàmsub_accounts
symbol
: là tên mã cổ phiếu hoặc mã hợp đồng phái sinh, ví dụVN30F2311
side
: loại lệnh muabuy
hay bánsell
quantity
: số lượng hợp đồng, cổ phiếu giao dịchprice
: giá, đơn vị là đồng.order_type
: Loại lệnh, sử dụng 1 trong các giá trịLO
,MP
,MTL
,ATO
,ATC
,MOK
,MAK
loan_package_id
: mã gói vay, lấy từ danh sách gói vay áp dụng với tài khoản của bạn.asset_type
: nhận một trong hai giá trị làstock
cho cổ phiếu hoặcderivative
cho phái sinh.
Sổ lệnh
Cho phép liệt kê các lệnh đã đặt trong sổ lệnh. Áp dụng cho cả giao dịch cơ sở và phái sinh.
Để liệt kê danh sách lệnh trong sổ lệnh, bạn sử dụng dòng lệnh sau đối với giao dịch cơ sở
client.order_list(sub_account='MÃ_TIỂU_KHOẢN_CỦA_BẠN', asset_type='stock')
hoặc sử dụng lệnh sau cho phái sinh
client.order_list(sub_account='MÃ_TIỂU_KHOẢN_CỦA_BẠN', asset_type='derivative')
Trong đó:
sub_account
: là mã tiểu khoản tương ứng cho giao dịch cơ sở/phái sinh cần tra cứuasset_type
: nhận giá trị làstock
cho giao dịch cơ sở, vàderivative
cho giao dịch phái sinh.
Chi tiết lệnh
Tra cứu thông tin chi tiết của một lệnh bất kỳ thuộc mã tiểu khoản của bạn. Áp dụng cho cả giao dịch cơ sở và phái sinh.
client.order_detail(order_id='MÃ_LỆNH_CỦA_BẠN', sub_account='MÃ_TIỂU_KHOẢN_CỦA_BẠN', asset_type='stock')
Trong đó:
order_id
: mã lệnh đặt, thông tin lấy từSổ lệnh
sub_account
: là mã tiểu khoản của bạn sử dụng để giao dịch, lấy từ hàmsub_accounts
asset_type
: nhận một trong hai giá trị làstock
cho cổ phiếu hoặcderivative
cho phái sinh.
Hủy lệnh
Cho phép hủy lệnh bất kỳ theo id từ một tiểu khoản của bạn. Áp dụng cho cả giao dịch cơ sở và phái sinh.
client.cancel_order (order_id='MÃ_LỆNH_CỦA_BẠN', sub_account='MÃ_TIỂU_KHOẢN_CỦA_BẠN', asset_type='stock')
Trong đó:
order_id
: mã lệnh đặt, thông tin lấy từSổ lệnh
sub_account
: là mã tiểu khoản của bạn sử dụng để giao dịch, lấy từ hàmsub_accounts
asset_type
: nhận một trong hai giá trị làstock
cho cổ phiếu hoặcderivative
cho phái sinh.
Deal nắm giữ
Trả về danh sách các deal bạn đang nắm giữ. Áp dụng cho cả giao dịch cơ sở và phái sinh.
client.deals_list (sub_account='MÃ_TIỂU_KHOẢN_CỦA_BẠN', asset_type='stock')
Trong đó:
sub_account
: là mã tiểu khoản của bạn sử dụng để giao dịch, lấy từ hàmsub_accounts
asset_type
: nhận một trong hai giá trị làstock
cho cổ phiếu hoặcderivative
cho phái sinh.
Thảo luận