Ошибки, баги, вопросы - страница 3023

 
fxsaber:

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

Прошу Разработчиков разобраться в неправильной работе OrderCalcMargin!


Откройте, пожалуйста, из Терминала демо-счет на сервере ForexTimeFXTM-Demo01 и запустите на EURSEK этот скрипт.

// Выводит количество маржи для открытия Buy-позиции на 1 лот.
void OnStart()
{
  double Margin;
  
  if (OrderCalcMargin(ORDER_TYPE_BUY, _Symbol, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), Margin))
    Alert(Margin);
}


Получаем такое несоответствие.

Абсолютно все настройки символа/счета, что доступны через MQL, проверил. Все корректно. Такое ощущение, что существует настройка на стороне брокера, которая недоступна в Терминале. Возможно, эта.

Подобных символов много. Как правильно торговать - непонятно. Просьба откомментировать, т.к. для торгового терминала ошибка критическая. Элементарно на MarginCall нарваться на ровном месте.

 

На скрине показано, что, в отличие от MT4, на MT5 невозможно узнать плечо/маржу символа.


 
fxsaber:

На скрине показано, что, в отличие от MT4, на MT5 невозможно узнать плечо/маржу символа.

SymbolInfoMarginRate ? И считать маржу руками, что-то вроде

if(IsSymbForexCFD)
    Result=GetLastPrice(SymbName)/GetForexSymbLeverage(SymbName)*GetSymbolTickValue(SymbName)/GetSymbolTickSize(SymbName);
 
traveller00:

SymbolInfoMarginRate ? И считать маржу руками, что-то вроде

Пробовал. Не всегда помогает.

 
fxsaber:

Как в MT5 достать значение этого поля, что можно видеть в MT4?


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

А в mql4 разве доступно это поле?

 
Alexey Viktorov:

А в mql4 разве доступно это поле?

Напрямую - нет.

 
fxsaber:

Напрямую - нет.

Не напрямую тоже ещё тот гемор…

А почему SymbolInfoMarginRate не всегда помогает?

 
Alexey Viktorov:

А почему SymbolInfoMarginRate не всегда помогает?

Этот скрипт выдает 1000.

void OnStart()
{
  Alert(GetMarginRequired(_Symbol)); // https://www.mql5.com/ru/forum/170952/page9#comment_4134898
}

А должен 2000.

 

С маржой в MT5 еще такой прикол.

Не понимаю, зачем ввели столь неправильно рассчитываемый ACCOUNT_MARGIN_LEVEL.

 
Как вышло, что ACCOUNT_LEVERAGE попал в ENUM_ACCOUNT_INFO_INTEGER, а не в ENUM_ACCOUNT_INFO_DOUBLE?