Как узнать, какое сообщение поступило первым в OnTradeTransaction TRADE_TRANSACTION_HISTORY_ADD или TRADE_TRANSACTION_DEAL_ADD? - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
prostotrader
8012
prostotrader  
prostotrader:

 Всем спасибо, проблему решил так:

Про получении  TRADE_TRANSACTION_HISTORY_ADD

Проверяю объёмы сделок по данному инструменту с нужным тикетом ордера, если их меньше,

чем инициировано в рыночном ордере, то будет ещё одно TRADE_TRANSACTION_DEAL_ADD 

Не работает :(

Для получкния обёма сделок использую эту функцию

 

//+------------------------------------------------------------------+
//| Expert Get Deals volume function                                 |
//+------------------------------------------------------------------+
double GetDealsVolume(const string a_symbol,const ulong a_ticket)
  {
   double volume=0;
   int deals=HistoryDealsTotal();
   if(deals>0)
     {
      for(int i=deals-1; i>=0; i--)
        {
         ulong deal_ticket=HistoryDealGetTicket(i);
         ulong order_ticket=ulong(HistoryDealGetInteger(deal_ticket,DEAL_ORDER));
         if(( order_ticket>0) && (order_ticket==a_ticket))
           {
            volume+=HistoryDealGetDouble(deal_ticket,DEAL_VOLUME);
           }
        }
     }
   return(volume);
  }

 Может быть терминал не успевает обновлять данные о сделках в истории?

Или в функции ошибка? 

prostotrader
8012
prostotrader  

Млин... Нашел ошибку.

Забыл сказать HistorySelect()

Vasiliy Sokolov
29781
Vasiliy Sokolov  
prostotrader:

Видимо, я не совсем правильно поставил вопрос.

На ФОРТС, при парном трейдинге или календарном спреде, есть правило, которое минимизирует

проскальзывание, при открытии позиций.

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

должна производится как можно быстрее и рыночным ордером.

Заливка действительно будет происходить частями. Но объем каждой из частей Вы сможете узнать лишь тогда, когда придет новая сделка в историю. Решение видится так: ловим TRADE_TRANSACTION_HISTORY_ADD, после чего сразу запрашиваем тикет сделки и ее объем. Формируем приказ по второй ноге и бьем по рынку. 
prostotrader
8012
prostotrader  
Vasiliy Sokolov:
Заливка действительно будет происходить частями. Но объем каждой из частей Вы сможете узнать лишь тогда, когда придет новая сделка в историю. Решение видится так: ловим TRADE_TRANSACTION_HISTORY_ADD, после чего сразу запрашиваем тикет сделки и ее объем. Формируем приказ по второй ноге и бьем по рынку. 
Спасибо, я так и делаю, но суть вопроса была в дугом (я уже пофиксил проблему).
prostotrader
8012
prostotrader  

Оказывается не пофиксил:

https://www.mql5.com/ru/forum/93098/page4#comment_2702122 

"Плавающая" ошибка PositionSelect()
"Плавающая" ошибка PositionSelect()
  • отзывов: 8
  • www.mql5.com
Форум трейдеров MQL5.community
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий