Почему SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL) дает 0 (нуль)?

 

На МТ4 и МТ5 получаю одинаковый результат 0 (НУЛЬ) при запуске функций

начальной маржи за 1 лот 

SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL);

и поддерживающей маржи за 1 лот

SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_MAINTENANCE);

Запускаю тест:

int OnInit()
  {
double a,b;
SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_INITIAL,a);
SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_MAINTENANCE,b);
Alert(a);
Alert(b);

Alert(SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
Alert(SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_MAINTENANCE));

return(INIT_SUCCEEDED);
  }

Ниже скрин результатов:


Между тем аналогичная функция МТ4

MarketInfo(_Symbol,MODE_MARGINREQUIRED);

дает правильный результат.

Благодарю за пояснения. 

 

А какие свойства инструмента, который проверяется этим скриптом, если смотреть в обзор рынка и дальше спецификации?

 
вопрос к брокеру, он накосячил. Не написал в свойствах инструмента нужные цифры. Хотя я не встречал брокеров на МТ5 у которых эта графа была бы заполнена.
Вопрос решается через функцию OrderCalcMargin
                double lot=1.0;
                double margin_buy,margin_sell;
                OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy):
                OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell):
 
MrGold166:
вопрос к брокеру, он накосячил. Не написал в свойствах инструмента нужные цифры. Хотя я не встречал брокеров на МТ5 у которых эта графа была бы заполнена.
Вопрос решается через функцию OrderCalcMargin
                double lot=1.0;
                double margin_buy,margin_sell;
                OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy):
                OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell):

Попытка расчета Вашего скрипта не удалась. Результат функций - false. Соответственно margin_buy и margin_sell дали нули. Двоеточие в конце строк я исправил на точку с запятой.

Спасибо. Может быть, еще идеи? 

 
barabashkakvn:

А какие свойства инструмента, который проверяется этим скриптом, если смотреть в обзор рынка и дальше спецификации?

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

 
dokpiknik:

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

Я спросил, смотрели-ли Вы в окно спецификации инструмента:

 Спецификация

 

Там не все так просто. Вот здесь читайте: https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_calc_mode

Если не поймете, обращайтесь.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Dima_S:

Там не все так просто. Вот здесь читайте: https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_calc_mode

Если не поймете, обращайтесь.

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

SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL);

и введена для того, чтобы пользователи, программирующие советники, индикаторы и скрипты не морочили себе голову этими "деталями". Так я понимаю смысл этой функции, где в качестве параметра присутствует конкретный финансовый инструмент, названный в документации к МТ4 и МТ5 символом, и отсутствуют другие параметры, указывающие на способы расчета маржи.

И я обнаружил, что эта функция при попытке ею воспользоваться дает НУЛЬ, то есть попросту отказывается работать.

В чем корень зла?

 
barabashkakvn:

Я спросил, смотрели-ли Вы в окно спецификации инструмента:

 

Спасибо. Вот картинка. Демо-счет. Что можно отсюда извлечь касательно моей темы? Коэффициент маржи - нуль и два раза 1 - вижу. Это нормально?


 
MrGold166:
вопрос к брокеру, он накосячил. Не написал в свойствах инструмента нужные цифры. Хотя я не встречал брокеров на МТ5 у которых эта графа была бы заполнена.
Вопрос решается через функцию OrderCalcMargin
                double lot=1.0;
                double margin_buy,margin_sell;
                OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy):
                OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell):

Ваш скрипт действительно функционирует при условии, что он помещен в OnTick(). В прошлый раз негативный результат моего теста был связан с тем, что я запускал Ваш скрипт в OnInit(). Спасибо, всех благ.

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