Как получить программно "Процент маржи"

 

В окне терминала "Спецификации контракта" есть пункт "Процент маржи". По идее он должен возвращаться функцией SymbolInfoDouble(), но среди ее спецификаторов я не нашел значения, которое позволяет узнать этот "Процент маржи". Как его можно получить программно?


 
А что он означает, этот процент маржи?
 
Alexey Viktorov:
А что он означает, этот процент маржи?
Он используется в расчете залога по CFD. См. описание ENUM_SYMBOL_CALC_MODE.
 

Извини за неполный вопрос, надо было сразу спросить более развёрнуто.

А цель какая преследуется? Проверить как правильно\неправильно рассчитывается маржа? Если нет, то из той формулы в описании можно высчитать. А дальше что с этим делать?

 
Alexey Viktorov:

Извини за неполный вопрос, надо было сразу спросить более развёрнуто.

А цель какая преследуется? Проверить как правильно\неправильно рассчитывается маржа?

Целей, при соответствующей фантазии, можно придумать много. :) И совершенно не для проверки на "правильно\неправильно".

Если нет, то из той формулы в описании можно высчитать.

Ну и как? Для нее, как раз, и нужен этот самый "Процент маржи". Предлагаешь руками вбивать?:) Код должен иметь возможность получить его программно.

А дальше что с этим делать?

Сейчас вопрос стоит так - получить программно значение "Процент маржи". Раз в таблице оно есть - значит и должна быть возможность получить его программным путем. А что дальше делать - это уже отдельный вопрос, который к данной теме не относится.
 

посмотрите SymbolInfoDouble

SymbolInfoDouble(symbol, SYMBOL_MARGIN_INITIAL);
SymbolInfoDouble(symbol, SYMBOL_MARGIN_MAINTENANCE);
 
Taras Slobodyanik:

посмотрите SymbolInfoDouble


К сожалению, не то. В МТ4 эти значения, чаще всего, нулевые.
 

так устроит?

double procentMgn;
procentMgn=AccountBalance()*100/MarketInfo("GOLD",MODE_MARGINREQUIRED);
 
Renat Akhtyamov:

так устроит?

Нет, не устроит.

1. Функция MarketInfo() является устаревшей.

2. MODE_MARGINREQUIRED возвращает правильный результат только для длинных поз, для коротких брешет.

3. MODE_MARGINREQUIRED возвращает результат уже в валюте депо, что мне не нужно.

4. Мне не нужен процент от депо. Мне нужно просто значение параметра "Процент маржи" для символа. А посчитать то что нужно я и сам могу.

 
ir0407:

Нет, не устроит.

1. Функция MarketInfo() является устаревшей.

2. MODE_MARGINREQUIRED возвращает правильный результат только для длинных поз, для коротких брешет.

3. MODE_MARGINREQUIRED возвращает результат уже в валюте депо, что мне не нужно.

4. Мне не нужен процент от депо. Мне нужно просто значение параметра "Процент маржи" для символа. А посчитать то что нужно я и сам могу.

если нужно на МТ5, то Вам в другой раздел форума.

не удивили Вы общеизвестными познаниями, точнее хуже:

1. вообще то не функция MarketInfo() , а выражение, результатом вычисления которого будут проценты

2. у Вас нет как минимум 4-х знаков после запятой, поэтому маржа в % для длинных и коротких получится одной и той же.

3. просто умножьте

procentMgn

на 0,01 и будет Вам счастье.

 
ir0407:

Целей, при соответствующей фантазии, можно придумать много. :) И совершенно не для проверки на "правильно\неправильно".

Ну и как? Для нее, как раз, и нужен этот самый "Процент маржи". Предлагаешь руками вбивать?:) Код должен иметь возможность получить его программно.

Сейчас вопрос стоит так - получить программно значение "Процент маржи". Раз в таблице оно есть - значит и должна быть возможность получить его программным путем. А что дальше делать - это уже отдельный вопрос, который к данной теме не относится.

Ну да... фантазия это наше всё... только не понятно почему люди пытающиеся тебе помочь должны фантазировать о том, что нафантазировал себе ты? Ну да ладно, вопрос не в этом.

Как из той формулы получить требуемое:

Сама формула - Margin = Lots *ContractSize*MarketPrice*Percentage/100

Отсюда Percentage = Margin/(Lots *ContractSize*MarketPrice/100)

ir0407:

1. Функция MarketInfo() является устаревшей.

Пока в списке устаревших функций такая не числится. Вот она и выдаёт недостающее значение для определения процента маржи.

MarketInfo(_Symbol, MODE_MARGINREQUIRED);

Получив все данные на текущий момент, при текущей цене, легко пересчитать маржу которая удержана при открытии ордера, по цене открытия ордера.

Если надо для mql5 то надо использовать

bool  SymbolInfoMarginRate( 
   string             name,                     // символ 
   ENUM_ORDER_TYPE    order_type,               // тип ордера 
   double&            initial_margin_rate,      // коэффициент взимания начальной маржи 
   double&            maintenance_margin_rate   // коэффициент взимания поддерживающей маржи 
   );
Устаревшие функции - Справочник MQL4
Устаревшие функции - Справочник MQL4
  • docs.mql4.com
Устаревшие функции - Справочник MQL4