Процент маржи

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
mql_writer2
58
mql_writer2  

Терминал МТ4 1170.


В спецификации символа 'Процент маржи' равен 100%, пытаюсь его достать через MarketInfo(_Symbol, MODE_MARGININIT), возвращает 0. Проверил у разных брокеров.

Как достать этот параметр?

Alexey Viktorov
28056
Alexey Viktorov  
mql_writer2:

Как достать этот параметр?

Только так...

Как получить программно "Процент маржи"
Как получить программно "Процент маржи"
  • 2017.05.31
  • www.mql5.com
В окне терминала "Спецификации контракта" есть пункт "Процент маржи...
mql_writer2
58
mql_writer2  
Alexey Viktorov:

Только так...

Осилил всю тему, спасибо!

Это 3.14...ц :)  Ну хоть так, и то хорошо.

Taras Slobodyanik
38424
Taras Slobodyanik  
mql_writer2:

Осилил всю тему, спасибо!

Это 3.14...ц :)  Ну хоть так, и то хорошо.

проверьте на разных брокерах и разных типах символов (Forex, Futures,CFD, CFD-Index, CFD-Leverage)

для каждого брокера будут нужны свои "особенные" формулы %)

Alexey Viktorov
28056
Alexey Viktorov  
Taras Slobodyanik:

проверьте на разных брокерах и разных типах символов (Forex, Futures,CFD, CFD-Index, CFD-Leverage)

для каждого брокера будут нужны свои "особенные" формулы %)

Ну какие-же они особенные если они есть в той таблице...

Taras Slobodyanik
38424
Taras Slobodyanik  
Alexey Viktorov:

Ну какие-же они особенные если они есть в той таблице...

Давно еще, я тестировал "вот это вот всё", и как я понял каждый брокер считает по своему. 
У одного брокера будет работать формула, у другого нет, и это с учётом валюты депозита.

я имею в виду "Процент маржи" в "Спецификации символа"
Alexey Viktorov
28056
Alexey Viktorov  
Taras Slobodyanik:

Давно еще, я тестировал "вот это вот всё", и как я понял каждый брокер считает по своему. 
У одного брокера будет работать формула, у другого нет, и это с учётом валюты депозита.

я имею в виду "Процент маржи" в "Спецификации символа"

Плохо тестировал. Там всё завязано на валюте депозита. В первую очередь маржа считается в валюте депозита. А через маржу считается и процент маржи. Конечно в той теме вопрос не закрыт, но это только потому, что у меня небыло желания выдавать готовое решение тем кто может только кубики лего складывать. Да и интерес пропал. Это значение на мой взгляд нужно только для того чтобы посчитать маржу по каждому символу отдельно и не в момент открытия ордера.

Taras Slobodyanik
38424
Taras Slobodyanik  
Alexey Viktorov:

Плохо тестировал.

думаю что не плохо, потому как у меня есть расчет для всех типов символа - Forex, Futures,CFD, CFD-Index, CFD-Leverage

Alexey Viktorov
28056
Alexey Viktorov  
Taras Slobodyanik:

думаю что не плохо, потому как у меня есть расчет для всех типов символа - Forex, Futures,CFD, CFD-Index, CFD-Leverage

Ну если всё есть, то почему у одного работает, а у другого может не работать? Видимо не всё учтено.

mql_writer2
58
mql_writer2  
Taras Slobodyanik:

проверьте на разных брокерах и разных типах символов (Forex, Futures,CFD, CFD-Index, CFD-Leverage)

для каждого брокера будут нужны свои "особенные" формулы %)


В общем только добрались руки до этого дела.

Сделал процентный калькулятор, работает на всех брокерах, все отлично.


Код:

int nMarginMode = (int)MarketInfo(sSymbol, MODE_MARGINCALCMODE);
double mMargin1Lot = MarketInfo(sSymbol, MODE_MARGINREQUIRED);
double mContractSize = SymbolInfoDouble(sSymbol, SYMBOL_TRADE_CONTRACT_SIZE);
double mAsk = MarketInfo(sSymbol, MODE_ASK);
double mMarginInit = MarketInfo(sSymbol, MODE_MARGININIT);
double mTickSize = SymbolInfoDouble(sSymbol, SYMBOL_TRADE_TICK_SIZE);
double mTickPrice = SymbolInfoDouble(sSymbol, SYMBOL_TRADE_TICK_VALUE);

mMarginPercent = 0;
switch (nMarginMode)
{
case 0:     // forex
  if (mContractSize > 0)
    mMarginPercent = 100*nAccLeverage*mMargin1Lot/mContractSize;
  break;
case 1:     // cfd
  if ( mContractSize > 0 && mAsk > 0 )
    mMarginPercent = 100*mMargin1Lot/mContractSize/mAsk;
  break;
case 2:     // futures
  if (mMarginInit > 0)
    mMarginPercent = 100/mMarginInit;
  break;
case 3:     // cfd-index
  if (mContractSize > 0 && mAsk > 0 && mTickPrice > 0)
    mMarginPercent = 100*mMargin1Lot*mTickSize/mContractSize/mTickPrice/mAsk;
  break;
case 4:     // cfd-leverage
  if ( mContractSize > 0 && mAsk > 0 )
    mMarginPercent = 100*mMargin1Lot*nAccLeverage/mContractSize/mAsk;
  break;
}

Но это еще пол беды.

Самое интересное теперь значение mMarginPercent преобразовать из валюты маржи в валюту счета.

Код конвертера я тут приводить не буду конечно, почти 400 строк.

Taras Slobodyanik
38424
Taras Slobodyanik  
mql_writer2:

Но это еще пол беды.

Самое интересное теперь значение mMarginPercent преобразовать из валюты маржи в валюту счета.

Код конвертера я тут приводить не буду конечно, почти 400 строк.

По-моему это гораздо проще - в цикле перебираем все символы, находим "margin_currency и account_currency", и умножаем (или делим) на значение аска. (20 строк со скобками)


пс. вот пример неправильного расчета Margin Percentage
(брокер ставит значения "от фонаря") 
это реальный счет

1

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий