Kết quả gửi yêu cầu: Cấu trúc MqlTradeResult
Để đáp lại một yêu cầu giao dịch được thực hiện bởi các hàm OrderSend
hoặc OrderSendAsync
, mà chúng ta sẽ đề cập trong phần tiếp theo, máy chủ trả về kết quả xử lý yêu cầu. Để phục vụ mục đích này, một cấu trúc định nghĩa trước đặc biệt được sử dụng là MqlTradeResult
.
struct MqlTradeResult
{
uint retcode; // Mã kết quả hoạt động
ulong deal; // Vé giao dịch, nếu nó được hoàn thành
ulong order; // Vé lệnh, nếu nó được đặt
double volume; // Khối lượng giao dịch được nhà môi giới xác nhận
double price; // Giá giao dịch được nhà môi giới xác nhận
double bid; // Giá bid hiện tại trên thị trường
double ask; // Giá ask hiện tại trên thị trường
string comment; // Bình luận của nhà môi giới về hoạt động
uint request_id; // Định danh yêu cầu, được terminal đặt khi gửi
uint retcode_external; // Mã phản hồi của hệ thống giao dịch bên ngoài
};
2
3
4
5
6
7
8
9
10
11
12
13
Bảng sau mô tả các trường của nó.
Trường | Mô tả |
---|---|
retcode | Mã trả về của máy chủ giao dịch |
deal | Vé giao dịch nếu nó được thực hiện (trong hoạt động giao dịch TRADE_ACTION_DEAL ) |
order | Vé lệnh nếu nó được đặt (trong hoạt động giao dịch TRADE_ACTION_PENDING ) |
volume | Khối lượng giao dịch được nhà môi giới xác nhận (phụ thuộc vào chế độ thực hiện lệnh) |
price | Giá trong giao dịch được nhà môi giới xác nhận (phụ thuộc vào trường deviation trong yêu cầu giao dịch, chế độ thực hiện và hoạt động giao dịch) |
bid | Giá bid hiện tại trên thị trường |
ask | Giá ask hiện tại trên thị trường |
comment | Bình luận của nhà môi giới về giao dịch (mặc định, nó được điền bằng giải mã mã trả về của máy chủ giao dịch) |
request_id | ID yêu cầu được terminal đặt khi gửi đến máy chủ giao dịch |
retcode_external | Mã lỗi được trả về bởi hệ thống giao dịch bên ngoài |
Như chúng ta sẽ thấy bên dưới khi thực hiện các hoạt động giao dịch, một biến kiểu MqlTradeResult
được truyền làm tham số thứ hai theo tham chiếu trong hàm OrderSend
hoặc OrderSendAsync
. Nó trả về kết quả.
Khi gửi một yêu cầu giao dịch đến máy chủ, terminal đặt định danh request_id
thành một giá trị duy nhất. Điều này cần thiết để phân tích các sự kiện giao dịch tiếp theo, điều này là bắt buộc nếu sử dụng hàm không đồng bộ OrderSendAsync
. Định danh này cho phép liên kết yêu cầu đã gửi với kết quả xử lý của nó được truyền đến trình xử lý sự kiện OnTradeTransaction
.
Sự hiện diện và loại lỗi trong trường retcode_external
phụ thuộc vào nhà môi giới và hệ thống giao dịch bên ngoài mà các hoạt động giao dịch được chuyển tiếp đến.
Kết quả yêu cầu được phân tích theo các cách khác nhau, tùy thuộc vào hoạt động giao dịch và cách chúng được gửi. Chúng ta sẽ xử lý điều này trong các phần tiếp theo về các hành động cụ thể: mua và bán trên thị trường, đặt và xóa lệnh chờ, và sửa đổi cũng như đóng vị thế.