堡垒。执法问题 - 页 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。

谁将会对这些 "portmanteaus "做出解释呢 :)毕竟,他们需要终端的日志加上MT5服务器的日志。

如果日志将需要数千兆字节 - 我也会分析它们。我不需要服务器的日志。


我强烈建议每个声称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有关的主张都是空谈。


ZZY 在这种情况下,时机并不完美,但我不想把一个从不同背景下 撕出来的解决方案复杂化。

附加的文件:
 
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:

这是个反问句。

:)

但无论如何要写信给你的经纪人。

 

对专家顾问的记录做了一些改变,结果是这样的。

如果在1-1.5秒内没有来自服务器的响应,CheckOrders()函数就会触发。

如果没有订单票,它将显示一个信息

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个小时的判断。

完全发生在服务器本身,我假设延迟发生在服务器本身log(2) - log(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