AccountStopout.. : опубликуйте пожалуста более подробную документацию

 
(прошу заранее извинить за полу-грамотное писание - у меня клавиатура не руская а болгарская и руский я тоже подзабьл так как в России не жил с трехлетнего возраста...)

дорогие MQL,

опубликуйте пожалуста более подробную документацию на функции AccountStopoutLevel и AccountStopoutMode

поиск AccountStopout в mql.com дает 4 результата 2 из которьх описание добавлений в билдах 199 и 200 (что кстати тоже странно - где же они добавлен бьли: в 199 или в 200? Одно из двух следует наверное убрать, я так думаю?).

Остальнье 2 находки - документация на обе функции, но довольно таки постная. Не уточнено, например:
1. возвращаемая стоймость от AccountStopoutLevel является последней стоймостью которая не влечет за собой margin call или первой стоймостю чие достижение влечет за собой margin call?
2. Примерь абсолютно не помогают разобратся как функции работают. Подходящими примерами бьли бь примерь показьвающие состояние аккаунта во время възова функций и обясняющие какие стоймости функции в етом случае должнъ возвращать.
3. в хелпе AccountStopoutLevel что подразумевается под "средствами" (см. 3-4 строки ниже) ?

Вот еще и конкретнъй вопрос о том как понимать стоймости функции AccountStopoutLevel. AccountStopoutMode мне вьдает 0. т.е., как написано в документации:
"0 - расчет процентного соотношения свободной маржи к средствам;"

Ок. Соотношение свободной маржи к средствам я понимаю в смьсле что
AccountFreeMargin / AccountEquity == AccountStopoutLevel / 100
или на худой конец, (посклольку не совсем ясно что подразумевается под средствами?) может бъть :
AccountFreeMargin / AccounтBalance == AccountStopoutLevel / 100

Вся ето математика однако не складъвается с моим конкретнъм случаем где я, пътаясь разобратся с етими функциями възвал их из експерта запущенного на абсолютно девственном демо-аккаунте размером в 10,000 USD.

AccountStopoutLevel мне въдал 99.

Как ето понимать?

( AccountFreeMargin / AccountEquity ) должно бьть близким к единице (99%) иначе меня вькинет из трейда ???

Но ето же явно не так - иначе никто не мог бь торговать большим чем 1% от своего аккаунта. А у меня и експертъ работают на 5, 10 , 15 %. Да и в ручную можно открът трейд на гораздо больше чем 1% от аккаунта...

Пожалуйста разясните новичку в чем здесь загвоздка... Експерта прикрепил...

И вообще - в документации полно страничек где обяснение работъ функции сводитсиа к повторению ее названия, а пример - к одной строке възова функции. Ето ничем не помогает разобратся в работе функции. Особено функции Accont* и все вариации MarketInfo должнь бъть обяснень очень тщательно так как с ними труднее всего разобратся методом написания простого примера. К примеру - большинство Order* функций и особенно OrderSend разяснень очень хорошо - пожалуста улучшите и документацию на другие функции тоже.

Спасибо.
Файлы:
 
Вот простой скрипт, набросьте его на счет с открытыми позициями.

//+------------------------------------------------------------------+
//|                                        CheckAccountFunctions.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   string MarginLevel;
   string CommentString=StringConcatenate("Account Number = ",AccountNumber(),"n");
   CommentString=StringConcatenate(CommentString,"AccountCurrency=",AccountCurrency(),"n");
   CommentString=StringConcatenate(CommentString,"AccountCompany=",AccountCompany(),"n");
   CommentString=StringConcatenate(CommentString,"AccountName=",AccountName(),"n");
   CommentString=StringConcatenate(CommentString,"AccountServer=",AccountServer(),"n");
   CommentString=StringConcatenate(CommentString,"AccountStopoutLevel=",AccountStopoutLevel(),"n");
   CommentString=StringConcatenate(CommentString,"AccountStopoutMode=",AccountStopoutMode(),"n");
   CommentString=StringConcatenate(CommentString,"AccountBalance()=",AccountBalance(),"n");
   CommentString=StringConcatenate(CommentString,"AccountMargin=",AccountMargin(),"n");
   CommentString=StringConcatenate(CommentString,"AccountEquity=",AccountEquity(),"n");
   
   if (AccountMargin()>0) MarginLevel=StringConcatenate("MarginLevel=",DoubleToStr(AccountEquity()/AccountMargin()*100,2),"% ");
   else MarginLevel="MarginLevel=N/A";
 
   CommentString=StringConcatenate(CommentString,MarginLevel);
   Comment(CommentString);
//----
   return(0);
  }
//+------------------------------------------------------------------+

Вот пример выполнения скрипта с объясняющими пометками




Надеюсь, этот пример все объясняет.
В данном случае на сервере MetaQuotes-Demo стоит уровень Stop Out =30 %, то есть, как только отношение Equity (AccountEquity - средства) к задействованной марже (AccountMargin) опустится к 30% - произойдет Stop Out (принудительное закрытие позиций). Среди трейдеров на форексе произошло замещение понятия Sopt Out понятием Margin Call. На самом деле Margin Call означает требование о пополнении торгового счета для поддержания текущей уровня Margin на приемлемом уровне. То есть, это предупреждение трейдеру о том, что уровень MarginLevel приблизился к опасной черте и в случае непополнения торгового счета наступит Stop Out.
 
Забыл расписать чему равен Profit в верхнем выражении на рисунке, поэтому сделал новый в дополнение к старому.

 

Здравствуйте, Rosh.

В дополнение к сказанному. Всё вы красиво обЪяснили и показали. Я давно пользуюсь скриптом для получения информации по инструментам, на разных площадках и новых инструментах, это удобнее, чем лезть в параметры символа или на сайт компании. Правда, организовал вывод в отдельном окне, а не в Comment, так более читабельно и можно открыть несколько окон для разных инструментов или рахных компаний и сравнить.
Но вот понадобилось добавить параметры MARGININIT, MARGINMAINTENANCE, MARGINHEDGED и MARGINREQUIRED, хотя бы, чтобы уяснить их смысл. Так вот, правильно отображается только MARGINREQUIRED, по двум первым - нули, по третьему какая-то нереальная цифра.

В чём тут дело ? Я неверно вывожу или эти параметры просто не задействованы на сервере. На разных серверах и на демо, реал - одинаково.

Файлы:
 
Начнем с последних.

MODE_MARGINHEDGED
- показывает коэфиициент расчета маржи для хеджированных (hedge) позиций. Говоря по другому - для позиций в локе (lock).
Например, в данный момент размер маржи для 1 лота по EURUSD (курс 1.3000) составляет 1000 EUR или $ 1300 ( валюта депозита [base currency] - доллар США ). Наш депозит равен $10'000 . Открываем Buy 1.0 lot at 1.3000.
Баланс равен по прежнему $10'000 , маржа [AccountMargin] равна $1300 , Equity[AccountEquity] равно $9'970 (спред 3 пункта [Point] , поэтому убыток[AccountProfit] = 3 Point x $10 [MarketInfo( Symbol(),MODE_TICKVALUE)]).
Размер свободных средств[AccountFreeMargin] равен Эквити - Маржа.

Пусть MODE_MARGINHEDGED равно 0.4 . Это означает, что для позиций открытых во взаимных направлениях (перекрытых ) применяется коэффициент 0.4 для вычисления маржи полностью перекрытых позиций. То есть, стоимость маржи для EURUSD для перекрытой позиции (hedged) составляет не 1000 EUR , а 0.4 * 1000 EUR = 400 EUR. Если мы откроем еще одну позицию по EURUSD в продажу равным объемом 1.0 лот, то стоимость маржи теперь составит:
400 EUR для позиции BUY (EURUSD 1.0 lot at 1.3000) или 0.4*$1300 плюс 400 EUR для позиции SELL (EURUSD 1.0 lot at 1.2997) или 0.4*$1297 .
Итого: была задествованная на счету маржа в $1300 , стала 0.4*($1300 + $1297)= $1038.8
Скрипт для иллюстрации этого явления я выкладывал на англоязычном форуме - 'A couple questions from BugReport'
 
MARGINREQUIRED

Эту функцию я описывал в статье Азбука торговли валютами

Цитирую

Размер маржи на один лот


Последняя рассматриваемая функция
MarketInfo( Symbol(), MODE_MARGINREQUIRED);

возвращает размер свободных средств, необходимых для открытия одного лота на покупку, то есть стоимость одного стандартного лота по цене Ask.
 
По поводу первых двух параметров MARGININIT и MARGINMAINTENANCE - они используются для фьючерсов. Историю их появления можно увидеть в анонсах:
'Выпущен новый клиентский терминал MetaTrader 4 build 199'
'Анонс: что нового в MQL4 в следующем билде 199'
https://www.mql5.com/ru/forum/51438

Другими словами, маржа необходимая для открытия 1 лота по фьючерсу не всегда равна текущей марже(средства, отвлекаемые на обеспечение позиции) по этому же фьючерсу. Размер залоговых средств под открытую сделку (margin) может меняться во времени.
Причина обращения: