Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2612

 
Nikolay Skrigan #:
Громоздкая конструкция получается для извлечения одной цифры.

Не все так просто дается

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger() , SymbolInfoDouble() и SymbolInfoString() . В качестве второго...
 
Nikolay Skrigan #:

Попробовал описанную по ссылке конструкцию. Получил тот же ноль. :)

На мой взгляд лучше использовать OrderCheck() и читать структуру

struct MqlTradeCheckResult
  {
   uint         retcode;             // Код ответа
   double       balance;             // Баланс после совершения сделки
   double       equity;              // Эквити после совершения сделки
   double       profit;              // Плавающая прибыль
   double       margin;              // Маржевые требования
   double       margin_free;         // Свободная маржа
   double       margin_level;        // Уровень маржи
   string       comment;             // Комментарий к коду ответа (описание ошибки)
  };
Документация по MQL5: Торговые функции / OrderCheck
Документация по MQL5: Торговые функции / OrderCheck
  • www.mql5.com
Функция OrderCheck() проверяет достаточность средств для совершения требуемой торговой операции . Результаты проверки помещаются в поля структуры...
 
Tretyakov Rostyslav #:

Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().

Нагородил я какой-то фигни. Получается в результате единица )))
а должно быть для золота примерно  678 при плече 1:500.
Что не так? Кто может подсказать?

      double margin_buy = 0;     
      double margin_buy1 = 0; 
      double margin_sell = 0;    
      double margin_sell1 = 0; 

      SymbolInfoMarginRate(_Symbol, ORDER_TYPE_BUY, margin_buy, margin_buy1);
      SymbolInfoMarginRate(_Symbol, ORDER_TYPE_SELL, margin_sell, margin_sell1);
      
      marga       = (margin_buy + margin_sell) / 2;
 
Alexey Viktorov #:
margin;              // Маржевые требования

Мне нужен один единственный параметр, записанный в переменную для дальнейшего использования.

Аналог операции 

      marga       =  MarketInfo(Symbol(), MODE_MARGINREQUIRED);

в MQL4.
 
Nikolay Skrigan #:

Мне нужен один единственный параметр, записанный в переменную для дальнейшего использования.

Аналог операции 

      marga       =  MarketInfo(Symbol(), MODE_MARGINREQUIRED);

в MQL4.
double MARGINREQUIRED=GetMarginRequired(_Symbol,SymbolInfoDouble(_Symbol,SYMBOL_BID)+(SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)*SymbolInfoDouble(_Symbol,SYMBOL_POINT)/2.0));//MarketInfo(_Symbol,MODE_MARGINREQUIRED);
    
--
double GetMarginRequired(string symb, double price)
{
  double MarginInit, MarginMain;
  return((price!=0 && SymbolInfoMarginRate(symb,ORDER_TYPE_BUY,MarginInit,MarginMain))?MarginInit*price*
         SymbolInfoDouble(symb,SYMBOL_TRADE_TICK_VALUE)/(SymbolInfoDouble(symb,SYMBOL_TRADE_TICK_SIZE)*AccountInfoInteger(ACCOUNT_LEVERAGE)):0);
}
 
Nikolay Skrigan #:

Мне нужен один единственный параметр, записанный в переменную для дальнейшего использования.

Аналог операции 

      marga       =  MarketInfo(Symbol(), MODE_MARGINREQUIRED);

в MQL4.

А дальше? Что делать с этим параметром? Используя его посчитать маржу для открываемой позиции?

 
Alexey Viktorov #:

А дальше? Что делать с этим параметром? Используя его посчитать маржу для открываемой позиции?

А дальше много чего...
На него завязаны расчеты рисков, выбор стопа и т.д.

 
Vitaly Muzichenko #:
double MARGINREQUIRED=GetMarginRequired(_Symbol,SymbolInfoDouble(_Symbol,SYMBOL_BID)+(SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)*SymbolInfoDouble(_Symbol,SYMBOL_POINT)/2.0));//MarketInfo(_Symbol,MODE_MARGINREQUIRED);      -- double GetMarginRequired(string symb, double price) {   double MarginInit, MarginMain;   return((price!=0 && SymbolInfoMarginRate(symb,ORDER_TYPE_BUY,MarginInit,MarginMain))?MarginInit*price*          SymbolInfoDouble(symb,SYMBOL_TRADE_TICK_VALUE)/(SymbolInfoDouble(symb,SYMBOL_TRADE_TICK_SIZE)*AccountInfoInteger(ACCOUNT_LEVERAGE)):0); }

Виталий, супер. Спасибо.

Все отлично.

 
Vitaly Muzichenko #:

Красота. То что нужно было.

Осталось подвигать метки для улучшения вида и с этим индикатором тоже всё.
И последний этап - это перевод кода робота. Пока что боюсь даже браться. :)))

 
Nikolay Skrigan #:

Виталий, супер. Спасибо.

Все отлично.

Этот код написал fxsaber, за что ему огромная благодарность