Cấu trúc MqlTradeCheckResult
Trước khi gửi yêu cầu cho một hoạt động giao dịch đến máy chủ giao dịch, nên kiểm tra để đảm bảo rằng nó được hoàn thành mà không có lỗi chính thức. Việc kiểm tra được thực hiện bởi hàm OrderCheck
, mà chúng ta truyền yêu cầu trong cấu trúc MqlTradeRequest
và biến nhận thuộc kiểu cấu trúc MqlTradeCheckResult
.
Ngoài việc kiểm tra tính đúng đắn của yêu cầu, cấu trúc này cho phép đánh giá trạng thái tài khoản sau khi thực hiện một hoạt động giao dịch, đặc biệt là số dư, quỹ và ký quỹ.
struct MqlTradeCheckResult
{
uint retcode; // Mã phản hồi
double balance; // Số dư sau giao dịch
double equity; // Quỹ sau giao dịch
double profit; // Lợi nhuận thả nổi
double margin; // Yêu cầu ký quỹ
double margin_free; // Ký quỹ tự do
double margin_level; // Mức ký quỹ
string comment; // Bình luận về mã phản hồi (mô tả lỗi)
};
2
3
4
5
6
7
8
9
10
11
Bảng sau mô tả các trường:
Trường | Mô tả |
---|---|
retcode | Mã trả về giả định |
balance | Giá trị số dư sẽ được quan sát sau khi thực hiện hoạt động giao dịch |
equity | Giá trị quỹ riêng sẽ được quan sát sau khi thực hiện hoạt động giao dịch |
profit | Giá trị lợi nhuận thả nổi sẽ được quan sát sau khi thực hiện hoạt động giao dịch |
margin | Tổng ký quỹ bị khóa sau giao dịch |
margin_free | Khối lượng quỹ riêng tự do còn lại sau khi thực hiện hoạt động giao dịch |
margin_level | Mức ký quỹ sẽ được thiết lập sau khi thực hiện hoạt động giao dịch |
comment | Bình luận về mã phản hồi, mô tả lỗi |
Trong cấu trúc được điền bằng cách gọi OrderCheck
, trường retcode
sẽ chứa mã kết quả từ những mã mà nền tảng hỗ trợ để xử lý các yêu cầu giao dịch thực tế và đặt vào trường retcode
tương tự của cấu trúc MqlTradeResult
sau khi gọi các hàm giao dịch OrderSend
và OrderSendAsync
.
Các hằng số mã trả về được trình bày trong tài liệu MQL5. Để hiển thị chúng một cách trực quan hơn vào nhật ký khi gỡ lỗi Expert Advisors, liệt kê ứng dụng TRADE_RETCODE
đã được định nghĩa trong tệp TradeRetcode.mqh
. Tất cả các phần tử trong đó có định danh khớp với các hằng số tích hợp nhưng không có tiền tố chung "TRADE_RETCODE_". Ví dụ:
enum TRADE_RETCODE
{
OK_0 = 0, // không có hằng số tiêu chuẩn
REQUOTE = 10004, // TRADE_RETCODE_REQUOTE
REJECT = 10006, // TRADE_RETCODE_REJECT
CANCEL = 10007, // TRADE_RETCODE_CANCEL
PLACED = 10008, // TRADE_RETCODE_PLACED
DONE = 10009, // TRADE_RETCODE_DONE
DONE_PARTIAL = 10010, // TRADE_RETCODE_DONE_PARTIAL
ERROR = 10011, // TRADE_RETCODE_ERROR
TIMEOUT = 10012, // TRADE_RETCODE_TIMEOUT
INVALID = 10013, // TRADE_RETCODE_INVALID
INVALID_VOLUME = 10014, // TRADE_RETCODE_INVALID_VOLUME
INVALID_PRICE = 10015, // TRADE_RETCODE_INVALID_PRICE
INVALID_STOPS = 10016, // TRADE_RETCODE_INVALID_STOPS
TRADE_DISABLED = 10017, // TRADE_RETCODE_TRADE_DISABLED
MARKET_CLOSED = 10018, // TRADE_RETCODE_MARKET_CLOSED
...
};
#define TRCSTR(X) EnumToString((TRADE_RETCODE)(X))
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Vì vậy, việc sử dụng TRCSTR(r.retcode)
, trong đó r
là một cấu trúc, sẽ cung cấp mô tả tối thiểu về mã số.
Chúng ta sẽ xem xét một ví dụ về việc áp dụng macro và phân tích cấu trúc trong phần tiếp theo về hàm OrderCheck
.