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

 
Janis Ozols:

Если бы плечо для инструмента изменилось вследствие увеличения суммарного лота или каких-то других причин, логично было бы ожидать, что эти запросы должны были возвращать увеличенную величину маржи, разве нет?

Нет, эти функции используют плечо счета.

 
Andrey Khatimlianskii:

Да, так и есть.

Только, скорее всего, плечо меняется не для отдельной сделки, а для инструмента целиком, но сути это не меняет.

Добавлю-ка я алерт в свой информер на этот случай...

Мудро, имхенько 

 
Andrey Khatimlianskii:

Нет, эти функции используют плечо счета.

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

 
Janis Ozols:

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

Давно бы так
 
Janis Ozols:

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

Может быть SymbolInfoDouble(Symbol, SYMBOL_MARGIN_INITIAL/SYMBOL_MARGIN_MAINTENANCE)?

SymbolInfoDouble - Market Info - MQL4 Reference
SymbolInfoDouble - Market Info - MQL4 Reference
  • docs.mql4.com
2. Returns true or false depending on whether a function is successfully performed. In case of success, the value of the property is placed into a recipient variable, passed by reference by the last parameter. It is recommended to use SymbolInfoTick() if the function is used for getting information about the last tick. It may well be that not a...
 
Stanislav Korotky:

Может быть SymbolInfoDouble(Symbol, SYMBOL_MARGIN_INITIAL/SYMBOL_MARGIN_MAINTENANCE)?

К сожалению, при работе с инструментами рынка FOREX функция SymbolInfoDouble c любой из этих констант возвращает ноль.

 

итак, теперь можно ответить на вопрос ветки

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

М=СС/КП

  • Где М – маржа,
  • СС – сумма сделки,
  • КП – кредитное плечо.

Например, чтобы совершить сделку объемом 1 стандартный лот (100 000 единиц) по валютной паре USD/CAD, с кредитным плечом 1:200, необходимо внести маржу:

  • М=СС/КП
  • М=100 000/200
  • М=500

То есть, сумма маржи составит 500 $. А при кредитном плече 1:500 маржа будет всего лишь 100 000/500=200 $. Но при КП 1:500 вы сможете приобрести 10 лотов объемом 1 миллион долларов, и совершать сделки при марже 100 000/500=2 000 $.

Расчет маржи для обратной котировки

М=СС/КП х КВ

  • Где М – маржа;
  • СС – сумма сделки;
  • КП – кредитное плечо;
  • КВ – курс валюты.

Для примера возьмем пару GBR/USD.

  • М =СС/КП х КВ
  • М = 100 000/200 х 1, 5074
  • М= 753,7 $

Не получаются круглые суммы, зато стоимость одного пункта всегда будет выражена круглыми числами. А для прямых котировок некоторое неудобство составляет расчет пункта.

Расчет маржи для кросс-курсов

М = СС/КП х КВ

  • М – маржа;
  • СС – сумма сделки;
  • КП – кредитное плечо;
  • КВ – курс валюты (базовой) к доллару.

пример:


//+-------------- РАСЧЕТ МАРЖИ ---------------------+
double calcMGN(string SYMB, double VOL)
{
   double Res=0,Price=0;
   if(LEVERAGE!=0)
   {
      if(StringSubstr(SYMB,0,3)!="USD")
      {
         SYMB=StringSubstr(SYMB,0,3)+"USD";
         Price=iClose(SYMB,Period(),0);
         Res=VOL*Price/LEVERAGE;
      }
      else Res=VOL/LEVERAGE;
   }
   return(Res);
}


 
Janis Ozols:

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

Формулы можно найти. Но зачем?

Возьмите фактическую маржу по всем позициям по инструменту и посчитайте, какое получилось фактическое плечо.

 
Andrey Khatimlianskii:

Формулы можно найти. Но зачем?

Возьмите фактическую маржу по всем позициям по инструменту и посчитайте, какое получилось фактическое плечо.

не получиться

плечо плавает

я нарывался на такое как он описывает,

это действительно печально при достаточно высоких рисках

 
Renat Akhtyamov:

итак, теперь можно ответить на вопрос ветки

Каюсь, вопрос в заголовке ветки я сформулировал неверно. На самом деле меня интересует не как вычислить маржу, а как получить её фактическое (не расчётное) значение от терминала. Причём не для счёта в целом, а для отдельно взятой позиции. Именно об этом идёт речь в первом посте. Я уже понял, что сделать это средствами MQL4 невозможно, такой функции просто нет. Однако не так давно @Andrey Khatimlianskii предположил, что плечо может изменяться не для отдельно взятой позиции, а для инструмента в целом. И теперь мне важно разобраться, как получить значение этого плеча в том случае, если оно отличается от плеча счёта.


Renat Akhtyamov:

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

М=СС/КП

  • Где М – маржа,
  • СС – сумма сделки,
  • КП – кредитное плечо.

Проблема этой и всех последующих формул в том, что они содержат КП (кредитное плечо). К сожалению, я пока не смог разобраться, как получить эту величину для отдельно взятого инструмента. Функции AccountMargin() и AccountInfoInteger(ACCOUNT_LEVERAGE) возвращают плечо счёта, а не символа, а функция MarketInfo(_Symbol,MODE_MARGINREQUIRED) возвращает значение маржи, соответствующее плечу счёта, даже в том случае, если позиции по данному символу фактически открываются с абсолютно другим плечом. Функция SymbolInfoDouble c константами SYMBOL_MARGIN_INITIAL или SYMBOL_MARGIN_MAINTENANCE при работе на инструментах рынка FOREX всегда возвращает ноль.

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


Andrey Khatimlianskii:

Формулы можно найти. Но зачем?

Я пытаюсь найти не формулы (их уже было предложено достаточно), а именно функцию MQL4. Для того, чтобы получить не расчётное значение, а фактическое. Благодаря Вам, Андрей, я уже понял, что сделать это для отдельно взятой позиции невозможно. Теперь мне интересно, как получить кредитное плечо для инструмента в целом, если оно отличается от плеча счёта.


Andrey Khatimlianskii:

Возьмите фактическую маржу по всем позициям по инструменту и посчитайте, какое получилось фактическое плечо.

Именно так я сейчас и сделал. Советник сравнивает фактическое значение маржи с расчётным и в случае значительного превышения останавливает торговлю и отправляет уведомление трейдеру. Пока таких уведомлений не поступало (тьфу*3). 

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

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