Вопрос о функции OnTradeTransaction - страница 16

 
Andrey Kaunov #:

Со всем уважением к вам, но я не тестировщик, и зарплату за это не получаю.

Здесь все в таком же положении.

 
Andrey Kaunov #:

Со всем уважением к вам, но я не тестировщик, и зарплату за это не получаю. 

Приведённых мною данных более чем достаточно, чтобы констатировать, что проблема имеет место быть. Любой желающий может её смоделировать. А я и так потратил слишком много времени на всё это. К команде разработчиков я вообще никакого отношения не имею, и тем не менее переживал за решение этого вопроса. Удачи вам в решении вопроса, если это вообще кому то нужно....

Не помню авторства цитаты, но: "Все мы в этой жизни бета-тестеры".

И, в данном случае наш профит не в зарплате, а в более правильной работе MT.

 
JRandomTrader #:

Не помню авторства цитаты, но: "Все мы в этой жизни бета-тестеры".

И, в данном случае наш профит не в зарплате, а в более правильной работе MT.

Почти 10 страниц форума я пытаюсь показать наличие ошибки, и вы мне пишите, что я не борюсь за это. Хоть кто то попытался её смоделировать? Проще написать костыль, чтобы всё работало, чем до кого то достучаться. Такова реальность

fxsaber #:

Здесь все в таком же положении.

Анекдотичность ситуации особенно заметна, если переложить её на моё отношение к клиенту во Фриланс. Я ему пишу, докажи что ошибка есть, а то я с другими клиентами занимаюсь, мне некогда. Он молча это читает, и нажимает кнопку Арбитраж.
 
Andrey Kaunov #:

Почти 10 страниц форума я пытаюсь показать наличие ошибки, и вы мне пишите, что я не борюсь за это. Хоть кто то попытался её смоделировать? Проще написать костыль, чтобы всё работало, чем до кого то достучаться. Такова реальность

Анекдотичность ситуации особенно заметна, если переложить её на моё отношение к клиенту во Фриланс. Я ему пишу, докажи что ошибка есть, а то я с другими клиентами занимаюсь, мне некогда. Он молча это читает, и нажимает кнопку Арбитраж.

Да, реальность такова, что пока не ткнёшь MQ носом в ошибку (т.е., пока не предоставишь минимальный код, гарантировано воспроизводящий проблему или пока на одну и ту же серьёзную ошибку не укажет толпа народу), они не почешутся.

Что очень сильно затрудняет выявление "плавающих" проблем - данная конкретная, вероятно, относится к таковым.

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

Во фриланс не лезу, на бирже я больше заработаю с меньшими усилиями.

 

Запустил у себя:

//+------------------------------------------------------------------+
//|                                                 OTT_Err_test.mq5 |
//+------------------------------------------------------------------+
#property copyright "JRandomTrader"
#property version   "1.00"

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   
  }

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
   static ulong last_deals[50]={};
   static int last_index=0;
   int i;

   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(trans.deal==0)return;
      for(i=0;i<ArraySize(last_deals);i++)
        {
         if(last_deals[i]==trans.deal)
           {
            Print("Duplicate TRADE_TRANSACTION_DEAL_ADD, Deal:",trans.deal);
           }
        }
      last_deals[last_index++]=trans.deal;
      if(last_index>=ArraySize(last_deals))last_index=0;
     }
  }
 

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

Вот поставил только отложенный ордер и получил результат

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 {
  printf("type - тип торговой транзакции: %s", EnumToString(trans.type));
 }/******************************************************************/
2023.03.28 14:41:46.390 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_ORDER_ADD
2023.03.28 14:41:46.390 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_REQUEST
2023.03.28 14:41:46.390 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2023.03.28 14:41:46.390 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2023.03.28 14:41:46.390 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_REQUEST

И вот закрытие двумя сделками

2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_ORDER_ADD
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_REQUEST
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_REQUEST
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_DEAL_ADD


2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_ORDER_DELETE
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_HISTORY_ADD
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_DEAL_ADD

И после всего, когда уже позиция была закрыта

2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_DEAL_UPDATE
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_DEAL_UPDATE
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_DEAL_UPDATE
2023.03.28 14:56:10.980 eOnTradeTransactionTest (SBPR-6.23,M5)  type - тип торговой транзакции: TRADE_TRANSACTION_DEAL_UPDATE
 
Alexey Viktorov #:

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

Вот поставил только отложенный ордер и получил результат

TRADE_TRANSACTION_ORDER_UPDATE может появляться несколько раз - при изменении статуса ордера или при модификации, это нормально.

TRADE_TRANSACTION_REQUEST - тем более, при отправке ордера и при получении ответа от сервера с результатом этой отправки.

Ненормально то, что в TRADE_TRANSACTION_ORDER_ADD, которая приходит раньше всех, нет информации о том, кто этот ордер выставил - ни Magic'а, ни ReqID.
 
JRandomTrader #:

Что очень сильно затрудняет выявление "плавающих" проблем - данная конкретная, вероятно, относится к таковым.

JRandomTrader #:

Запустил у себя:

Проблема проявляется у брокера "Открытие" (срочный рынок) постоянно. Вероятно, у других брокеров, там где возможно частичное срабатывание ордеров, тоже будет. Но не утверждаю.

 
Andrey Kaunov #:

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

У меня тоже "Открытие".

Полный код я привёл, каждый желающий может запустить.

 
JRandomTrader #:

TRADE_TRANSACTION_ORDER_UPDATE может появляться несколько раз - при изменении статуса ордера или при модификации, это нормально.

TRADE_TRANSACTION_REQUEST - тем более, при отправке ордера и при получении ответа от сервера с результатом этой отправки.

Ненормально то, что в TRADE_TRANSACTION_ORDER_ADD, которая приходит раньше всех, нет информации о том, кто этот ордер выставил - ни Magic'а, ни ReqID.
  if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
   {
    if(HistoryDealSelect(trans.deal))
      printf("Magic сделки: %I64u", HistoryDealGetInteger(trans.deal, DEAL_MAGIC));
   }
Причина обращения: