Справочник MQL4

SymbolInfoDouble

Возвращает соответствующее свойство указанного символа. Существует 2 варианта функции.

1. Непосредственно возвращает значение свойства.

double  SymbolInfoDouble(
   string                  name,         // символ
   ENUM_SYMBOL_INFO_DOUBLE prop_id       // идентификатор свойства
   );

2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.

bool  SymbolInfoDouble(
   string                   name,        // символ
   ENUM_SYMBOL_INFO_DOUBLE  prop_id,     // идентификатор свойства
   double&                  double_var   // сюда примем значение свойства
   );

Параметры

name

[in]  Имя символа.

prop_id

[in]  Идентификатор свойства символа. Значение может быть одним из значений перечисления ENUM_SYMBOL_INFO_DOUBLE.

double_var

[out]  Переменная типа double, принимающая  значение запрашиваемого свойства.

Возвращаемое значение

Значение типа double. В случае неудачного выполнения информацию об ошибкe можно получить с помощью функции GetLastError():

4106 – символ не выбран в "Обзоре рынка" (нет в списке доступных),

4051 – неверный идентификатор свойства символа,

4024 – внутренняя ошибка.

Примечание

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

В большинстве случаев достаточно использовать функцию SymbolInfoTick(), которая позволяет получить за один вызов значения Ask, Bid, Last, Volume и время прихода последнего тика.

Пример:

void OnTick()
  {
//--- получим спред из свойств символа
   bool spreadfloat=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD_FLOAT);
   string comm=StringFormat("Спред %s = %I64d пунктов\r\n",
                            spreadfloat?"плавающий":"фиксированный",
                            SymbolInfoInteger(Symbol(),SYMBOL_SPREAD));
//--- вычислим теперь спред сами
   double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   double spread=ask-bid;
   int spread_points=(int)MathRound(spread/SymbolInfoDouble(Symbol(),SYMBOL_POINT));
   comm=comm+"Вычисленный спред = "+(string)spread_points+" пунктов";
   Comment(comm);
  }