Рассчитать размер залога по символу - страница 2

 
forex2030:

Я же целую функцию разместил, которой будет пользоваться весь мир
и мне не жалко

точно не жалко?)

можете ввести в поиске "расчет маржи" и вам будет много формул и кода которых не жалко.

Думаю вам хватит обычного расчета: (Количество лотов * MODE_MARGINREQUIRED) = Маржа открытых ордеров по текущим ценам

 
void OnTick()
{
  Comment(Margin());
}
//+------------------------------------------------------------------+
double Margin()
{
  double lt=0.0;
  for(int i=OrdersTotal()-1; i>=0; i--) {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol())
      lt+=OrderLots();
  }
  if(lt>0) 
  return(MarketInfo(_Symbol, MODE_MARGINREQUIRED)*lt);
  return(0);
}
 
Taras Slobodyanik:

Думаю вам хватит обычного расчета: (Количество лотов * MODE_MARGINREQUIRED) = Маржа открытых ордеров по текущим ценам

Не всё так просто))
Одна позиция правильно показывает
а если вторая обратная, то уже не правильно

 
forex2030:

Не всё так просто))
Одна позиция правильно показывает
а если вторая обратная, то уже не правильно

А так?

//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
{
  Comment(Margin());
}
//+------------------------------------------------------------------+
double Margin()
{
  double ltB=0,ltS=0;
  for(int i=OrdersTotal()-1; i>=0; i--) {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()) {
      if(OrderType()==OP_BUY) ltB+=OrderLots();
      if(OrderType()==OP_SELL) ltS+=OrderLots();
    }
  }
  return(MarketInfo(_Symbol, MODE_MARGINREQUIRED)*fabs(ltB-ltS));
}
//+------------------------------------------------------------------+
 
Vitaly Muzichenko:

А так?

три бай рассчитывает правильно
каждый новый селл уменьшает расчёт

3 бай = 58.62$
+1 селл = 39.06$ (реально = 58.61$)
+1 селл = 19.53$ (реально =  58.60$)

 
forex2030:

три бай рассчитывает правильно
каждый новый селл уменьшает расчёт

3 бай = 58.62$
+1 селл = 39.06$ (реально = 58.61$)
+1 селл = 19.53$ (реально =  58.60$)

Странно, у меня всё работает


 
Vitaly Muzichenko:

Странно, у меня всё работает


В чём может быть такое различие?
У меня не правильно работает


 

Очень (в нашей тематике, крайне) полезная профессия - бухгалтер..К сожалению ей не владею, но жизненная практика позволяет (примерно) раскладывать расходы по статьям..

что происходит при открытии сделки ? какие деньги куда деваются, где их суммировать/учитывать чтобы в итоге всё "сошлось" ...

при открытии сделки, мы обеспечиваем залог по её объёму в процентах leverage, выплачиваем спред и (плюс комиссию). Залог исчисляется,к примеру, в базовой валюте EURUSD (выделено+подчёркнуто).
Но удерживается с нашего депозита USD, больше неоткуда. То есть должна быть конвертация из EUR в USD. По какой цене bid/ask и на какой момент ? и так далее...

И это только открытие, не всё (есть прочие залоговые требования к разным моментам)

если по быстрому посмотреть, то опций в терминале "про исчесление залога", их мякго говоря много. Но зато даны упрощенные методы для момент "открытия" - проверить достаточность средств.

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

 

Только что было замечено то, чего никогда не замечал:

Было открыто 6 позиций, одна их них селл, маржа была 58.6

Что на графике, что в терминале - одинаково.

Закрыл селл и осталось 5 бай, на графике 60.56, а вот в терминале 87.3

Смотрел в код, вроде  всё верно, перегрузил терминал, но ситуация не изменилась.

Далее просто задумчиво смотрел значения маржи, вдруг в терминале значения просто так на ровном месте изменились с 87.3 на 60.57

Странное поведение произошло. Сейчас снова работает правильно.

 
forex2030:

В чём может быть такое различие?
У меня не правильно работает


у вас ДЦ другой, он маржу считает по максимуму, а не по разнице между покупками и продажами.

у вас, похоже, надо заменить fabs(ltB-ltS) на MathMax(ltB,ltS)

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