Как получить величину маржи открытой позиции?

 

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

Пожалуйста, дайте мне знать. OrderCalcMargin () здесь бесполезен. Пожалуйста, посоветуй мне, что я могу сделать.

 
jaffer wilson :

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

Пожалуйста, дайте мне знать. OrderCalcMargin () здесь бесполезен. Пожалуйста, посоветуй мне, что я могу сделать.

Пожалуйста, помогите мне. Как я могу потратить маржу на уже открытую сделку?

 
jaffer wilson:

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

Пожалуйста, дайте мне знать. OrderCalcMargin () здесь бесполезен. Пожалуйста, посоветуй мне, что я могу сделать.



*** Но только надо учесть что:  "B" -это размер кредитного плеча для указанного символа, а не общее плечо счета.  

 

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

И очень странно что на МТ5 нигде не показывают реальное кредитное плечо  символа.

Его можно было показать в "Обзоре рынка".  

 
jaffer wilson:

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

Пожалуйста, дайте мне знать. OrderCalcMargin () здесь бесполезен. Пожалуйста, посоветуй мне, что я могу сделать.

Ну вот хоть чуток приблизились к проблеме. Почитайте эту тему там есть ответ на ваш вопрос. Но¡¡¡ должен предупредить, что не готовое решение, а ВСЁ что надо для полного решения.

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

Ну вот хоть чуток приблизились к проблеме. Почитайте эту тему там есть ответ на ваш вопрос. Но¡¡¡ должен предупредить, что не готовое решение, а ВСЁ что надо для полного решения.

Спасибо, но я не вижу этого в спецификациях символов.

Дай мне знать, что я могу сделать? Думаю, я спрашиваю на форуме MQL5, значит, решение должно быть связано с MQL5. Решения MT4 в большинстве случаев бесполезны.

 
jaffer wilson:

Спасибо, но я не вижу этого в спецификациях символов.

Дай мне знать, что я могу сделать? Думаю, я спрашиваю на форуме MQL5, значит, решение должно быть связано с MQL5. Решения MT4 в большинстве случаев бесполезны.

В связи с трудностями понимания машинного перевода я не понимаю что у вас не получается. Что вас не устраивает это

  double in_margin = 0.0;
  SymbolInfoDouble(_Symbol, SYMBOL_MARGIN_INITIAL, in_margin);
Это маржа для 1 лота. Если полученную маржу умножить на размер лота позиции получите маржу позиции. Если у вас есть встречные позиции, я вам уже объяснял какие надо сделать перерасчёты.
 
Alexey Viktorov :

В связи с трудностями понимания машинного перевода я не понимаю что у вас не получается. Что вас не устраивает это

Это маржа для 1 лота. Если полученную маржу умножить на размер лота позиции получите маржу позиции. Если у вас есть встречные позиции, я вам уже объяснял какие надо сделать перерасчёты.

если мой лот = 50, а in_margin = 10000, то моя маржа будет 500000.

Если вы думаете об этом, то вы ошибаетесь. Посмотрите, что я вижу в ToolBox:

Я имею в виду, что у тебя есть шляпа?

 
Alexey Viktorov :

В связи с трудностями понимания машинного перевода я не понимаю что у вас не получается. Что вас не устраивает это

Это маржа для 1 лота. Если полученную маржу умножить на размер лота позиции получите маржу позиции. Если у вас есть встречные позиции, я вам уже объяснял какие надо сделать перерасчёты.

Просто скажите, что делает функция OrderCalcMargin ()? Я хочу написать свою собственную функцию OrderCalcMargin (). Пожалуйста, дайте мне знать.

 
jaffer wilson:

Просто скажите, что делает функция OrderCalcMargin ()? Я хочу написать свою собственную функцию OrderCalcMargin (). Пожалуйста, дайте мне знать.

Сначала нужно определиться со способом расчета маржи. Для этого используйте:

SymbolInfoInteger(Symbol(), SYMBOL_TRADE_CALC_MODE);

В зависимости от того, что получите, применяйте ту или иную формулу. Формулы расчета приведены в документации (смотрите перечисление ENUM_SYMBOL_CALC_MODE).

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как правило...
 
Ihor Herasko :

Сначала нужно определиться со способом расчета маржи. Для этого используйте:

В зависимости от того, что получите, применяйте ту или иную формулу. Формулы расчета приведены в документации  (смотрите перечисление ENUM_SYMBOL_CALC_MODE).

Я знаю это. Я тоже пробовал это. Вот проверьте это:

bool OrderCalcMargin_AtOpen(ENUM_ORDER_TYPE order_type, const string symbol_name, double volume, double price, double &margin)
  {
   bool calculation = false;
   double Initial = SymbolInfoDouble(EA_Orig_Symbol, SYMBOL_MARGIN_INITIAL), Maintain, numerator, denominator, multiply_factor;
   if(SymbolInfoMarginRate(EA_Orig_Symbol, order_type, Initial, Maintain) == false)
      return false;
   switch(symbol_calc_mode)
     {
      case SYMBOL_CALC_MODE_FOREX:
         numerator = volume  * SymbolInfoDouble(EA_Orig_Symbol, SYMBOL_TRADE_CONTRACT_SIZE);
         denominator = double(AccountInfoInteger(ACCOUNT_LEVERAGE)) * Initial;
         if(denominator == 0)
           {
            denominator = 1;
            Print("denominator was found to be Zero (0).");
           }
         multiply_factor = numerator / denominator;
         margin = price * multiply_factor;
         calculation = true;
         break;
      case SYMBOL_CALC_MODE_FOREX_NO_LEVERAGE:
         margin = volume * SymbolInfoDouble(EA_Orig_Symbol, SYMBOL_TRADE_CONTRACT_SIZE) * Initial;
         calculation = true;
         break;
      default:
         Alert("Please check with developer regarding this type: ", EnumToString(symbol_calc_mode));
         ExpertRemove();
     }
   return calculation;
  }

Но это также не помогает найти правильный результат, как я вижу в ToolBox.

Теперь вы можете предложить мне, что я могу сделать, пожалуйста?

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