Обсуждение статьи "Торговые транзакции. Структуры запросов и ответов, описание и вывод в журнал"

 

Опубликована статья Торговые транзакции. Структуры запросов и ответов, описание и вывод в журнал:

В статье рассмотрим работу со структурами торговых запросов — для создания запроса, его предварительной проверки перед отправкой на сервер, ответ сервера на торговый запрос и структуру торговых транзакций. Создадим простые удобные функции для отправки торговых приказов на сервер и, на основе всего рассмотренного, создадим советник-информер о торговых транзакциях.

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

Автор: Artyom Trishkin

 

Спасибо, Артём, за то, что сконцентрировали всю необходимую информацию в одной статье! Добавил себе в избранное.

С уважением, Владимир.

 

Спасибо за интересную статью. Но жаль, что очень мало внимания уделено функции  OrderCheck()

Надеюсь на отдельную статью посвящённую этой полезной функции…

 
Alexey Viktorov #:

Спасибо за интересную статью. Но жаль, что очень мало внимания уделено функции  OrderCheck()

Надеюсь на отдельную статью посвящённую этой полезной функции…

В каких-то давних релизах MT5 нарывался, что OrderCheck() иногда браковала запросы, которые реально вполне успешно исполнялись. Отказался от неё и не хочу в боевых роботах вновь тестировать эти грабли, хоть, возможно, и починили.

 
Alexey Viktorov #:

Спасибо за интересную статью. Но жаль, что очень мало внимания уделено функции  OrderCheck()

Надеюсь на отдельную статью посвящённую этой полезной функции…

Просто писал некую "расширенную справку" - много справочной информации. А по OrderCheck вроде всё лаконично и без излишеств. Да и в ней самой нет излишеств. Расписал что, чем и как заполняются поля. Не во всех случаях они заполняются. Ответ функции с кодом почти всегда "ОК", так как привык заполнять торговый запрос корректно. Если брать ситуации про "почти", то это специально вводил некорректные данные для проверки работы. Т.е., что там расписывать, да ещё и на статью - я ума не приложу.

 
Artyom Trishkin #:

Просто писал некую "расширенную справку" - много справочной информации. А по OrderCheck вроде всё лаконично и без излишеств. Да и в ней самой нет излишеств. Расписал что, чем и как заполняются поля. Не во всех случаях они заполняются. Ответ функции с кодом почти всегда "ОК", так как привык заполнять торговый запрос корректно. Если брать ситуации про "почти", то это специально вводил некорректные данные для проверки работы. Т.е., что там расписывать, да ещё и на статью - я ума не приложу.

Как минимум мало кто внимательно читал структуру MqlTradeCheckResult

struct MqlTradeCheckResult
  {
   uint         retcode;             // Код ответа
   double       balance;             // Баланс после совершения сделки
   double       equity;              // Эквити после совершения сделки
   double       profit;              // Плавающая прибыль
   double       margin;              // Маржевые требования
   double       margin_free;         // Свободная маржа
   double       margin_level;        // Уровень маржи
   string       comment;             // Комментарий к коду ответа (описание ошибки)
  };

И чаще всего говорят, что эта функция предназначена исключительно, как и написано в документации

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

Но сто́ит обратить внимание на поля структуры «Баланс после …» и «Эквити после…». Про «Маржинальные требования» я вообще молчу. А эти параметры весьма полезны. К примеру если после совершения сделки на счёте останется «сорок копеек» эквити… Нужно-ли совершать такую сделку, даже если и средств достаточно, и другие параметры ордера в порядке? Конечно можно получить это значение другим методом, но на мой взгляд одной функцией получить несколько полезных параметров гораздо выгодней. 

Да и по моему опыту её использования при успешной проверке код ответа фиксирует неправильные цены SL и/или TP. И не только их. Вот об этом и хотелось-бы получить статью. О том, какие ещё коды работают…

К сожалению  OrderCheck() не сообщает об ошибке 

10018

TRADE_RETCODE_MARKET_CLOSED

Рынок закрыт


Так вот может разработчики обратят наконец-то внимание на эту проблему…

 
Alexey Viktorov #:

Как минимум мало кто внимательно читал структуру MqlTradeCheckResult

И чаще всего говорят, что эта функция предназначена исключительно, как и написано в документации

Но сто́ит обратить внимание на поля структуры «Баланс после …» и «Эквити после…». Про «Маржинальные требования» я вообще молчу. А эти параметры весьма полезны. К примеру если после совершения сделки на счёте останется «сорок копеек» эквити… Нужно-ли совершать такую сделку, даже если и средств достаточно, и другие параметры ордера в порядке? Конечно можно получить это значение другим методом, но на мой взгляд одной функцией получить несколько полезных параметров гораздо выгодней. 

Да и по моему опыту её использования при успешной проверке код ответа фиксирует неправильные цены SL и/или TP. И не только их. Вот об этом и хотелось-бы получить статью. О том, какие ещё коды работают…

К сожалению  OrderCheck() не сообщает об ошибке 

10018

TRADE_RETCODE_MARKET_CLOSED

Рынок закрыт


Так вот может разработчики обратят наконец-то внимание на эту проблему…

Не понял о каких SL и TP ты говоришь? Их нет в полях структуры...

А про эквити, баланс после совершения сделки ... Ну.., ты знаешь, я думал сказать, что это полезно знать, и что эти данные нужно анализировать перед отправкой приказа на сервер. Но разве я об этом не сказал? Или нужно было прямо внимание заострить - мол, не стоит открывать позицию, если у вас на булочку потом не хватит ) ... Но, понимаешь, я думал, и думаю, что это же и так понятно. Поэтому просто написал, что можно анализировать заполненные поля этой структуры. А о том, что "Рынок закрыт" не возвращается, я не написал (хотя хотел) просто потому, что забыл ) Да и подумалось, что это коды возврата торгового сервера. Они на все случаи жизни. Видимо - не на этот случай этот код. Он нормально возвращается в OrderSend. Хотя да, чтобы проверить закрыт ли рынок, нужно отсылать ордер - слабоватое решение. Но что есть.

 
Artyom Trishkin #:

Не понял о каких SL и TP ты говоришь? Их нет в полях структуры...

Я говорю о кодах 

10014

TRADE_RETCODE_INVALID_VOLUME

Неправильный объем в запросе

10015

TRADE_RETCODE_INVALID_PRICE

Неправильная цена в запросе

10016

TRADE_RETCODE_INVALID_STOPS

Неправильные стопы в запросе


Эти коды в структуру MqlTradeCheckResult возвращаются и отлично анализируются. 

А в прочем, если нет желания писать, или Рашид не приветствует, я не настаиваю.

 
Alexey Viktorov #:

Я говорю о кодах 

10014

TRADE_RETCODE_INVALID_VOLUME

Неправильный объем в запросе

10015

TRADE_RETCODE_INVALID_PRICE

Неправильная цена в запросе

10016

TRADE_RETCODE_INVALID_STOPS

Неправильные стопы в запросе


Эти коды в структуру MqlTradeCheckResult возвращаются и отлично анализируются. 

А в прочем, если нет желания писать, или Рашид не приветствует, я не настаиваю.

Ну а что тут нового можно написать кроме как "Можно проанализировать коды ответа"... Ну получил человек такой код - понятно же, что стопы не правильные. Ну значит программно нужно это обработать - чтобы не было неправильных стопов. Анализирование кодов ответа тоже ведь является анализом. Как и полей структуры. Т.е., всё уже сказано - анализируйте и делайте выводы. Или ты считаешь, что нужно расписать каждый ответ сервера, и какие действия нужно при этом сделать? Ну такое реализовано в библиотеке, которую я ещё не дописал, но торговля там давно сделана. С полным анализом и внесением корректировок. Зачем повторяться?

 
Artyom Trishkin #:

Ну а что тут нового можно написать кроме как "Можно проанализировать коды ответа"... Ну получил человек такой код - понятно же, что стопы не правильные. Ну значит программно нужно это обработать - чтобы не было неправильных стопов. Анализирование кодов ответа тоже ведь является анализом. Как и полей структуры. Т.е., всё уже сказано - анализируйте и делайте выводы. Или ты считаешь, что нужно расписать каждый ответ сервера, и какие действия нужно при этом сделать? Ну такое реализовано в библиотеке, которую я ещё не дописал, но торговля там давно сделана. С полным анализом и внесением корректировок. Зачем повторяться?

Для того чтобы получить и проанализировать код возврата, надо как минимум понимать, что это за функция и понять её полезность. Именно об этом я и говорю. Статья даст расширенное понимание функции, а не только описание из документации.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "Торговые транзакции. Структуры запросов и ответов, описание и вывод в журнал"

Alexey Viktorov, 2023.08.03 13:40

Как минимум мало кто внимательно читал структуру MqlTradeCheckResult

struct MqlTradeCheckResult
  {
   uint         retcode;             // Код ответа
   double       balance;             // Баланс после совершения сделки
   double       equity;              // Эквити после совершения сделки
   double       profit;              // Плавающая прибыль
   double       margin;              // Маржевые требования
   double       margin_free;         // Свободная маржа
   double       margin_level;        // Уровень маржи
   string       comment;             // Комментарий к коду ответа (описание ошибки)
  };

И чаще всего говорят, что эта функция предназначена исключительно, как и написано в документации

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

На этом я откланиваюсь.
 
Artyom Trishkin #:
Хотя да, чтобы проверить закрыт ли рынок, нужно отсылать ордер - слабоватое решение. Но что есть.

Неужели для создателей языка программирования MQL5 это до сих пор такая не посильная задача - функция MarketСlosed без танцев с бубном?

С уважением, Владимир.

Причина обращения: