Торговые функции

Группа функций, предназначенных для управления торговлей.

Нижеуказанный ряд функции использоваться в экспертах и скриптах. В свойствах эксперта или скрипта, использующего данные функции, должна быть включена галочка «Разрешить советнику торговать«.

Функция

Действие

OrderCalcMargin

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

OrderCalcProfit

Вычисляет размер прибыли на основании переданных параметров в валюте счета

OrderCheck

Проверяет достаточность средств для совершения требуемой торговой операции.

OrderSend

Отправляет торговые запросы на сервер

OrderSendAsync

Отправляет асинхронно торговые запросы без ожидания ответа торгового сервера

PositionsTotal

Возвращает количество открытых позиций

PositionGetSymbol

Возвращает символ соответствующей открытой позиции

PositionSelect

Выбирает открытую позицию для дальнейшей работы с ней

PositionSelectByTicket

Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету

PositionGetDouble

Возвращает запрошенное свойство открытой позиции (double)

PositionGetInteger

Возвращает запрошенное свойство открытой позиции (datetime или int)

PositionGetString

Возвращает запрошенное свойство открытой позиции (string)

PositionGetTicket

Возвращает тикет позиции по индексу в списке открытых позиций

OrdersTotal

Возвращает количество ордеров

OrderGetTicket

Возвращает тикет соответствующего ордера

OrderSelect

Выбирает ордер для дальнейшей работы с ним

OrderGetDouble

Возвращает запрошенное свойство ордера (double)

OrderGetInteger

Возвращает запрошенное свойство ордера (datetime или int)

OrderGetString

Возвращает запрошенное свойство ордера (string)

HistorySelect

Запрашивает историю сделок и ордеров за указанный период серверного времени

HistorySelectByPosition

Запрашивает историю сделок и ордеров c указанным идентификатором позиции.

HistoryOrderSelect

Выбирает в истории ордер для дальнейшей работы с ним

HistoryOrdersTotal

Возвращает количество ордеров в истории

HistoryOrderGetTicket

Возвращает тикет соответствующего ордера в истории

HistoryOrderGetDouble

Возвращает запрошенное свойство ордера в истории (double)

HistoryOrderGetInteger

Возвращает запрошенное свойство ордера в истории (datetime или int)

HistoryOrderGetString

Возвращает запрошенное свойство ордера в истории (string)

HistoryDealSelect

Выбирает в истории сделку для дальнейших обращений к ней  через соответствующие функции

HistoryDealsTotal

Возвращает количество сделок в истории

HistoryDealGetTicket

Выбирает сделку для дальнейшей обработки и возвращает тикет сделки в истории

HistoryDealGetDouble

Возвращает запрошенное свойство сделки в истории (double)

HistoryDealGetInteger

Возвращает запрошенное свойство сделки в истории (datetime или int)

HistoryDealGetString

Возвращает запрошенное свойство сделки в истории (string)

 

OrderCalcMargin

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

bool OrderCalcMargin(
 ENUM_ORDER_TYPE action, // тип ордера
 string symbol, // имя символа
 double volume, // объем
 double price, // цена открытия
 double& margin // переменная для получения значения маржи
 );

Параметры

action — [in] Тип ордера, может принимать значения из перечисления ENUM_ORDER_TYPE.

symbol — [in] Имя финансового инструмента.

volume — [in] Объем торговой операции.

price — [in] Цена открытия.

margin — [out] Переменная, в которую будет записан необходимый размер маржи в случае успешного выполнения функции. Вычисление производится как если бы на текущем счете не было отложенных ордеров и открытых позиций. Значение маржи зависит от многих факторов и может меняться при изменении рыночного окружения.

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

Возвращает true в случае успеха, иначе false. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

 

OrderCalcProfit

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

bool OrderCalcProfit(
 ENUM_ORDER_TYPE action, // тип ордера (ORDER_TYPE_BUY или ORDER_TYPE_SELL)
 string symbol, // имя символа
 double volume, // объем
 double price_open, // цена открытия
 double price_close, // цена закрытия
 double& profit // переменная для получения значения прибыли
 );

Параметры

action — [in] Тип ордера, может принимать одно из двух значений перечисления ENUM_ORDER_TYPE: ORDER_TYPE_BUY или ORDER_TYPE_SELL.

symbol — [in] Имя финансового инструмента.

volume — [in] Объем торговой операции.

price_open — [in] Цена открытия.

price_close — [in] Цена закрытия.

profit — [out] Переменная, в которую будет записано вычисленное значение прибыли в случае успешного выполнения функции. Значение оценки прибыли зависит от многих факторов и может меняться при изменении рыночного окружения.

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

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

 

OrderCheck

Функция OrderCheck() проверяет достаточность средств для совершения требуемой торговой операции. Результаты проверки помещаются в поля структуры MqlTradeCheckResult.

bool OrderCheck(
 MqlTradeRequest& request, // структура запроса
 MqlTradeCheckResult& result // структура ответа
 );

Параметры

request — [in] Указатель на структуру типа MqlTradeRequest, которая описывает требуемое торговое действие.

result — [in,out] Указатель на структуру типа MqlTradeCheckResult, в которую будет помещен результат проверки.

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

В случае нехватки средств или ошибочно заполненных параметров функция возвращает false. В случае успешной базовой проверки структур (проверка указателей) возвращается true – это не является свидетельством того, что запрашиваемая торговая операция непременно выполнится успешно. Для получения подробного описания результата выполнения функции следует анализировать поля структуры result.

Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

 

OrderSend

Функция OrderSend() предназначена для совершения торговых операций через отправку запросов на торговый сервер.

bool OrderSend(
 MqlTradeRequest& request, // структура запроса
 MqlTradeResult& result // структура ответа
 );

Параметры

request — [in] Указатель на структуру типа MqlTradeRequest, описывающую торговое действие клиента.

result — [in,out] Указатель на структуру типа MqlTradeResult, описывающую результат торговой операции в случае успешного выполнения (возврата true).

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

В случае успешной базовой проверки структур (проверка указателей) возвращается true — это не свидетельствует об успешном выполнении торговой операции. Для получения более подробного описания результата выполнения функции следует анализировать поля структуры result.

Примечание

Торговый запрос проходит несколько стадий проверок на торговом сервере. В первую очередь проверяется корректность заполнения всех необходимых полей параметра request, и при отсутствии ошибок сервер принимает ордер для дальнейшей обработки. При успешном принятии ордера торговым сервером функция OrderSend() возвращает значение true.

Рекомендуется самостоятельно проверить запрос перед отправкой его торговому серверу. Для проверки запроса существует функция OrderCheck(), которая не только проверит достаточность средств для совершения торговой операции, но и вернет в результатах проверки торгового запроса многие другие полезные параметры:

  • код возврата, который сообщит об ошибке в проверяемом запросе;
  • значение баланса, которое будет после выполнения торговой операции;
  • значение собственных средств, которое будет после выполнения торговой операции;
  • значение плавающей прибыли, которое будет после выполнения торговой операции;
  • размер маржи, необходимый для требуемой торговой операции;
  • размер свободных собственных средств, которые останутся после выполнения требуемой торговой операции;
  • уровень маржи, который установится после выполнения требуемой торговой операции;
  • комментарий к коду ответа, описание ошибки.

Следует иметь в виду при выставлении рыночного ордера, что успешное окончание работы метода OrderSend() не всегда означает успешное совершение сделки. Необходимо проверять в возвращаемой структуре результата result значение retcode, содержащее код возврата торгового сервера, а также значение полей deal или order в зависимости от типа операции.

Каждый принятый ордер хранится на торговом сервере в ожидании обработки до тех пор, пока не наступит одно из условий для его исполнения:

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

В момент обработки ордера торговый сервер посылает терминалу сообщение о наступлении торгового события Trade, которое можно обработать функцией OnTrade().

Результат исполнения торгового запроса на сервере, отправленного функцией OrderSend() можно отслеживать при помощи обработчика OnTradeTransaction. При этом следует учитывать, что в результате исполнения одного торгового запроса обработчик OnTradeTransaction будет вызван несколько раз.

Например, при отсылке рыночного ордера на покупку, он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новую позицию. Для каждого из эти событий будет вызвана функция OnTradeTransaction.

Пример:

//+------------------------------------------------------------------+
//| Open Long position |
//+------------------------------------------------------------------+
void LongPositionOpen()
{
   MqlTradeRequest mrequest; // Will be used for trade requests
   MqlTradeResult mresult; // Will be used for results of trade requests
 
   ZeroMemory(mrequest);
   ZeroMemory(mresult);
 
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // Ask price
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); // Bid price

   if(!PositionSelect(_Symbol))
   {
      mrequest.action = TRADE_ACTION_DEAL; // Immediate order execution
      mrequest.price = NormalizeDouble(Ask,_Digits); // Lastest Ask price
      mrequest.sl = 0; // Stop Loss
      mrequest.tp = 0; // Take Profit
      mrequest.symbol = _Symbol; // Symbol
      mrequest.volume = Lot; // Number of lots to trade
      mrequest.magic = 0; // Magic Number
      mrequest.type = ORDER_TYPE_BUY; // Buy Order
      mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type
      mrequest.deviation=5; // Deviation from current price
      OrderSend(mrequest,mresult); // Send order
   }
}

 

OrderSendAsync

Функция OrderSendAsync() предназначена для проведения асинхронных торговых операций без ожидания ответа торгового сервера на отправленный запрос. Функция предназначена для высокочастотной торговли, когда по условиям торгового алгоритма недопустимо терять время на ожидание ответа от сервера.

bool OrderSendAsync(
 MqlTradeRequest& request, // структура запроса
 MqlTradeResult& result // структура ответа
 );

Параметры

request — [in] Указатель на структуру типа MqlTradeRequest, описывающую торговое действие клиента.

result — [in,out] Указатель на структуру типа MqlTradeResult, описывающую результат торговой операции в случае успешного выполнения функции (при возврате true).

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

Возвращает true по факту отправки запроса на торговый сервер. Если запрос не был отправлен, возвращается false. При успешном выполнении функции в переменной result код ответа содержит значение TRADE_RETCODE_PLACED (код 10008) – «ордер размещен». Успешное выполнение означает только факт отсылки, но не даёт никакой гарантии, что запрос дошел до торгового сервера и был принят для обработки. Торговый сервер при обработке полученного запроса отправляет клиентскому терминалу ответное сообщение об изменении текущего состояния позиций, ордеров и сделок, которое приводит к генерации события Trade.

Результат исполнения торгового запроса на сервере, отправленного функцией OrderSendAsync() можно отслеживать при помощи обработчика OnTradeTransaction. При этом следует учитывать, что в результате исполнения одного торгового запроса обработчик OnTradeTransaction будет вызван несколько раз.

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

  • trans — в данный параметр передается структура MqlTradeTransaction, описывающая торговую транзакцию, примененную к торговому счету;
  • request — в данный параметр передается структура MqlTradeRequest, описывающая торговый запрос, в результате которого совершена торговая транзакция;
  • result — в данный параметр передается структура MqlTradeResult, описывающая результат исполнения торгового запроса.

Примечание

Функция по назначению и параметрам аналогична OrderSend(), но в отличие от неё является асинхронной версией, то есть не приостанавливает работу программы в ожидании результата её выполнения. Сравнить скорость торговых операций этих двух функций можно с помощью приведенного в примере советника.

Пример:

//+------------------------------------------------------------------+
//| Expert set order function |
//+------------------------------------------------------------------+
void SetOrder( const string aSymbol, const double price, const double volume, const bool buy_sell )
{
   MqlTradeRequest request = {0};
   MqlTradeResult result = {0};
   req_id = 0;
   order_ticket = 0;

   //--- Fill structure
   request.magic = magic_number;
   request.symbol = aSymbol;
   request.volume = volume; 
   request.deviation = 50;
   request.type_filling = ORDER_FILLING_IOC;
   request.type_time = ORDER_TIME_DAY;
   request.price = price;
   request.action = TRADE_ACTION_DEAL;

   //--- 
   if(buy_sell)
     request.type = ORDER_TYPE_BUY;
   else
     request.type = ORDER_TYPE_SELL;

   //--- Send order
   if(OrderSendAsync(request, result))
   {
      if(result.retcode == TRADE_RETCODE_PLACED) 
         req_id = result.request_id;
   }
   else
     Print( "Установка ордера не выполнена! ", aSymbol );
}

 

PositionsTotal

Возвращает количество открытых позиций.

int PositionsTotal();

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

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

Примечание

При «неттинговом» учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке «Торговля» в панели «Инструменты».

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.

 

PositionGetSymbol

Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString.

string PositionGetSymbol(
 int index // номер в списке позиций
 );

Параметры

index — [in] Номер позиции в списке открытых позиций.

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

Значение типа string. Если позиция не найдена, то вернется пустая строка. Для получения кода ошибки нужно вызвать функцию GetLastError().

Примечание

Аналогично PositionsTotal.

 

PositionSelect

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

bool PositionSelect(
 string symbol // имя инструмента
 );

Параметры

symbol — [in] Наименование финансового инструмента.

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

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

Примечание

При «неттинговом» учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке «Торговля» в панели «Инструменты».

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций. В этом случае, PositionSelect выберет позицию с наименьшим тикетом.

Функция PositionSelect() копирует данные о позиции в программное окружение, и последующие вызовы PositionGetDouble(), PositionGetInteger() и PositionGetString() возвращают ранее скопированные данные. Это означает, что самой позиции может уже и не быть (или же она изменилась по объему, направлению и т.д.), а данные этой позиции можно еще получать. Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect() непосредственно перед обращением за ними.

 

PositionSelectByTicket

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

bool PositionSelectByTicket(
 ulong ticket // тикет позиции
 );

Параметры

ticket — [in] Тикет позиции.

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

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

Примечание

Функция PositionSelectByTicket() копирует данные о позиции в программное окружение, и последующие вызовы PositionGetDouble(), PositionGetInteger() и PositionGetString() возвращают ранее скопированные данные. Это означает, что самой позиции может уже и не быть (или же она изменилась по объему, направлению и т.д.), а данные этой позиции можно еще получать. Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect() непосредственно перед обращением за ними.

 

PositionGetDouble

Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной при помощи функции PositionGetSymbol или PositionSelect. Свойство позиции должно быть типа double. Существует 2 варианта функции.

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

double PositionGetDouble(
 ENUM_POSITION_PROPERTY_DOUBLE property_id // идентификатор свойства
 );

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

bool PositionGetDouble(
 ENUM_POSITION_PROPERTY_DOUBLE property_id, // идентификатор свойства
 double& double_var // сюда примем значение свойства
 );

Параметры

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

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

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

Значение типа double. В случае неудачного выполнения возвращает 0.

Примечание

При «неттинговом» учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке «Торговля» в панели «Инструменты».

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.

Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect() непосредственно перед обращением за ними.

 

PositionGetInteger

Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной при помощи функции PositionGetSymbol или PositionSelect. Свойство позиции должно быть типа datetime, int. Существует 2 варианта функции.

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

long PositionGetInteger(
 ENUM_POSITION_PROPERTY_INTEGER property_id // идентификатор свойства
 );

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

bool PositionGetInteger(
 ENUM_POSITION_PROPERTY_INTEGER property_id, // идентификатор свойства
 long& long_var // сюда примем значение свойства
 );

Параметры

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

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

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

Значение типа long. В случае неудачного выполнения возвращает 0.

Примечание

Аналогично PositionGetDouble.

 

PositionGetString

Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной при помощи функции PositionGetSymbol или PositionSelect. Свойство позиции должно быть типа string. Существует 2 варианта функции.

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

string PositionGetString(
 ENUM_POSITION_PROPERTY_STRING property_id // идентификатор свойства
 );

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

bool PositionGetString(
 ENUM_POSITION_PROPERTY_STRING property_id, // идентификатор свойства
 string& string_var // сюда примем значение свойства
 );

Параметры

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

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

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

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

Примечание

Аналогично PositionGetDouble.

 

PositionGetTicket

Функция возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с ней при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString.

ulong PositionGetTicket(
 int index // номер в списке позиций
 );

Параметры

index — [in] Индекс позиции в списке открытых позиций, начиная с 0.

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

Тикет позиции. В случае неудачного выполнения возвращает 0.

Примечание

Аналогично PositionGetDouble.

 

OrdersTotal

Возвращает количество действующих ордеров.

int OrdersTotal();

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

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

Примечание

Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке «Торговля» в панели «Инструменты». Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.

При «неттинговом» учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке «Торговля» в панели «Инструменты».

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.

 

OrderGetTicket

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

ulong OrderGetTicket(
 int index // номер в списке ордеров
 );

Параметры

index — [in] Номер ордера в списке текущих ордеров.

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

Значение типа ulong. В случае неудачного выполнения возвращает 0.

Примечание

Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке «Торговля» в панели «Инструменты». Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.

При «неттинговом» учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке «Торговля» в панели «Инструменты».

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.

Функция OrderGetTicket() копирует данные об ордере в программное окружение, и последующие вызовы OrderGetDouble(), OrderGetInteger(), OrderGetString() возвращают ранее скопированные данные. Это означает, что самого ордера может уже и не быть (или же в нем изменились цена открытия, уровни Stop Loss / Take Profit или момент истечения), а данные этому ордеру можно еще получать. Для гарантированного получения свежих данных об ордере рекомендуется вызывать функцию OrderGetTicket() непосредственно перед обращением за ними.

 

OrderSelect

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

bool OrderSelect(
 ulong ticket // тикет ордера
 );

Параметры

ticket — [in] Тикет ордера.

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

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

Примечание

Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке «Торговля» в панели «Инструменты» клиентского терминала.

При «неттинговом» учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке «Торговля» в панели «Инструменты».

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.

Функция OrderSelect() копирует данные об ордере в программное окружение, и последующие вызовы OrderGetDouble(), OrderGetInteger(), OrderGetString() возвращают ранее скопированные данные. Это означает, что самого ордера может уже и не быть (или же в нем изменились цена открытия, уровни Stop Loss / Take Profit или момент истечения), а данные этому ордеру можно еще получать. Для гарантированного получения свежих данных об ордере рекомендуется вызывать функцию OrderSelect() непосредственно перед обращением за ними.

 

OrderGetDouble

Возвращает запрошенное свойство ордера, предварительно выбранного при помощи функции OrderGetTicket или OrderSelect. Свойство ордера должно быть типа double. Существует 2 варианта функции.

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

double OrderGetDouble(
 ENUM_ORDER_PROPERTY_DOUBLE property_id // идентификатор свойства
 );

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

bool OrderGetDouble(
 ENUM_ORDER_PROPERTY_DOUBLE property_id, // идентификатор свойства
 double& double_var // сюда примем значение свойства
 );

Параметры

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

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

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

Значение типа double. В случае неудачного выполнения возвращает 0.

Примечание

Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке «Торговля» в панели «Инструменты» клиентского терминала.

При «неттинговом» учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке «Торговля» в панели «Инструменты».

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.

Для гарантированного получения свежих данных об ордере рекомендуется вызывать функцию OrderSelect() непосредственно перед обращением за ними.

 

OrderGetInteger

Возвращает запрошенное свойство ордера, предварительно выбранного при помощи функции OrderGetTicket или OrderSelect. Свойство ордера должно быть типа datetime, int. Существует 2 варианта функции.

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

long OrderGetInteger(
 ENUM_ORDER_PROPERTY_INTEGER property_id // идентификатор свойства
 );

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

bool OrderGetInteger(
 ENUM_ORDER_PROPERTY_INTEGER property_id, // идентификатор свойства
 long& long_var // сюда примем значение свойства
 );

Параметры

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

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

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

Значение типа long. В случае неудачного выполнения возвращает 0.

Примечание

Аналогично OrderGetDouble.

 

OrderGetString

Возвращает запрошенное свойство ордера, предварительно выбранного при помощи функции OrderGetTicket или OrderSelect. Свойство ордера должно быть типа string. Существует 2 варианта функции.

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

string OrderGetString(
 ENUM_ORDER_PROPERTY_STRING property_id // идентификатор свойства
 );

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

bool OrderGetString(
 ENUM_ORDER_PROPERTY_STRING property_id, // идентификатор свойства
 string& string_var // сюда примем значение свойства
 );

Параметры

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

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

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

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

Примечание

Аналогично OrderGetDouble.

 

HistorySelect

Запрашивает историю сделок и ордеров за указанный период серверного времени.

bool HistorySelect(
 datetime from_date, // с даты
 datetime to_date // по дату
 );

Параметры

from_date — [in] Начальная дата запроса.

to_date — [in] Конечная дата запроса.

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

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

Примечание

Функция HistorySelect() создает в mql5-программе список ордеров и список сделок для дальнейшего обращения к элементам списка посредством соответствующих функций. Размер списка сделок можно узнать с помощью функции HistoryDealsTotal(), размер списка ордеров в истории можно получить с HistoryOrdersTotal(). Перебор элементов списка ордеров лучше всего проводить функцией HistoryOrderGetTicket(), для элементов списка сделок соответственно подходит функция HistoryDealGetTicket().

После применения функции HistoryOrderSelect() список ордеров в истории, доступных mql5-программе, сбрасывается и заполняется заново найденным ордером, если поиск ордера по тикету завершился успешно. То же самое относится к списку сделок, доступных mql5-программе – он сбрасывается функцией HistoryDealSelect() и заполняется заново в случае успешного получения сделки по номеру тикета.

Пример:

void OnStart()
{
   color BuyColor =clrBlue;
   color SellColor=clrRed;

   //--- request trade history
   HistorySelect(0,TimeCurrent());

   //--- create objects
   string name;
   uint total=HistoryDealsTotal();
   ulong ticket=0;
   double price;
   double profit;
   datetime time;
   string symbol;
   long type;
   long entry;

   //--- for all deals
   for(uint i=0;i<total;i++)
   {
     //--- try to get deals ticket
     if((ticket=HistoryDealGetTicket(i))>0)
     {
        //--- get deals properties
        price =HistoryDealGetDouble(ticket,DEAL_PRICE);
        time =(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
        symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
        type =HistoryDealGetInteger(ticket,DEAL_TYPE);
        entry =HistoryDealGetInteger(ticket,DEAL_ENTRY);
        profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
 
        //--- only for current symbol
        if(price && time && symbol==Symbol())
        {
           //--- create price object
           name="TradeHistory_Deal_"+string(ticket);
           if(entry) ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price,0,0);
              else ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price,0,0);
 
           //--- set object properties
           ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0);
           ObjectSetInteger(0,name,OBJPROP_BACK,0);
           ObjectSetInteger(0,name,OBJPROP_COLOR,type?BuyColor:SellColor);
           if(profit!=0) 
              ObjectSetString(0,name,OBJPROP_TEXT,"Profit: "+string(profit));
        }
     }
   }

   //--- apply on chart
   ChartRedraw();
}

 

HistorySelectByPosition

Запрашивает историю сделок и ордеров, имеющих указанный идентификатор позиции.

bool HistorySelectByPosition(
 long position_id // идентификатор позиции - POSITION_IDENTIFIER
 );

Параметры

position_id — [in] Идентификатор позиции, который проставляется на каждом исполненном ордере и на каждой сделке.

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

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

Примечание

Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке «Торговля» в панели «Инструменты». Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке «История» на панели «Инструменты» клиентского терминала.

Функция HistorySelectByPosition() создает в mql5-программе список ордеров и список сделок с указанным идентификатором позиции для дальнейшего обращения к элементам списка посредством соответствующих функций. Размер списка сделок можно узнать с помощью функции HistoryDealsTotal(), размер списка ордеров в истории можно получить с HistoryOrdersTotal(). Перебор элементов списка ордеров лучше всего проводить функцией HistoryOrderGetTicket(), для элементов списка сделок соответственно подходит функция HistoryDealGetTicket().

После применения функции HistoryOrderSelect() список ордеров в истории, доступных mql5-программе, сбрасывается и заполняется заново найденным ордером, если поиск ордера по тикету завершился успешно. То же самое относится к списку сделок, доступных mql5-программе – он сбрасывается функцией HistoryDealSelect() и заполняется заново в случае успешного получения сделки по номеру тикета.

 

HistoryOrderSelect

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

bool HistoryOrderSelect(
 ulong ticket // тикет ордера
 );

Параметры

ticket — [in] Тикет ордера

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

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

Примечание

Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке «Торговля» в панели «Инструменты». Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке «История» на панели «Инструменты» клиентского терминала.

Функция HistoryOrderSelect() очищает в mql5-программе список ордеров из истории, доступных для обращений, и копирует в него один единственный ордер, если выполнение HistoryOrderSelect() завершилось успешно. Если необходимо перебрать все сделки, выбранные функцией HistorySelect(), то лучше использовать функцию HistoryOrderGetTicket().

 

HistoryOrdersTotal

Возвращает количество ордеров в истории. Перед вызовом функции HistoryOrdersTotal() необходимо получить историю сделок и ордеров с помощью функции HistorySelect() или HistorySelectByPosition().

int HistoryOrdersTotal();

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

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

Примечание

Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке «Торговля» в панели «Инструменты». Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть в закладке «История» на панели «Инструменты» клиентского терминала.

 

HistoryOrderGetTicket

Возвращает тикет соответствующего ордера в истории. Перед вызовом функции HistoryOrderGetTicket() необходимо получить историю сделок и ордеров с помощью функции HistorySelect() или HistorySelectByPosition().

ulong HistoryOrderGetTicket(
 int index // номер в списке ордеров
 );

Параметры

index — [in] Номер ордера в списке ордеров.

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

Значение типа ulong. В случае неудачного выполнения возвращает 0.

Примечание

Аналогично HistoryOrdersTotal.

 

HistoryOrderGetDouble

Возвращает запрошенное свойство ордера. Свойство ордера должно быть типа double. Существует 2 варианта функции.

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

double HistoryOrderGetDouble(
 ulong ticket_number, // тикет
 ENUM_ORDER_PROPERTY_DOUBLE property_id // идентификатор свойства
 );

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

bool HistoryOrderGetDouble(
 ulong ticket_number, // тикет
 ENUM_ORDER_PROPERTY_DOUBLE property_id, // идентификатор свойства
 double& double_var // сюда примем значение свойства
 );

Параметры

ticket_number — [in] Тикет ордера.

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

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

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

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

Примечание

Аналогично HistoryOrdersTotal.

 

HistoryOrderGetInteger

Возвращает запрошенное свойство ордера. Свойство ордера должно быть типа datetime, int. Существует 2 варианта функции.

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

long HistoryOrderGetInteger(
 ulong ticket_number, // тикет
 ENUM_ORDER_PROPERTY_INTEGER property_id // идентификатор свойства
 );

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

bool HistoryOrderGetInteger(
 ulong ticket_number, // тикет
 ENUM_ORDER_PROPERTY_INTEGER property_id, // идентификатор свойства
 long& long_var // сюда примем значение свойства
 );

Параметры

ticket_number — [in] Тикет ордера.

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

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

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

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

Примечание

Аналогично HistoryOrdersTotal.

 

HistoryOrderGetString

Возвращает запрошенное свойство ордера. Свойство ордера должно быть типа string. Существует 2 варианта функции.

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

string HistoryOrderGetString(
 ulong ticket_number, // тикет
 ENUM_ORDER_PROPERTY_STRING property_id // идентификатор свойства
 );

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

bool HistoryOrderGetString(
 ulong ticket_number, // тикет
 ENUM_ORDER_PROPERTY_STRING property_id, // идентификатор свойства
 string& string_var // сюда примем значение свойства
 );

Параметры

ticket_number — [in] Тикет ордера.

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

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

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

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

Примечание

Аналогично HistoryOrdersTotal.

 

HistoryDealSelect

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

bool HistoryDealSelect(
 ulong ticket // тикет сделки
 );

Параметры

ticket — [in] Тикет сделки

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

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

Примечание

Не следует путать между собой ордера, сделки и позиции. Каждая сделка является результатом исполнения некоего ордера, каждая позиция является итоговым результатом одной или нескольких сделок.

Функция HistoryDealSelect() очищает в mql5-программе список сделок, доступных для обращений, и копирует в него одну единственную сделку, если выполнение HistoryDealSelect() завершилось успешно. Если необходимо перебрать все сделки, выбранные функцией HistorySelect(), то лучше использовать функцию HistoryDealGetTicket().

 

HistoryDealsTotal

Возвращает количество сделок в истории. Перед вызовом функции HistoryDealsTotal() необходимо получить историю сделок и ордеров с помощью функции HistorySelect() или HistorySelectByPosition().

int HistoryDealsTotal();

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

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

Примечание

Не следует путать между собой ордера, сделки и позиции. Каждая сделка является результатом исполнения некоего ордера, каждая позиция является итоговым результатом одной или нескольких сделок.

 

HistoryDealGetTicket

Выбирает сделку для дальнейшей обработки и возвращает тикет сделки в истории. Перед вызовом функции HistoryDealGetTicket() необходимо получить историю сделок и ордеров с помощью функции HistorySelect() или HistorySelectByPosition().

ulong HistoryDealGetTicket(
 int index // номер сделки
 );

Параметры

index — [in] Номер сделки в списке сделок.

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

Значение типа ulong. В случае неудачного выполнения возвращает 0.

Примечание

Аналогично HistoryDealsTotal.

 

HistoryDealGetDouble

Возвращает запрошенное свойство сделки. Свойство сделки должно быть типа double. Существует 2 варианта функции.

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

double HistoryDealGetDouble(
 ulong ticket_number, // тикет
 ENUM_DEAL_PROPERTY_DOUBLE property_id // идентификатор свойства
 );

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

bool HistoryDealGetDouble(
 ulong ticket_number, // тикет
 ENUM_DEAL_PROPERTY_DOUBLE property_id, // идентификатор свойства
 double& double_var // сюда примем значение свойства
 );

Параметры

ticket_number — [in] Тикет сделки.

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

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

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

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

Примечание

Аналогично HistoryDealsTotal.

 

HistoryDealGetInteger

Возвращает запрошенное свойство сделки. Свойство сделки должно быть типа datetime, int. Существует 2 варианта функции.

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

long HistoryDealGetInteger(
 ulong ticket_number, // тикет
 ENUM_DEAL_PROPERTY_INTEGER property_id // идентификатор свойства
 );

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

bool HistoryDealGetInteger(
 ulong ticket_number, // тикет
 ENUM_DEAL_PROPERTY_INTEGER property_id, // идентификатор свойства
 long& long_var // сюда примем значение свойства
 );

Параметры

ticket_number — [in] Тикет сделки.

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

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

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

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

Примечание

Аналогично HistoryDealsTotal.

 

HistoryDealGetString

Возвращает запрошенное свойство сделки. Свойство сделки должно быть типа string. Существует 2 варианта функции.

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

string HistoryDealGetString(
 ulong ticket_number, // тикет
 ENUM_DEAL_PROPERTY_STRING property_id // идентификатор свойства
 );

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

bool HistoryDealGetString(
 ulong ticket_number, // тикет
 ENUM_DEAL_PROPERTY_STRING property_id, // идентификатор свойства
 string& string_var // сюда примем значение свойства
 );

Параметры

ticket_number — [in] Tикет сделки.

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

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

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

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

Примечание

Аналогично HistoryDealsTotal.