ФОРТС. Вопросы по исполнению - страница 100

 

САм код

//+------------------------------------------------------------------+
//|                                                    DelayTest.mq5 |
//|                                      Copyright 2017 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
#define max_orders 100  
//
struct MY_ORDERS
  {
   uint              req_id[max_orders];
   ulong             ticket[max_orders];
   ulong             magic[max_orders];
  };
MY_ORDERS my_orders;
ulong st_magic=9988776655;
//+------------------------------------------------------------------+
//| Expert remove order function                                     |
//+------------------------------------------------------------------+
void RemoveOrder(const ulong a_ticket,const int idx)
  {
   my_orders.req_id[idx]=0;
   MqlTradeRequest request = {0};
   MqlTradeResult  result  = {0};
   request.action= TRADE_ACTION_REMOVE;
   request.order = a_ticket;
   if(OrderSendAsync(request,result))
     {
      my_orders.req_id[idx]=result.request_id;
     }
   else
     {
      Print(__FUNCTION__,": Ордер не отправлен! Билет = ",a_ticket," Причина: ",result.retcode);
     }
  }
//+------------------------------------------------------------------+
//| Expert place order function                                      |
//+------------------------------------------------------------------+
void PlaceOrder(double price,int idx,ulong magic)
  {
   MqlTradeRequest request = {0};
   MqlTradeResult  result  = {0};
   my_orders.ticket[idx] = 0;
   my_orders.req_id[idx] = 0;
   my_orders.magic[idx]=magic;
   request.action = TRADE_ACTION_PENDING;
   request.magic  = magic;
   request.symbol = Symbol();
   request.volume = 1;
   request.price  = price;
   request.type=ORDER_TYPE_SELL_LIMIT;
   request.comment="Отложенный ордер...";
   request.type_filling=ORDER_FILLING_RETURN;
   request.type_time=ORDER_TIME_DAY;
   if(OrderSendAsync(request,result))
     {
      my_orders.req_id[idx]=result.request_id;
      magic++;
     }
   else
     {
      Print(__FUNCTION__,": Ордер не отправлен! Порядковый номер: ", idx, " Причина: ",result.retcode);
     }
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   double step=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE);
   double max_price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX);
   for(int i=0; i<max_orders;i++)
     {
      PlaceOrder(max_price,i,st_magic);
      max_price-=step;
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   for(int i=0; i<max_orders;i++)
     {
      if(my_orders.ticket[i]>0)
        {
         RemoveOrder(my_orders.ticket[i],i);
        }
     }
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//    Print("Trans type: ", EnumToString(trans.type), "; Order satte: ", EnumToString(trans.order_state));
   switch(trans.type)
     {
      case TRADE_TRANSACTION_REQUEST:
         for(int i=0; i<max_orders;i++)
           {
            if((my_orders.req_id[i]==result.request_id) && (my_orders.req_id[i]>0))
              {
               my_orders.ticket[i]=result.order;
               break;
              }
           }
         break;
      case TRADE_TRANSACTION_HISTORY_ADD:
         for(int i=0; i<max_orders;i++)
           {
            if((my_orders.ticket[i]==trans.order) && (my_orders.ticket[i]>0))
              {
               my_orders.ticket[i]=0;
               Print(__FUNCTION__,": Ордер удалён. Билет = ",trans.order);
               break;
              }
           }
         break;
      case TRADE_TRANSACTION_ORDER_UPDATE:
         switch(trans.order_state)
           {
            case ORDER_STATE_PLACED:
               for(int i=0; i<max_orders;i++)
                 {
                  if((my_orders.ticket[i]==trans.order) && (my_orders.ticket[i]>0))
                    {
                     RemoveOrder(my_orders.ticket[i],i);
                     Print(__FUNCTION__,": Ордер установлен. Билет = ",trans.order);
                     break;
                    }
                 }
               break;
           }
         break;
     }
  }
//+------------------------------------------------------------------+
 
prostotrader:

У меня 4000 транзакций в день, каждая транзакция минимум 5-6 раз "дёргает" OnTradeTransaction

Кто будет разбираться в этих "портянках" :) Ведь к ним нужны логи и терминала к тому же, плюс логи Сервера МТ5.

Если логи будут занимать гигабайты - и в них буду разбираться. Логи сервера не нужны.


Всем, кто утверждает, что в OnTradeTransaction что-то не приходит, крайне рекомендую запустить этот советник

// Советник записывает подробно каждый OnTradeTransaction в файл.

// Время последнего тика символа
long GetSymbolTime( const string Symb )
{
  MqlTick Tick;
  
  return(SymbolInfoTick(Symb, Tick) ? Tick.time_msc : 0);
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
  long Res = 0;
  
  for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
  {
    const long TmpTime = GetSymbolTime(SymbolName(i, true));
    
    if (TmpTime > Res)
      Res = TmpTime;
  }
  
  return(Res);
}

// Текущее время на торговом сервере без учета пинга
long GetCurrenTime( void )
{
  static ulong StartTime = GetMicrosecondCount();
  static long PrevTime = 0;
  
  const long TmpTime = GetMarketWatchTime();
  
  if (TmpTime > PrevTime)
  {
    PrevTime = TmpTime;
    
    StartTime = GetMicrosecondCount();
  }
  
  return(PrevTime + (long)((GetMicrosecondCount() - StartTime) / 1000));
}

string TimeToString( const long Value )
{
  return((string)(datetime)(Value / 1000) + "." + (string)IntegerToString(Value % 1000, 3, '0'));
}

class FILE
{
public:
  const string Name;
  const int handle;

#define _H(A) if (this.handle != INVALID_HANDLE) A
  
  FILE( const string FileName ) : Name(FileName), handle(FileOpen(this.Name, FILE_READ | FILE_WRITE | FILE_IS_TEXT))
  {
    _H(FileSeek(this.handle, 0, SEEK_END));
  }
  
  ~FILE() { _H(FileClose(this.handle)); }
  
  uint Write( const string Str ) const
  {
    return(FileWrite(this.handle, Str));
  }  
};

void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{ 
  static FILE File(__FUNCTION__ + ".txt");
  
  File.Write(TimeToString(GetCurrenTime()) + "\n" + ToString(Trans) + ToString(Request) + ToString(Result));
}

#define TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

string ToString( const MqlTradeTransaction &Trans )
{
  return(TOSTRING(Trans.deal) + TOSTRING(Trans.order) + TOSTRING(Trans.symbol) +
         TOSTRING2(Trans.type) + TOSTRING2(Trans.order_type) + TOSTRING2(Trans.order_state) +
         TOSTRING2(Trans.deal_type) + TOSTRING2(Trans.time_type) +
         TOSTRING(Trans.time_expiration) + TOSTRING(Trans.price) + TOSTRING(Trans.price_trigger) + 
         TOSTRING(Trans.price_sl) + TOSTRING(Trans.price_tp) + TOSTRING(Trans.volume) + 
         TOSTRING(Trans.position) + TOSTRING(Trans.position_by));
}

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

string ToString( const MqlTradeResult &Result )
{
  return(TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
         TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +  
         TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +  
         TOSTRING(Result.retcode_external));
}


Результат в файле будет выглядеть так

2018.02.28 14:28:27.907
Trans.deal = 0
Trans.order = 213465763
Trans.symbol = EURUSD
Trans.type = TRADE_TRANSACTION_ORDER_ADD (0)
Trans.order_type = ORDER_TYPE_SELL (1)
Trans.order_state = ORDER_STATE_STARTED (0)
Trans.deal_type = DEAL_TYPE_BUY (0)
Trans.time_type = ORDER_TIME_GTC (0)
Trans.time_expiration = 1970.01.01 00:00:00
Trans.price = 1.22178
Trans.price_trigger = 0.0
Trans.price_sl = 0.0
Trans.price_tp = 0.0
Trans.volume = 1.0
Trans.position = 0
Trans.position_by = 0
Request.action = ENUM_TRADE_REQUEST_ACTIONS::0 (0)
Request.magic = 0
Request.order = 0
Request.symbol = 
Request.volume = 0.0
Request.price = 0.0
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_BUY (0)
Request.type_filling = ORDER_FILLING_FOK (0)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Result.retcode = 0
Result.deal = 0
Result.order = 0
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = 
Result.request_id = 0
Result.retcode_external = 0

2018.02.28 14:28:27.913
Trans.deal = 196986814
Trans.order = 213465763
Trans.symbol = EURUSD
Trans.type = TRADE_TRANSACTION_DEAL_ADD (6)
....

Если даже такого лога нет, то любые утверждения на тему OnTradeTransaction - говорильня, не более.


ЗЫ Время не идеально считается в данном случае, но не стал усложнять выдранное из другого контекста решение.

Файлы:
 
fxsaber:

Если логи будут занимать гигабайты - и в них буду разбираться. Логи сервера не нужны.


Всем, кто утверждает, что в OnTradeTransaction что-то не приходит, крайне рекомендую запустить этот советник


Результат в файле будет выглядеть так

Если даже такого лога нет, то любые утверждения на тему OnTradeTransaction - говорильня, не более.


ЗЫ Время не идеально считается в данном случае, но не стал усложнять выдранное из другого контекста решение.

Зачем такой "огород" городить?

Достаточно будет:

void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
    Print("Trans type: ", EnumToString(trans.type), "; Order satte: ", EnumToString(trans.order_state), " Order ticket: ", trans.order);
}
 
prostotrader:

Зачем такой "огород" городить?

Достаточно будет:

Недостаточно.

 

Открытие руками, тормоза подтверждаются

2018.03.14 10:01:29.516 Trades  '289': exchange sell 10.00 Si-3.18 at market
2018.03.14 10:01:40.680 Trades  '289': accepted exchange sell 10.00 Si-3.18 at market
2018.03.14 10:01:40.692 Trades  '289': exchange sell 10.00 Si-3.18 at market placed for execution
2018.03.14 10:01:40.781 Trades  '289': order #85223736 sell 10.00 / 10.00 Si-3.18 at market done in 11265.537 ms
2018.03.14 10:01:40.782 Trades  '289': deal #47039430 sell 3.00 Si-3.18 at 57027 done (based on order #85223736)
2018.03.14 10:01:40.786 Trades  '289': deal #47039431 sell 2.00 Si-3.18 at 57026 done (based on order #85223736)
2018.03.14 10:01:40.787 Trades  '289': deal #47039432 sell 3.00 Si-3.18 at 57026 done (based on order #85223736)
2018.03.14 10:01:40.790 Trades  '289': deal #47039433 sell 1.00 Si-3.18 at 57026 done (based on order #85223736)
2018.03.14 10:01:40.795 Trades  '289': deal #47039434 sell 1.00 Si-3.18 at 57025 done (based on order #85223736)

И главное, кто заплатит за это безобразие...

 
Aleksey Vyazmikin:

Открытие руками, тормоза подтверждаются

И главное, кто заплатит за это безобразие...

Напишите брокеру, приложив этот лог.

Мы не платим разработчику, поэтому и спрашивать с них сложно, да и в лицинзионном соглашении

написано (как и всё ПО) что никто ни за что не отвечает.

 
prostotrader:

Напишите брокеру, приложив этот лог.

Мы не платим разработчику, поэтому и спрашивать с них сложно, да и в лицинзионном соглашении

написано (как и всё ПО) что никто ни за что не отвечает.

Это риторический вопрос был.

 
Aleksey Vyazmikin:

Это риторический вопрос был.

:)

Но, всё-равно, напишите брокеру

 

Изменил немного логирование эксперта и вот что получается:

Функция CheckOrders() срабатывает, если нет ответа от сервера в течении 1-1,5 сек.

Если нет билета ордера, то она выдвёт сообщение

CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...

 Если билет получен, то вызывается функция ProcessOrders(), которая проверяет что произошло с ордером

вот результат:

2018.03.19 10:00:02.248 Trades  'xxxxx': buy limit 2.00 TRNF-9.18 at 168831
2018.03.19 10:00:02.254 Trades  'xxxxx': accepted buy limit 2.00 TRNF-9.18 at 168831
2018.03.19 10:00:02.257 Trades  'xxxxx': buy limit 2.00 TRNF-9.18 at 168831 placed for execution in 8.978 ms
2018.03.19 10:00:06.380 Trades  'xxxxx': modify order #85508034 buy limit 2.00 TRNF-9.18 at 168831 sl: 0 tp: 0 -> 170108, sl: 0 tp: 0
2018.03.19 10:00:08.318 Trades  'xxxxx': accepted modify order #85508034 buy limit 2.00 TRNF-9.18 at 168831 sl: 0 tp: 0 -> 170108, sl: 0 tp: 0
2018.03.19 10:00:08.335 Trades  'xxxxx': modify order #85508034 buy limit 2.00 TRNF-9.18 at 168831 sl: 0 tp: 0 -> 170108, sl: 0 tp: 0 placed for execution in 1955.038 ms
2018.03.19 10:00:08.364 Trades  'xxxxx': modify order #85508034 buy limit 2.00 TRNF-9.18 at 170108 sl: 0 tp: 0 -> 170110, sl: 0 tp: 0
2018.03.19 10:00:08.364 Trades  'xxxxx': modify #85508034 buy limit 2.00 TRNF-9.18 -> price: 170110, sl: 0, tp: 0) done in 0.390 ms
2018.03.19 10:01:00.575 Trades  'xxxxx': buy limit 2.00 TRNF-9.18 at 170112
2018.03.19 10:01:01.581 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:02.591 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:03.606 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:04.627 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:05.633 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:06.647 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:07.662 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:08.677 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:09.689 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:10.708 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:11.718 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:12.732 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:13.764 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:15.273 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:16.287 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:17.301 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:18.319 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:19.332 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:20.343 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:21.357 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:22.371 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:23.388 trader (TRNF-6.18,M1)   CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается...
2018.03.19 10:01:24.263 Trades  'xxxxx': accepted buy limit 2.00 TRNF-9.18 at 170112
2018.03.19 10:01:24.399 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330
2018.03.19 10:01:25.413 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330
2018.03.19 10:01:25.685 Trades  'xxxxx': buy limit 2.00 TRNF-9.18 at 170112 placed for execution in 25114.794 ms
2018.03.19 10:01:26.427 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330
2018.03.19 10:01:27.444 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330
2018.03.19 10:01:28.456 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330
2018.03.19 10:01:29.475 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330
2018.03.19 10:01:30.484 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330
2018.03.19 10:01:31.501 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330
2018.03.19 10:01:32.515 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330
2018.03.19 10:01:33.540 trader (TRNF-6.18,M1)   ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330

Скорее всего задержки возникают не из-за брокера.

 

При ассинхронной отправке ордера имеем:

Терминал отправил ордер (1)

2018.03.19 10:01:00.575 Trades  'xxxxx': buy limit 2.00 TRNF-9.18 at 170112

Сервер проверил ордер и присвоил ему билет (2)

2018.03.19 10:01:24.263 Trades  'xxxxx': accepted buy limit 2.00 TRNF-9.18 at 170112

Сервер отправил ордер на биржу (3)

2018.03.19 10:01:25.685 Trades  'xxxxx': buy limit 2.00 TRNF-9.18 at 170112 placed for execution in 25114.794 ms

Ответ сервера, что ордер принят биржей не логируется.

Но судя по следующей записи, ответ сервера об установке ордера биржей пришел (4)

2018.03.19 10:01:39.952 Trades  'xxxxx': modify order #85508330 buy limit 2.00 TRNF-9.18 at 170112 sl: 0 tp: 0 -> 170114, sl: 0 tp: 0


Судя по тому, что с момента присваивания ордеру билета и отправкой его на биржу прошло 1,4 СЕК., а все действия

происходили именно на самом сервере, я предполагаю, что задержки возникают на самом сервере лог(2) - лог(3).


Ну и вот это очень сильно "радует"

GP      0       19:17:29.663    Trades  'xxxxx': cancel #85167146 buy limit 3.00 UCHF-9.18 at market done in 132608.665 ms
HR      0       19:17:29.678    Trades  'xxxxx': cancel #85167164 buy limit 3.00 AUDU-9.18 at market done in 132623.761 ms
HK      0       19:17:29.698    Trades  'xxxxx': cancel #85167165 sell limit 3.00 AUDU-9.18 at market done in 132642.978 ms
OE      0       19:17:29.721    Trades  'xxxxx': cancel #85167070 buy limit 1.00 GOLD-12.18 at market done in 132653.264 ms
NG      0       19:17:29.741    Trades  'xxxxx': cancel #85167172 sell limit 1.00 ALRS-9.18 at market done in 132686.437 ms
MR      0       19:17:29.755    Trades  'xxxxx': cancel #85167177 sell limit 2.00 NLMK-9.18 at market done in 132700.889 ms
HP      0       19:17:29.783    Trades  'xxxxx': cancel #85167183 buy limit 1.00 PLT-12.18 at market done in 132727.785 ms
CO      0       19:17:29.801    Trades  'xxxxx': cancel #85167254 sell limit 1.00 GMKR-9.18 at market done in 132746.755 ms
FN      0       19:17:29.819    Trades  'xxxxx': cancel #85167689 sell limit 2.00 SBRF-12.18 at market done in 132722.855 ms
QJ      0       19:17:29.839    Trades  'xxxxx': cancel #85167774 sell limit 3.00 UCHF-9.18 at market done in 132783.830 ms
GH      0       19:17:29.855    Trades  'xxxxx': cancel #85167936 sell limit 2.00 MOEX-9.18 at market done in 132800.500 ms
EH      0       19:17:29.870    Trades  'xxxxx': cancel #85167942 buy limit 1.00 SNGR-9.18 at market done in 132815.113 ms
IR      0       19:17:29.889    Trades  'xxxxx': cancel #85167943 sell limit 2.00 SNGR-9.18 at market done in 132834.156 ms
KN      0       19:17:29.916    Trades  'xxxxx': cancel #85168487 buy limit 2.00 CY-9.18 at market done in 132860.907 ms
JP      0       19:17:29.935    Trades  'xxxxx': cancel #85168192 buy limit 3.00 UCAD-9.18 at market done in 132944.703 ms
KL      0       19:17:29.950    Trades  'xxxxx': cancel #85170324 sell limit 1.00 VTBR-9.18 at market done in 132895.471 ms
FJ      0       19:17:29.965    Trades  'xxxxx': cancel #85170435 sell limit 3.00 UJPY-9.18 at market done in 132910.178 ms
RE      0       19:17:29.979    Trades  'xxxxx': cancel #85167688 buy limit 1.00 SBRF-12.18 at market done in 132883.188 ms
KD      0       19:17:29.999    Trades  'xxxxx': cancel #85170988 sell limit 1.00 CHMF-9.18 at market done in 132943.997 ms
PN      0       19:17:30.021    Trades  'xxxxx': cancel #85171201 buy limit 1.00 ED-12.18 at market done in 133030.275 ms
DN      0       19:17:30.044    Trades  'xxxxx': cancel #85171303 buy limit 1.00 UJPY-9.18 at market done in 132989.636 ms
Причина обращения: