Chế độ thực hiện lệnh theo giá và khối lượng
Khi gửi yêu cầu giao dịch, chúng ta sẽ cần chỉ định giá mua/bán và khối lượng trong thuật toán theo cách đặc biệt. Đồng thời, cần lưu ý rằng trong thị trường tài chính không có gì đảm bảo rằng tại thời điểm đó toàn bộ khối lượng yêu cầu có sẵn cho công cụ tài chính ở mức giá mong muốn. Do đó, các hoạt động giao dịch được điều chỉnh bởi các chế độ thực hiện theo giá và khối lượng (hoặc chính sách). Chúng xác định các quy tắc cho các trường hợp khi giá thay đổi trong quá trình gửi yêu cầu, hoặc không thể đáp ứng đầy đủ.
Trong chương về ký hiệu, ở phần Điều kiện giao dịch và chế độ thực hiện lệnh, chúng ta đã thảo luận về cài đặt thực hiện lệnh theo giá (SYMBOL_TRADE_EXEMODE
) và điền lệnh theo khối lượng (SYMBOL_FILLING_MODE
), được thiết lập bởi nhà môi giới. Theo các chế độ SYMBOL_FILLING_MODE
có sẵn, chương trình MQL phải chọn chế độ điền cho lệnh mới được hình thành trong một cấu trúc đặc biệt MqlTradeRequest
(chúng ta sẽ sớm thấy điều này trong thực tế).
Các phiên bản được cung cấp trong liệt kê ENUM_ORDER_TYPE_FILLING
: các định danh của chúng tương ứng với những định danh của SYMBOL_FILLING_MODE
.
Chính sách thực hiện (Giá trị) | Mô tả |
---|---|
ORDER_FILLING_FOK (0) | Fill or Kill |
ORDER_FILLING_IOC (1) | Immediate or Cancel |
ORDER_FILLING_RETURN (2) | Return |
Với chính sách ORDER_FILLING_FOK
, một lệnh chỉ có thể được điền ở khối lượng đã chỉ định. Nếu không có đủ khối lượng của công cụ tài chính trên thị trường tại thời điểm đó, lệnh sẽ không được thực hiện. Khối lượng yêu cầu có thể được tổng hợp từ nhiều chào giá hiện có trên thị trường. Khả năng sử dụng lệnh FOK được xác định bởi sự hiện diện của quyền SYMBOL_FILLING_FOK
.
Với chính sách ORDER_FILLING_IOC
, nhà giao dịch đồng ý thực hiện giao dịch với khối lượng tối đa có sẵn trên thị trường trong giới hạn được chỉ định trong lệnh. Nếu không thể phủ đầy đủ, lệnh sẽ được thực hiện trên khối lượng có sẵn, và khối lượng còn thiếu sẽ bị hủy. Khả năng sử dụng lệnh IOC được xác định bởi sự hiện diện của quyền SYMBOL_FILLING_IOC
.
Với chính sách ORDER_FILLING_RETURN
, trong trường hợp thực hiện một phần, lệnh với khối lượng còn lại không bị hủy mà tiếp tục hoạt động. Đây là chế độ mặc định và luôn có sẵn. Tuy nhiên, có một ngoại lệ: Lệnh Return không được phép trong chế độ thực hiện thị trường (SYMBOL_TRADE_EXECUTION_MARKET
trong thuộc tính ký hiệu SYMBOL_TRADE_EXEMODE
).
Do đó, trước khi gửi một lệnh thị trường (không phải lệnh chờ), chương trình MQL nên đặt chính xác một trong các chính sách ORDER_TYPE_FILLING
dựa trên thuộc tính SYMBOL_FILLING_MODE
của công cụ tài chính tương ứng: thuộc tính này chứa tổ hợp các cờ bit của các chế độ được phép.
Đối với các lệnh chờ, bất kể chế độ thực hiện SYMBOL_TRADE_EXEMODE
, bạn phải sử dụng chính sách ORDER_FILLING_RETURN
, vì các lệnh như vậy sẽ được điền khối lượng sau này và theo các quy tắc mà nhà môi giới đặt ra tại thời điểm đó.
Không giống như chính sách điền khối lượng, chế độ thực hiện lệnh theo giá không thể được chọn vì nó đã được nhà môi giới xác định trước cho mỗi ký hiệu. Điều này ảnh hưởng đến các trường nào của cấu trúc
MqlTradeRequest
cần được điền trước khi gửi yêu cầu giao dịch.
Việc áp dụng các chính sách điền tùy thuộc vào các chế độ thực hiện có thể được biểu diễn dưới dạng bảng ('+' — được phép, '-' — bị vô hiệu hóa, '±' — phụ thuộc vào cài đặt ký hiệu):
Chính sách điền \ Chế độ thực hiện | ORDER_FILLING_FOK | ORDER_FILLING_IOC | ORDER_FILLING_RETURN |
---|---|---|---|
SYMBOL_TRADE_EXECUTION_INSTANT | + | + | + |
SYMBOL_TRADE_EXECUTION_REQUEST | + | + | + |
SYMBOL_TRADE_EXECUTION_MARKET | ± | ± | - |
SYMBOL_TRADE_EXECUTION_EXCHANGE | ± | ± | + |
Pending | - | - | + |
Trong các chế độ thực hiện SYMBOL_TRADE_EXECUTION_INSTANT
và SYMBOL_TRADE_EXECUTION_REQUEST
, tất cả các chính sách điền khối lượng đều được phép.