Tỷ lệ ký quỹ biểu tượng
Trong số các đặc điểm của thông số biểu tượng có sẵn trong API MQL5, mà chúng ta sẽ thảo luận chi tiết trong các phần sau, có một số đặc điểm liên quan đến yêu cầu ký quỹ, được áp dụng khi mở và duy trì các vị thế giao dịch. Do thực tế rằng terminal cung cấp giao dịch trên các thị trường khác nhau và các loại công cụ khác nhau, các yêu cầu này có thể thay đổi đáng kể. Ở dạng tổng quát, điều này được thể hiện qua việc áp dụng các tỷ lệ điều chỉnh ký quỹ được thiết lập riêng cho từng biểu tượng và các loại hoạt động giao dịch khác nhau. Đối với người dùng, các tỷ lệ này được hiển thị trong terminal ở cửa sổ Specifications
.
Như chúng ta sẽ thấy dưới đây, hệ số nhân (nếu được áp dụng) sẽ được nhân với giá trị ký quỹ từ thuộc tính biểu tượng. Tỷ lệ ký quỹ có thể được lấy bằng lập trình sử dụng hàm SymbolInfoMarginRate
.
bool SymbolInfoMarginRate(const string symbol, ENUM_ORDER_TYPE orderType, double &initial, double &maintenance)
Đối với biểu tượng và loại lệnh được chỉ định (ENUM_ORDER_TYPE
), hàm này điền vào các tham số được truyền bằng tham chiếu là initial
và maintenance
với tỷ lệ ký quỹ ban đầu và duy trì tương ứng. Các tỷ lệ kết quả nên được nhân với giá trị ký quỹ của loại tương ứng (cách yêu cầu được mô tả trong phần về yêu cầu ký quỹ) để có được số tiền sẽ được dự trữ trong tài khoản khi đặt một lệnh như orderType
.
Hàm trả về true
trong trường hợp thực thi thành công.
Hãy sử dụng một kịch bản đơn giản làm ví dụ là SymbolMarginRate.mq5
, kịch bản này xuất tỷ lệ ký quỹ cho Market Watch
hoặc tất cả các biểu tượng có sẵn, tùy thuộc vào tham số MarketWatchOnly
. Loại hoạt động có thể được chỉ định trong tham số OrderType
.
#include <MQL5Book/MqlError.mqh>
input bool MarketWatchOnly = true;
input ENUM_ORDER_TYPE OrderType = ORDER_TYPE_BUY;
void OnStart()
{
const int n = SymbolsTotal(MarketWatchOnly);
PrintFormat("Margin rates per symbol for %s:", EnumToString(OrderType));
for(int i = 0; i < n; ++i)
{
const string s = SymbolName(i, MarketWatchOnly);
double initial = 1.0, maintenance = 1.0;
if(!SymbolInfoMarginRate(s, OrderType, initial, maintenance))
{
PrintFormat("Error: %s(%d)", E2S(_LastError), _LastError);
}
PrintFormat("%4d %s = %f %f", i, s, initial, maintenance);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dưới đây là nhật ký.
Margin rates per symbol for ORDER_TYPE_BUY:
0 EURUSD = 1.000000 0.000000
1 XAUUSD = 1.000000 0.000000
2 BTCUSD = 0.330000 0.330000
3 USDCHF = 1.000000 0.000000
4 USDJPY = 1.000000 0.000000
5 AUDUSD = 1.000000 0.000000
6 USDRUB = 1.000000 1.000000
2
3
4
5
6
7
8
Bạn có thể so sánh các giá trị nhận được với thông số biểu tượng trong terminal.