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

 

Я совершил сделку, и она показывает использованную маржу как: 1,97. Пожалуйста, посмотрите изображение. Я совершил два типа торговли. Один - Продать, другой - Купить

Используя следующий код, я пытаюсь вычислить используемое значение маржи:

for(int i=0; i<PositionsTotal(); i++)
     {
      if(pos.SelectByIndex(i))
        {
         ENUM_ORDER_TYPE od = (pos.PositionType() == POSITION_TYPE_BUY)? ORDER_TYPE_BUY:ORDER_TYPE_SELL;
         double margin =0;
         if(!OrderCalcMargin(od, Symbol(), pos.Volume(), pos.PriceOpen(), margin))
           {
            Print("Cannot Find Margin: ", GetLastError());
            continue;
           }
         Print(EnumToString(od), " : ", margin);
        }
     }

Но полученного мной результата не предвидится. Я получаю одинаковую стоимость для покупок и продаж. Это означает, что если я вычту стоимость покупки из суммы продажи, я получу ноль. Но использованная маржа - 1,97.

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

Пожалуйста, дайте мне знать, что я могу сделать.

Результатом вышеупомянутого скрипта является:


 
jaffer wilson:

Я совершил сделку, и она показывает использованную маржу как: 1,97. Пожалуйста, посмотрите изображение. Я совершил два типа торговли. Один - Продать, другой - Купить

Используя следующий код, я пытаюсь вычислить используемое значение маржи:

Но полученного мной результата не предвидится. Я получаю одинаковую стоимость для покупок и продаж. Это означает, что если я вычту стоимость покупки из суммы продажи, я получу ноль. Но использованная маржа - 1,97.

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

Пожалуйста, дайте мне знать, что я могу сделать.

Результатом вышеупомянутого скрипта является:


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

В общем надо смотреть SYMBOL_MARGIN_HEDGED в справочнике.

 
Alexey Viktorov :

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

В общем надо смотреть SYMBOL_MARGIN_HEDGED в справочнике.

Тогда как мне получить использованную маржу? Скажите, пожалуйста, какую формулу я могу использовать, если OrderCalcMargin () не работает?

 
jaffer wilson:

Тогда как мне получить использованную маржу? Скажите, пожалуйста, какую формулу я могу использовать, если OrderCalcMargin () не работает?

В документации ведь всё описано

SYMBOL_MARGIN_HEDGED

Размер контракта или маржи для одного лота перекрытых позиций (разнонаправленные позиции по одному символу). Существует два способа расчета маржи для перекрытых позиций. Способ расчета определяется брокером.

 

Базовый расчет:

  • Если для инструмента задана первоначальная маржа (SYMBOL_MARGIN_INITIAL), то хеджированная маржа указывается как абсолютное значение (в деньгах).
  • Если первоначальная маржа не задана (равна 0), то в SYMBOL_MARGIN_HEDGED указывается размер контракта, который будет использован при расчете маржи по формуле, соответствующей типу торгового инструмента (SYMBOL_TRADE_CALC_MODE).

 

Расчет по наибольшей позиции:

  • Значение SYMBOL_MARGIN_HEDGED не учитывается.
  • Вычисляется объем всех коротких и всех длинных позиций по инструменту.
  • Для каждой стороны рассчитывается средневзвешенная цена открытия, а также средневзвешенная цена конвертации в валюту депозита.
  • Далее по формулам, соответствующим типу инструмента (SYMBOL_TRADE_CALC_MODE), рассчитывается маржа для короткой и для длинной стороны.
  • В качестве итогового значения используется наибольшее.

double

 
Alexey Viktorov :

В документации ведь всё описано

SYMBOL_MARGIN_HEDGED

Размер контракта или маржи для одного лота перекрытых позиций (разнонаправленные позиции по одному символу). Существует два способа расчета маржи для перекрытых позиций. Способ расчета определяется брокером.

 

Базовый расчет:

  • Если для инструмента задана первоначальная маржа ( SYMBOL_MARGIN_INITIAL ), то хеджированная маржа указывается как абсолютное значение (в деньгах).
  • Если первоначальная маржа не задана (равна 0), то в SYMBOL_MARGIN_HEDGED указывается размер контракта, который будет использован при расчете маржи по формуле, соответствующей типу торгового инструмента ( SYMBOL_TRADE_CALC_MODE ).

 

Расчет по наибольшей позиции:

  • Значение SYMBOL_MARGIN_HEDGED не учитывается.
  • Вычисляется объем всех коротких и всех длинных позиций по инструменту.
  • Для каждой стороны рассчитывается средневзвешенная цена открытия, а также средневзвешенная цена конвертации в валюту депозита.
  • Далее по формулам, соответствующим типу инструмента ( SYMBOL_TRADE_CALC_MODE ), рассчитывается маржа для короткой и для длинной стороны.
  • В качестве итогового значения используется наибольшее.

double

Спасибо за ссылку.   Но смиренно прошу вас помочь мне исправить расчет в моем случае. Не могли бы вы сообщить мне, как я могу рассчитать маржу в моем случае, поскольку функция OrderCalcMargni () мне не нужна?
 
jaffer wilson:
Спасибо за ссылку.   Но смиренно прошу вас помочь мне исправить расчет в моем случае. Не могли бы вы сообщить мне, как я могу рассчитать маржу в моем случае, поскольку функция OrderCalcMargni () мне не нужна?

Покажите спецификацию xauusd. Какое значение имеет «размер хеджирующей маржи»

Вы скриптом получили, что маржа равна 3.94 на каждую позицию. Дальше согласно размеру хеджирующей маржи терминал пересчитывает это значение.

  • В качестве итогового значения используется наибольшее.

а наибольшее это 3.94 и от этой маржи получили 50%

 
Alexey Viktorov :

Покажите спецификацию xauusd. Какое значение имеет «размер хеджирующей маржи»

Вы скриптом получили, что маржа равна 3.94 на каждую позицию. Дальше согласно размеру хеджирующей маржи терминал пересчитывает это значение.

  • В качестве итогового значения используется наибольшее .

а наибольшее это 3.94 и от этой маржи получили 50%

Вот спецификации:


Если OrderCalcMargin () не может вычислить правильное значение, как я могу рассчитать и получить правильное значение? Пожалуйста, направь меня.

 

OrderCalcMargin() посчитал абсолютно правильно.

В документации есть таблица

SYMBOL_CALC_MODE_FOREX

Forex mode – расчет прибыли и маржи для Форекс

Margin:  Lots * Contract_Size / Leverage * Margin_Rate

 

Profit:   (close_price - open_price) * Contract_Size*Lots


и в ней формула вычисления маржи. В формуле есть значение Contract_Size. В спецификации есть это значение = 100. Так вот исходя из этого, по этой формуле было получено значение маржи 3.94 для позиции BUY и SELL соответственно.

Затем опять-же руководствуясь спецификацией, где сказано, что Hedged margin = 50 и руководствуясь пунктом

  • В качестве итогового значения используется наибольшее.

в нашем случае наибольшее это 0.01 лот считаем по той-же формуле, но в качестве Contract_Size уже ставим 50 , а не 100 как для одной позиции

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

OrderCalcMargin() посчитал абсолютно правильно.

В документации есть таблица

SYMBOL_CALC_MODE_FOREX

Forex mode – расчет прибыли и маржи для Форекс

Margin:   Lots * Contract_Size / Leverage * Margin_Rate

 

Profit:   (close_price - open_price) * Contract_Size*Lots


и в ней формула вычисления маржи . В формуле есть значение Contract_Size. В спецификации есть это значение = 100. Так вот исходя из этого, по этой формуле было получено значение маржи 3.94 для позиции BUY и SELL соответственно.

Затем опять-же руководствуясь спецификацией, где сказано, что Hedged margin = 50 и руководствуясь пунктом

  • В качестве итогового значения используется наибольшее .

в нашем случае наибольшее это 0.01 лот считаем по той-же формуле, но в качестве Contract_Size уже ставим 50 , а не 100 как для одной позиции

Спасибо за помощь. Вы решили мою самую большую проблему.