Информация о счете
Для получения информации о текущем счете предназначены функции AccountInfoInteger(), AccountInfoDouble() и AccountInfoString(). В качестве параметра эти функции принимают значения из соответствующих перечислений ENUM_ACCOUNT_INFO.
Для функции AccountInfoInteger()
ENUM_ACCOUNT_INFO_INTEGER
|
|
|
ACCOUNT_LOGIN
|
Номер счета
|
long
|
ACCOUNT_TRADE_MODE
|
Тип торгового счета
|
ENUM_ACCOUNT_TRADE_MODE
|
ACCOUNT_LEVERAGE
|
Размер предоставленного плеча
|
long
|
ACCOUNT_LIMIT_ORDERS
|
Максимально допустимое количество открытых позиций и действующих отложенных ордеров (суммарно), 0 — ограничений нет
|
int
|
ACCOUNT_MARGIN_SO_MODE
|
Режим задания минимально допустимого уровня залоговых средств
|
ENUM_ACCOUNT_STOPOUT_MODE
|
ACCOUNT_TRADE_ALLOWED
|
Разрешенность торговли для текущего счета
|
bool
|
ACCOUNT_TRADE_EXPERT
|
Разрешенность торговли для эксперта
|
bool
|
Для функции AccountInfoDouble()
ENUM_ACCOUNT_INFO_DOUBLE
|
|
|
ACCOUNT_BALANCE
|
Баланс счета в валюте депозита
|
double
|
ACCOUNT_CREDIT
|
Размер предоставленного кредита в валюте депозита
|
double
|
ACCOUNT_PROFIT
|
Размер текущей прибыли на счете в валюте депозита
|
double
|
ACCOUNT_EQUITY
|
Значение собственных средств на счете в валюте депозита
|
double
|
ACCOUNT_MARGIN
|
Размер зарезервированных залоговых средств на счете в валюте депозита
|
double
|
ACCOUNT_MARGIN_FREE
|
Размер свободных средств на счете в валюте депозита, доступных для открытия ордера
|
double
|
ACCOUNT_MARGIN_LEVEL
|
Уровень залоговых средств на счете в процентах
|
double
|
ACCOUNT_MARGIN_SO_CALL
|
Уровень залоговых средств, при котором требуется пополнение счета (Margin Call). В зависимости от установленного ACCOUNT_MARGIN_SO_MODE выражается в процентах либо в валюте депозита
|
double
|
ACCOUNT_MARGIN_SO_SO
|
Уровень залоговых средств, при достижении которого происходит принудительное закрытие самого убыточного ордера (Stop Out). В зависимости от установленного ACCOUNT_MARGIN_SO_MODE выражается в процентах либо в валюте депозита
|
double
|
ACCOUNT_MARGIN_INITIAL
|
Не поддерживается
|
double
|
ACCOUNT_MARGIN_MAINTENANCE
|
Не поддерживается
|
double
|
ACCOUNT_ASSETS
|
Не поддерживается
|
double
|
ACCOUNT_LIABILITIES
|
Не поддерживается
|
double
|
ACCOUNT_COMMISSION_BLOCKED
|
Не поддерживается
|
double
|
Для функции AccountInfoString()
ENUM_ACCOUNT_INFO_STRING
|
|
|
ACCOUNT_NAME
|
Имя клиента
|
string
|
ACCOUNT_SERVER
|
Имя торгового сервера
|
string
|
ACCOUNT_CURRENCY
|
Валюта депозита
|
string
|
ACCOUNT_COMPANY
|
Имя компании, обслуживающей счет
|
string
|
Существует несколько видов счетов, которые могут быть открыты на торговом сервере. Для того чтобы узнать тип счета, на котором работает MQL4-программа, предназначено перечисление ENUM_ACCOUNT_TRADE_MODE.
ENUM_ACCOUNT_TRADE_MODE
|
|
ACCOUNT_TRADE_MODE_DEMO
|
Демонстрационный торговый счет
|
ACCOUNT_TRADE_MODE_CONTEST
|
Конкурсный торговый счет
|
ACCOUNT_TRADE_MODE_REAL
|
Реальный торговый счет
|
При нехватке собственных средств для поддержания открытых ордеров возникает ситуация принудительного закрытия Stop Out. Минимальный уровень маржи, при котором наступает Stop Out, может задаваться в процентах или в денежном выражении. Узнать какой режим задан для данного счета можно с помощью перечисления ENUM_ACCOUNT_STOPOUT_MODE.
ENUM_ACCOUNT_STOPOUT_MODE
|
|
ACCOUNT_STOPOUT_MODE_PERCENT
|
Уровень задается в процентах
|
ACCOUNT_STOPOUT_MODE_MONEY
|
Уровень задается в деньгах
|
Пример скрипта, выводящего краткую информацию о счете.
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- имя компании
string company=AccountInfoString(ACCOUNT_COMPANY);
//--- имя клиента
string name=AccountInfoString(ACCOUNT_NAME);
//--- номер счета
long login=AccountInfoInteger(ACCOUNT_LOGIN);
//--- имя сервера
string server=AccountInfoString(ACCOUNT_SERVER);
//--- валюта счета
string currency=AccountInfoString(ACCOUNT_CURRENCY);
//--- демо, конкурсный или реальный счет
ENUM_ACCOUNT_TRADE_MODE account_type=(ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE);
//--- теперь превратим значение перечисления в понятный вид
string trade_mode;
switch(account_type)
{
case ACCOUNT_TRADE_MODE_DEMO:
trade_mode="demo";
break;
case ACCOUNT_TRADE_MODE_CONTEST:
trade_mode="конкурсный";
break;
default:
trade_mode="реальный";
break;
}
//--- в процентах или в денежном выражении задается уровень Stop Out
ENUM_ACCOUNT_STOPOUT_MODE stop_out_mode=(ENUM_ACCOUNT_STOPOUT_MODE)AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE);
//--- получим значения уровней, при которых наступает Margin Call и Stop Out
double margin_call=AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL);
double stop_out=AccountInfoDouble(ACCOUNT_MARGIN_SO_SO);
//--- выведем краткую информацию по счету
PrintFormat("Счет клиента '%s' #%d %s открыт в '%s' на сервере '%s'",
name,login,trade_mode,company,server);
PrintFormat("Валюта счета - %s, уровень MarginCall и StopOut задается в %s",
currency,(stop_out_mode==ACCOUNT_STOPOUT_MODE_PERCENT)?"процентах":" в деньгах");
PrintFormat("Уровень MarginCall=%G, уровень StopOut=%G",margin_call,stop_out);
} |
|