Cài đặt ký quỹ tài khoản
Đối với các robot giao dịch, việc kiểm soát số tiền ký quỹ bị khóa và số tiền khả dụng để đảm bảo cho các giao dịch mới là rất quan trọng. Đặc biệt, nếu không có đủ tiền tự do, chương trình sẽ không thể thực hiện giao dịch. Khi duy trì các vị thế mở không sinh lời, trước tiên sẽ nhận được thông báo Margin Call, và nếu không được đáp ứng, các vị thế sẽ bị nhà môi giới buộc đóng (Stop Out). Tất cả các thuộc tính tài khoản liên quan được bao gồm trong liệt kê ENUM_ACCOUNT_INFO_DOUBLE
.
Định danh | Mô tả |
---|---|
ACCOUNT_MARGIN | Ký quỹ hiện tại được giữ lại trên tài khoản bằng đơn vị tiền tệ gửi |
ACCOUNT_MARGIN_FREE | Ký quỹ tự do hiện tại trên tài khoản bằng đơn vị tiền tệ gửi, khả dụng để mở vị thế |
ACCOUNT_MARGIN_LEVEL | Mức ký quỹ trên tài khoản tính theo phần trăm (vốn chủ sở hữu/ký quỹ*100) |
ACCOUNT_MARGIN_SO_CALL | Mức ký quỹ tối thiểu mà tại đó sẽ yêu cầu nạp thêm tiền vào tài khoản (Margin Call) |
ACCOUNT_MARGIN_SO_SO | Mức ký quỹ tối thiểu mà tại đó vị thế lỗ nhiều nhất sẽ bị buộc đóng (Stop Out) |
ACCOUNT_MARGIN_INITIAL | Số tiền được giữ lại trên tài khoản để cung cấp ký quỹ cho tất cả các lệnh chờ |
ACCOUNT_MARGIN_MAINTENANCE | Số tiền được giữ lại trên tài khoản để cung cấp ký quỹ tối thiểu yêu cầu cho tất cả các vị thế đang mở |
ACCOUNT_MARGIN_SO_CALL
và ACCOUNT_MARGIN_SO_SO
được biểu thị dưới dạng phần trăm hoặc đơn vị tiền tệ gửi tùy thuộc vào chế độ ACCOUNT_MARGIN_SO_MODE
đã đặt (xem thêm). Thuộc tính này, với khả năng đo ngưỡng ký quỹ cho Margin Call hoặc Stop Out, được bao gồm trong liệt kê ENUM_ACCOUNT_INFO_INTEGER
. Ngoài ra, tổng đòn bẩy (được sử dụng để tính toán ký quỹ cho một số loại công cụ nhất định) cũng được chỉ định ở đó.
Định danh | Mô tả |
---|---|
ACCOUNT_LEVERAGE | Số lượng đòn bẩy |
ACCOUNT_MARGIN_SO_MODE | Chế độ cài đặt mức ký quỹ tối thiểu cho phép từ liệt kê ENUM_ACCOUNT_STOPOUT_MODE |
Và đây là các phần tử của liệt kê ENUM_ACCOUNT_STOPOUT_MODE
.
Định danh | Mô tả |
---|---|
ACCOUNT_STOPOUT_MODE_PERCENT | Mức được đặt dưới dạng phần trăm |
ACCOUNT_STOPOUT_MODE_MONEY | Mức được đặt bằng đơn vị tiền tệ của tài khoản |
Ví dụ, đối với tùy chọn ACCOUNT_STOPOUT_MODE_PERCENT
, phần trăm được chỉ định (Margin Call hoặc Stop Out) nên được kiểm tra với tỷ lệ vốn chủ sở hữu so với giá trị của thuộc tính ACCOUNT_MARGIN
:
AccountInfoDouble(ACCOUNT_EQUITY) / AccountInfoDouble(ACCOUNT_MARGIN) * 100
> AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL)
2
Trong phần tiếp theo, bạn sẽ tìm thấy thêm chi tiết về thuộc tính ACCOUNT_EQUITY
và các chỉ số tài chính khác của tài khoản.
Tuy nhiên, mức ký quỹ hiện tại tính theo phần trăm đã được cung cấp trong thuộc tính ACCOUNT_MARGIN_LEVEL
. Điều này dễ dàng kiểm tra bằng tập lệnh AccountInfo.mq5
ghi lại tất cả các thuộc tính tài khoản, bao gồm cả những thuộc tính được liệt kê ở trên.
Chúng ta đã chạy tập lệnh này trong phần Xác định tài khoản. Tại thời điểm đó, một vị thế đã được mở (1 lot USDRUB, tương đương 100,000 USD), và các chỉ số tài chính như sau:
0 ACCOUNT_BALANCE=10000.00
1 ACCOUNT_CREDIT=0.00
2 ACCOUNT_PROFIT=-78.76
3 ACCOUNT_EQUITY=9921.24
4 ACCOUNT_MARGIN=1000.00
5 ACCOUNT_MARGIN_FREE=8921.24
6 ACCOUNT_MARGIN_LEVEL=992.12
7 ACCOUNT_MARGIN_SO_CALL=50.00
8 ACCOUNT_MARGIN_SO_SO=30.00
2
3
4
5
6
7
8
9
Với ký quỹ 1000.00 USD, dễ dàng kiểm tra rằng đòn bẩy của tài khoản, ACCOUNT_LEVERAGE
, thực sự là 100 (theo công thức tính ký quỹ cho Forex và tỷ lệ ký quỹ bằng 1.0). Số tiền ký quỹ không cần chuyển đổi theo tỷ giá hiện tại sang đơn vị tiền tệ của tài khoản, vì nó giống với đơn vị tiền tệ cơ bản của công cụ.
Để đạt được 992.12 trong ACCOUNT_MARGIN_LEVEL
, chỉ cần chia 9921.24 cho 1000.00 và nhân với 100%.
Sau đó, một vị thế 1 lot khác được mở, và báo giá đi theo hướng bất lợi, kết quả là tình hình thay đổi:
0 ACCOUNT_BALANCE=10000.00
1 ACCOUNT_CREDIT=0.00
2 ACCOUNT_PROFIT=-1486.07
3 ACCOUNT_EQUITY=8513.93
4 ACCOUNT_MARGIN=2000.00
5 ACCOUNT_MARGIN_FREE=6513.93
6 ACCOUNT_MARGIN_LEVEL=425.70
2
3
4
5
6
7
Chúng ta có thể thấy lỗ trong cột ACCOUNT_PROFIT
và sự giảm tương ứng trong vốn chủ sở hữu ACCOUNT_EQUITY
. Ký quỹ ACCOUNT_MARGIN
tăng tỷ lệ từ 1000 lên 2000, ký quỹ tự do và mức ký quỹ giảm (nhưng vẫn còn xa các giới hạn 50% và 30%). Một lần nữa, mức 425.70 thu được từ kết quả tính toán biểu thức 8513.93 / 2000.00 * 100.
Thực tế hơn khi sử dụng công thức này để tính toán mức ký quỹ tương lai trước khi mở một vị thế mới. Trong trường hợp này, cần tăng số tiền ký quỹ hiện tại lên bằng ký quỹ bổ sung của X
. Ngoài ra, nếu một giao dịch vào thị trường liên quan đến việc khấu trừ hoa hồng tức thì C
, thì nghiêm ngặt mà nói, nó cũng nên được tính đến (mặc dù thường nó có kích thước nhỏ hơn đáng kể so với ký quỹ và có thể bỏ qua, cộng thêm API không cung cấp cách để biết hoa hồng trước khi thực hiện giao dịch: nó chỉ có thể được ước lượng bởi hoa hồng của các giao dịch đã hoàn thành trong lịch sử giao dịch).
(AccountInfoDouble(ACCOUNT_EQUITY) - C) / (AccountInfoDouble(ACCOUNT_MARGIN) + X) * 100
> AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL)
2
Sau này chúng ta sẽ tìm hiểu cách lấy giá trị X
bằng hàm OrderCalcMargin
, nhưng ngoài ra, có thể cần điều chỉnh theo các quy tắc được công bố trong phần Yêu cầu Ký quỹ, đặc biệt, tính đến khả năng phòng ngừa vị thế, chiết khấu, và điều chỉnh ký quỹ.
Đối với tùy chọn đặt giới hạn ký quỹ bằng tiền (ACCOUNT_STOPOUT_MODE_MONEY
), việc kiểm tra đủ tiền phải khác.
AccountInfoDouble(ACCOUNT_EQUITY) > AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL)
Ở đây hoa hồng được bỏ qua. Lưu ý rằng ký quỹ X
cho một vị thế mới đang được chuẩn bị mở 'bây giờ' không ảnh hưởng đến việc đánh giá ký quỹ 'tương lai' theo bất kỳ cách nào.
Tuy nhiên, trong bất kỳ trường hợp nào, không nên tải số tiền gửi quá nhiều đến mức các bất đẳng thức chỉ vừa được đáp ứng. Các giá trị của ACCOUNT_MARGIN_SO_CALL
và ACCOUNT_MARGIN_SO_SO
khá gần nhau, và mặc dù ký quỹ ở mức ACCOUNT_MARGIN_SO_CALL
chỉ là cảnh báo cho nhà giao dịch, việc bị đóng buộc rất dễ xảy ra. Đó là lý do tại sao các công thức sử dụng thuộc tính ACCOUNT_MARGIN_SO_CALL
.