|
OrderSend
Функция OrderSend() предназначена для совершения торговых операций через отправку запросов на торговый сервер.
bool OrderSend( |
Параметры
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.
Пример:
//--- значения для ORDER_MAGIC |
Смотри также
Типы торговых операций, Структура торгового запроса, Структура результатов проверки торгового запроса, Структура результата торгового запроса