Как вычислить маржу? - страница 5

 
Как вычислить программно плечо написано в этой же ветке. Чем писать портянки, внимательнее относитесь к ответам на Ваши вопросы
 

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

Я внимательно перечитал всю ветку. Ответ на мой первоначальный вопрос был дан - получить от терминала фактическое значение кредитного плеча для отдельно взятой позиции невозможно.  

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

Было бы совсем хорошо, если это можно сделать ДО открытия следующей позиции. 

 
Janis Ozols:

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

Я внимательно перечитал всю ветку. Ответ на мой первоначальный вопрос был дан - получить от терминала фактическое значение кредитного плеча для отдельно взятой позиции невозможно.  

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

Было бы совсем хорошо, если это можно сделать ДО открытия следующей позиции. 

Вам же брокер ответил  - может поменять ПОСЛЕ

а ДО - уже все написано выше, но нужно вычислить

 
Renat Akhtyamov:

Вам же брокер ответил  - может поменять ПОСЛЕ
а ДО - уже все написано выше, но нужно вычислить

Ну да. Вот я и хочу понять, как мне получить фактическое значение кредитного плеча для символа, ПОСЛЕ того, как брокер его изменил, но ДО открытия следующей позиции по этому символу. Корректно вычислить это у меня пока не получается. Ибо все формулы для вычисления, представленные ранее, содержат либо плечо счёта (которое осталось неизменным), либо сумму маржи из настроек символа (которая тоже не изменилась).

 
Janis Ozols:

Ну да. Вот я и хочу понять, как мне получить фактическое значение кредитного плеча для символа, ПОСЛЕ того, как брокер его изменил, но ДО открытия следующей позиции по этому символу. Корректно вычислить это у меня пока не получается. Ибо все формулы для вычисления, представленные ранее, содержат либо плечо счёта (которое осталось неизменным), либо сумму маржи из настроек символа (которая тоже не изменилась).

да ладно

фактическое плечо:

https://www.mql5.com/ru/forum/353040/page2#comment_18675097

именно полученное плечо подставляем в расчет маржи

https://www.mql5.com/ru/forum/353040/page4#comment_18728440

и будет Вам счастье

;)

Как вычислить маржу?
Как вычислить маржу?
  • 2020.10.09
  • www.mql5.com
Добрый день! Внезапно столкнулся с ситуацией, в которой залог по открытым позициям существенно (в 20 раз) увеличился...
 
Renat Akhtyamov:

фактическое плечо:

https://www.mql5.com/ru/forum/353040/page2#comment_18675097

По ссылке есть формула:

LEVERAGE=NormalizeDouble(VOL/MarketInfo("USDCHF",MODE_MARGINREQUIRED),0);

Она содержит величину MarketInfo("USDCHF",MODE_MARGINREQUIRED), которая не изменяется после того, как брокер изменил плечо для данного инструмента. Функция MarketInfo возвращает маржу из настроек символа, которая соответствует плечу в настройках счёта. Если бы это было не так, то и вопросов бы у меня больше не было. Именно в этом и заключается проблема.

Renat Akhtyamov:

именно полученное плечо подставляем в расчет маржи

https://www.mql5.com/ru/forum/353040/page4#comment_18728440

И здесь проблема будет в том, что полученное на предыдущем шаге плечо не будет соответствовать фактическому. Оно будет равно плечу из настроек счёта, которое возвращает функция AccountLeverage(). Соответственно, рассчитанная таким образом маржа будет значительно меньше фактической, если кредитное плечо для данного инструмента не соответствует плечу счёта. 

При желании вы легко можете проверить это самостоятельно:

  1. Откройте демо-счёт на сервере Alpari-Demo. При открытии счёта выберите сумму 10000 USD и плечо 1:500.
  2. Откройте позицию на покупку 1 лота USDRUB (UZDZAR, UZDTRY)
  3. Вычислите плечо и затем маржу по предложенным Вами формулам
  4. Сравните её с той, что видите в терминале
 
Janis Ozols:

По ссылке есть формула:

Она содержит величину MarketInfo("USDCHF",MODE_MARGINREQUIRED), которая не изменяется после того, как брокер изменил плечо для данного инструмента. Функция MarketInfo возвращает маржу из настроек символа, которая соответствует плечу в настройках счёта. Если бы это было не так, то и вопросов бы у меня больше не было. Именно в этом и заключается проблема.

И здесь проблема будет в том, что полученное на предыдущем шаге плечо не будет соответствовать фактическому. Оно будет равно плечу из настроек счёта, которое возвращает функция AccountLeverage(). Соответственно, рассчитанная таким образом маржа будет значительно меньше фактической, если кредитное плечо для данного инструмента не соответствует плечу счёта. 

При желании вы легко можете проверить это самостоятельно:

  1. Откройте демо-счёт на сервере Alpari-Demo. При открытии счёта выберите сумму 10000 USD и плечо 1:500.
  2. Откройте позицию на покупку 1 лота USDRUB (UZDZAR, UZDTRY)
  3. Вычислите плечо и затем маржу по предложенным Вами формулам
  4. Сравните её с той, что видите в терминале

Вы бы сначала попробовали, прежде чем прогнозировать исход

я работал этой формулой на плавающем плече, своевременно реагирует

и все будет совсем не так, как Вы увидели глазами

и уж тем более было такое именно там, где Вы пишете

и не на демо, а на реале

 
Renat Akhtyamov:

Вы бы сначала попробовали, прежде чем прогнозировать исход

Я не прогнозировал исход. Разумеется, я попробовал сделать это, прежде чем предложить Вам.

Вот скрипт:

void OnStart()
{
   double VOL = MarketInfo("USDRUB",MODE_LOTSIZE);
   double LEVERAGE = NormalizeDouble(VOL/MarketInfo("USDRUB",MODE_MARGINREQUIRED),0);
   double M = VOL / LEVERAGE; // M=CC/КП
   Print("М = ",M);
   Print("LEVERAGE = ",LEVERAGE);
   Print("VOL = ",VOL);
}


Вот результат его выполнения:


Вот фактическое значение:


Причина расхождения в том, что плечо символа USDRUB отличается от плеча счёта. И мой вопрос заключается в том, как получить значение этого плеча средствами MQL4 до открытия позиции.

 

ок

попробуйте теперь так

void OnStart()

{

   double LEVERAGE = NormalizeDouble( MarketInfo("EURUSD",MODE_LOTSIZE)/MarketInfo("USDCHF",MODE_MARGINREQUIRED),0);

   double M = MarketInfo( "USDRUB" ,MODE_LOTSIZE)/ LEVERAGE; // M=CC/ КП

   Print(" М = ",M);

   Print("LEVERAGE = ",LEVERAGE);

   Print("VOL = ",MarketInfo( "USDRUB" ,MODE_LOTSIZE));

}

 
Renat Akhtyamov:

ок

попробуйте теперь так

Попробовал. Вот результат:

Правда, я не очень понял, почему на этот раз для вычисления плеча USDRUB Вы предлагаете поделить объём контракта EURUSD на маржу для открытия одного стандартного лота по USD/CHF. Но в результате получается то же самое значение маржи (200). В то время как фактически удерживается маржа 1000.

 
Причина обращения: