Состояние рынка

Функции для получения рыночной информации. 

Функция

Действие

SymbolsTotal

Возвращает количество доступных (выбранных в MarketWatch или всех) символов

SymbolName

Возвращает наименование указанного символа

SymbolSelect

Выбирает символ в окне MarketWatch или убирает символ из окна

SymbolIsSynchronized

Проверяет синхронизированность данных по указанному символу в терминале с данными на торговом сервере

SymbolInfoDouble

Возвращает значение типа double указанного символа для соответствующего свойства

SymbolInfoInteger

Возвращает значение целочисленного типа (long, datetime, int или bool) указанного символа для соответствующего свойства

SymbolInfoString

Возвращает значение типа string указанного символа для соответствующего свойства

SymbolInfoMarginRate

Возвращает коэффициенты взимания маржи в зависимости от типа и направления ордера

SymbolInfoTick

Возвращает текущие цены  для указанного символа в переменной типа MqlTick

SymbolInfoSessionQuote

Позволяет получить время начала и время окончания  указанной котировочной сессии для указанных символа и дня недели.

SymbolInfoSessionTrade

Позволяет получить время начала и время окончания  указанной торговой сессии для указанных символа и дня недели.

MarketBookAdd

Обеспечивает открытие стакана цен по указанному инструменту, а также производит подписку на получение извещений об изменении указанного стакана

MarketBookRelease

Обеспечивает закрытие стакана цен по указанному инструменту, а также отменяет подписку на получение извещений об изменении указанного стакана

MarketBookGet

Возвращает массив структур типа MqlBookInfo, содержащий записи стакана цен указанного символа

SymbolsTotal

Возвращает количество доступных (выбранных в MarketWatch или всех) символов.

int SymbolsTotal(
 bool selected // true – только символы в MarketWatch
 );

Параметры

selected — [in] Режим запроса. Может принимать значения true или false.

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

Если параметр selected равно true, то возвращается количество выбранных в MarketWatch символов. Если значение false, то возвращается общее количество всех символов.

 

SymbolName

Возвращает наименование указанного символа.

string SymbolName(
 int pos, // номер в списке
 bool selected // true – только символы в MarketWatch
 );

Параметры

pos — [in] Номер символа по порядку.

selected — [in] Режим запроса. Если значение true, то символ берется из списка выбранных в MarketWatch. Если значение false, то символ берется из общего списка.

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

Значение типа string c именем символа.

 

SymbolSelect

Выбирает символ в окне MarketWatch (Обзор рынка) или убирает символ из этого окна.

bool SymbolSelect(
 string name, // имя символа
 bool select // включить или выключить
 );

Параметры

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

select — [in] Переключатель. Если значение false, то символ должен быть убран из окна MarketWatch, в противном случае символ должен быть выбран в окно MarketWatch. Символ не может быть убран, если есть открытые графики с этим символом или есть открытые позиции по этому символу.

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

В случае неудачи функция возвращает false.

 

SymbolIsSynchronized

Проверяет факт синхронизированности данных по указанному символу в терминале с данными на торговом сервере

bool SymbolIsSynchronized(
 string name, // имя символа
 );

Параметры

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

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

Если данные синхронизированы, возвращает true, иначе возвращает false.

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():

5040 – неверный строковый параметр для указания имени символа,
4301 – неизвестный символ (финансовый инструмент),
4302 – символ не выбран в «Обзоре рынка» (нет в списке доступных),
4303 – неверный идентификатор свойства символа.

Примечание

Если функция используется для получения информации о последнем тике, то лучше использовать 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);
}

 

SymbolInfoInteger

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

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

long SymbolInfoInteger(
 string name, // символ
 ENUM_SYMBOL_INFO_INTEGER prop_id // идентификатор свойства
 );

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

bool SymbolInfoInteger(
 string name, // символ
 ENUM_SYMBOL_INFO_INTEGER prop_id, // идентификатор свойства
 long& long_var // сюда примем значение свойства
 );

Параметры

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

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

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

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

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

5040 – неверный строковый параметр для указания имени символа,
4301 – неизвестный символ (финансовый инструмент),
4302 – символ не выбран в «Обзоре рынка» (нет в списке доступных),
4303 – неверный идентификатор свойства символа.

Примечание

Если функция используется для получения информации о последнем тике, то лучше использовать 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);
}

 

SymbolInfoString

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

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

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

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

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

Параметры

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

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

string_var — [out] Переменная типа string, принимающая значение запрашиваемого свойства. В случае неудачного выполнения информацию об ошибкe можно получить с помощью функции GetLastError():

5040 – неверный строковый параметр для указания имени символа,
4301 – неизвестный символ (финансовый инструмент),
4302 – символ не выбран в «Обзоре рынка» (нет в списке доступных),
4303 – неверный идентификатор свойства символа.

 

Примечание

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

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

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

Значение типа string.

 

SymbolInfoMarginRate

Возвращает коэффициенты взимания маржи в зависимости от типа и направления ордера.

bool SymbolInfoMarginRate(
 string name, // символ
 ENUM_ORDER_TYPE order_type, // тип ордера
 double& initial_margin_rate, // коэффициент взимания начальной маржи
 double& maintenance_margin_rate // коэффициент взимания поддерживающей маржи
 );

Параметры

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

order_type — [in] Тип ордера.

initial_margin_rate — [in] Переменная типа double для получения коэффициента взимания начальной маржи. Начальная маржа – это размер гарантийной суммы под совершение сделки объемом в 1 лот соответствующего направления. Умножая коэффициент на начальную маржу, мы можем получить размер средств, который будет зарезервирован на счете при размещении ордера указанного типа.

maintenance_margin_rate — [out] Переменная типа double для получения коэффициента взимания поддерживающей маржи. Поддерживающая маржа –– это размер минимальной суммы для поддержания открытой позиции объемом в 1 лот соответствующего направления. Умножая коэффициент на поддерживающую маржу, мы можем получить размер средств, который будет зарезервирован на счете после срабатывания ордера указанного типа.

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

Возвращает true в случае удачного выполнения запроса свойств, иначе false.

 

SymbolInfoTick

Возвращает текущие цены для указанного символа в переменной типа MqlTick.

bool SymbolInfoTick(
 string symbol, // символ
 MqlTick& tick // ссылка на структуру
 );

Параметры

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

tick — [out] Ссылка на структуру типа MqlTick, в которую будут помещены текущие цены и время последнего обновления цен.

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

Возвращает true в случае успеха, иначе false.

 

SymbolInfoSessionQuote

Позволяет получить время начала и время окончания указанной котировочной сессии для указанных символа и дня недели.

bool SymbolInfoSessionQuote(
 string name, // имя символа
 ENUM_DAY_OF_WEEK day_of_week, // день недели
 uint session_index, // номер сессии
 datetime& from, // время начала сессии
 datetime& to // время окончания сессии
 );

Параметры

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

ENUM_DAY_OF_WEEK — [in] День недели, значение из перечисления ENUM_DAY_OF_WEEK.

uint — [in] Порядковый номер сессии, для которой нужно получить время начала и время окончания. Индексация сессий начинается с 0.

from — [out] Время начала сессии в секундах от 00 часов 00 минут, в полученном значении дату следует игнорировать.

to — [out] Время окончания сессии в секундах от 00 часов 00 минут, в полученном значении дату следует игнорировать.

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

Если данные для указанных сессии, символа и дня недели получены, то возвращает true, иначе возвращает false.

 

SymbolInfoSessionTrade

Позволяет получить время начала и время окончания указанной торговой сессии для указанных символа и дня недели.

bool SymbolInfoSessionTrade(
 string name, // имя символа
 ENUM_DAY_OF_WEEK day_of_week, // день недели
 uint session_index, // номер сессии
 datetime& from, // время начала сессии
 datetime& to // время окончания сессии
 );

Параметры

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

ENUM_DAY_OF_WEEK — [in] День недели, значение из перечисления ENUM_DAY_OF_WEEK.

uint — [in] Порядковый номер сессии, для которой нужно получить время начала и время окончания. Индексация сессий начинается с 0.

from — [out] Время начала сессии в секундах от 00 часов 00 минут, в полученном значении дату следует игнорировать.

to — [out] Время окончания сессии в секундах от 00 часов 00 минут, в полученном значении дату следует игнорировать.

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

Если данные для указанных сессии, символа и дня недели получены, то возвращает true, иначе возвращает false.

 

MarketBookAdd

Обеспечивает открытие стакана цен по указанному инструменту, а также производит подписку на получение извещений об изменении указанного стакана.

bool MarketBookAdd(
 string symbol // символ
 );

Параметры

symbol — [in] Имя символа, чей стакан цен предполагается использовать в данном эксперте или скрипте.

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

Значение true в случае успешного открытия, иначе false.

Примечание

Обычно, эта функция должна вызываться из функции OnInit() или в конструкторе класса. Для обработки приходящих извещений в программе эксперта должна присутствовать функция void OnBookEvent(string& symbol).

 

MarketBookRelease

Обеспечивает закрытие стакана цен по указанному инструменту, а также отменяет подписку на получение извещений об изменении указанного стакана.

bool MarketBookRelease(
 string symbol // имя символа
 );

Параметры

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

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

Значение true в случае успешного закрытия, иначе false.

Примечание

Обычно эта функция должна вызываться из функции OnDeinit() в том случае, если в функции OnInit() была вызвана соответствующая функция MarketBookAdd(). Либо должна вызываться из деструктора класса, если в конструкторе этого класса вызывается соответствующая функция MarketBookAdd().

 

MarketBookGet

Возвращает массив структур MqlBookInfo, содержащий записи стакана цен указанного символа.

bool MarketBookGet(
 string symbol, // символ
 MqlBookInfo& book[] // ссылка на массив
 );

Параметры

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

book[] — [out] Ссылка на массив записей стакана цен. Массив может быть заранее распределен для достаточного количества записей. Если динамический массив не был заранее распределен в оперативной памяти, то клиентский терминал сам распределит этот массив.

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

Возвращает true в случае успеха, иначе false.

Примечание

Стакан цен должен быть предварительно открыт функцией MarketBookAdd().

Пример:

MqlBookInfo priceArray[];
bool getBook=MarketBookGet(NULL,priceArray);
if(getBook)
{
   int size=ArraySize(priceArray);
   Print("MarketBookInfo по ",Symbol());

   for(int i=0;i<size;i++)
   {
      Print(i+":",priceArray[i].price +" Volume= "+priceArray[i].volume, " type = ",priceArray[i].type);
   }
}
else
{
   Print("Не удалось получить содержимое стакана по символу ",Symbol());
}