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

 
MrBrooklin #:

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

Суть проблемы такая:

  1. советник открыл позицию. Насколько понимаю - это сделка должна добавиться в историю. В историю где? На сервере моего форекс-дилера или в терминале МТ5 на моём компьютере? Не понятно.
  2. далее позиция останется открытой до тех пор, пока не сработает стоп-лосс или тейк-профит. Это понятно. Но если до закрытия позиции произойдёт отключение электроэнергии и допустим компьютер выключится, или просто по какой-то причине сам закрою терминал МТ5, то где тогда информация по этой сделке сохранится? И будет ли вообще эта информация где-то хранится?

Можете более детально объяснить эти непонятные мне моменты.

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

Данные хранятся на сервере. Терминал их получает в своё окружение и советник затем их использует.

 
Artyom Trishkin #:

Данные хранятся на сервере. Терминал их получает в своё окружение и советник затем их использует.

Тогда странно, почему сегодня советник не нашёл сделку, открытую вчера? Раньше находил. Вот код:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // структура торговой транзакции
   const MqlTradeRequest&        request, // структура запроса
   const MqlTradeResult&         result   // структура ответа
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

Небольшое добавление. Может ли ролловер каким-то образом влиять на тикет открытой сделки, а именно менять его?

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

 
MrBrooklin #:

Тогда странно, почему сегодня советник не нашёл сделку, открытую вчера? Раньше находил. Вот код:

Небольшое добавление. Может ли ролловер каким-то образом влиять на тикет открытой сделки, а именно менять его?

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

По идентификатору открытой позиции Вы можете найти все её сделки и ордера.

 
MrBrooklin #:

Тогда странно, почему сегодня советник не нашёл сделку, открытую вчера? Раньше находил. Вот код:

Небольшое добавление. Может ли ролловер каким-то образом влиять на тикет открытой сделки, а именно менять его?

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

Сервер при совершении сделки отправил в терминал «сообщение» о том что сделка заключена и забыл об этом. Ему, серверу, глубоко плевать получил терминал это или нет. Так-что если в момент совершения сделки терминал выключен, то о сделке можно узнать только прочитав историю с момента закрытия терминала до текущего момента.

 
Alexey Viktorov #:
Так-что если в момент совершения сделки терминал выключен, то о сделке можно узнать только прочитав историю с момента закрытия терминала до текущего момента.

Привет, Алексей! В момент совершения сделки, а именно в момент открытия позиции, терминал был включен, т.к. советник её и открывал.

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

 
Artyom Trishkin #:

По идентификатору открытой позиции Вы можете найти все её сделки и ордера.

Понятно. Пошёл дальше изучать Справочник.

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

 
MrBrooklin #:

Привет, Алексей! В момент совершения сделки, а именно в момент открытия позиции, терминал был включен, т.к. советник её и открывал.

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

А как понять это

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

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

MrBrooklin, 2023.10.17 16:48

Тогда странно, почему сегодня советник не нашёл сделку, открытую вчера? Раньше находил. Вот код:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // структура торговой транзакции
   const MqlTradeRequest&        request, // структура запроса
   const MqlTradeResult&         result   // структура ответа
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

Небольшое добавление. Может ли ролловер каким-то образом влиять на тикет открытой сделки, а именно менять его?

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

Так вчера он её и находил. А сегодня уже поезд ту-ту, далеко в пути…

Если вчера был ордер, отложенный, а сегодня уже позиция, о чём я и говорил, значит сделка была в момент когда терминал был закрыт… Соответственно ищите её по ID позиции, о чём и говорит Артём.

 
Alexey Viktorov #:
Соответственно ищите её по ID позиции, о чём и говорит Артём.

Алексей, мы, что, уже перешли на Вы? ))

Да, по поводу ID позиции уже понял. Попробую разобраться самостоятельно при помощи:

long position_ID=HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);

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

 
MrBrooklin #:

Тогда странно, почему сегодня советник не нашёл сделку, открытую вчера? 

Алексей, возможно сложно выразил свою мысль, но суть её такова - вчера советник открыл позицию, т.е. совершил сделку, а не открыл сделку, как было написано мною ранее. Сегодня советник должен был согласно алгоритма увидеть открытую вчера позицию и выполнить определенные манипуляции. Но, советник, по непонятным пока мне причинам, не увидел уже открытую вчера позицию и, соответственно, не предпринял никаких действий. Надеюсь, сейчас более понятно выразил свою мысль?

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

 
MrBrooklin #:

Алексей, возможно сложно выразил свою мысль, но суть её такова - вчера советник открыл позицию, т.е. совершил сделку, а не открыл сделку, как было написано мною ранее. Сегодня советник должен был согласно алгоритма увидеть открытую вчера позицию и выполнить определенные манипуляции. Но, советник, по непонятным пока мне причинам, не увидел уже открытую вчера позицию и, соответственно, не предпринял никаких действий. Надеюсь, сейчас более понятно выразил свою мысль?

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

Володь, мы с тобой много говорили об этом голосом. Я всё объяснил как мог, ты вроде всё понял, но вот опять…

Функция OnTradeTransaction это функция обработки события. Совершение сделки это событие которое было вчера. Вот вчера и должна была отработать функция OnTradeTransaction, а никак не сегодня. Сегодня уже нет события совершения ЭТОЙ сделки… Сегодня были и наверное ещё будут, но другие.

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