FORTES. Questões de aplicação da lei - página 100

 

O próprio código

//+------------------------------------------------------------------+
//|                                                    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:

Eu tenho 4000 transações por dia, cada transação pelo menos 5-6 vezes "twitches" OnTradeTransaction

Quem dará sentido a estes "portmanteaus" :) Afinal, eles precisam dos logs do terminal mais os logs do Servidor MT5.

Se os troncos levarem gigabytes - eu também os analisarei. Eu não preciso dos logs do servidor.


Recomendo a todos que afirmam que algo não vem à OnTradeTransaction para dirigir este Expert Advisor

// Советник записывает подробно каждый 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));
}


O resultado será o seguinte

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)
....

Se não existe sequer um registro desse tipo, então qualquer reclamação relacionada à OnTradeTransaction é mera conversa.


ZZY O momento não é perfeito neste caso, mas eu não queria complicar uma solução arrancada de um contexto diferente.

Arquivos anexados:
 
fxsaber:

Se os troncos ocuparem gigabytes, eu também vou lidar com eles. Os logs do servidor não são necessários.


Recomendo a todos que afirmam que algo não vem à OnTradeTransaction para dirigir este Expert Advisor


O resultado será o seguinte

Se não existe sequer um registro desse tipo, então qualquer reclamação relacionada à OnTradeTransaction é mera conversa.


O momento não é perfeito neste caso, mas não tenho uma solução complicada tirada de outro contexto.

Por que fazer uma "horta" assim?

Será suficiente:

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:

Por que fazer disso uma grande coisa?

Isso será suficiente:

Não é suficiente.

 

Abertura à mão, os freios são confirmados

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)

E o mais importante, quem vai pagar por este ultraje...

 
Aleksey Vyazmikin:

Abertura à mão, os freios são confirmados

E o mais importante, quem vai pagar por este ultraje...

Escreva para o corretor, anexando este registro.

Não pagamos ao desenvolvedor, por isso é difícil perguntar-lhes, e no contrato de licença

está escrito (como todo software) que ninguém é responsável por nada.

 
prostotrader:

Escreva para o corretor, anexando este registro.

Nós não pagamos ao desenvolvedor, então é difícil perguntar-lhes, e o acordo de licença

está escrito (como todo software) que ninguém é responsável por nada.

Era uma pergunta retórica.

 
Aleksey Vyazmikin:

Era uma pergunta retórica.

:)

Mas escreva para o seu corretor de qualquer forma.

 

Mudou um pouco o registro do Expert Advisor e isto é o que acontece:

A função CheckOrders() aciona se não houver resposta do servidor dentro de 1-1,5 segundos.

Se não houver bilhete de pedido, ele exibirá uma mensagem

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

Se houver um bilhete, a função ProcessOrders() é chamada para verificar o que aconteceu com o pedido

aqui está o resultado:

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

Os atrasos muito provavelmente não são devidos ao corretor.

 

Quando um pedido é enviado de forma assíncrona, nós temos:

O terminal envia o pedido (1)

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

O servidor verificou o pedido e lhe atribuiu um ticket (2)

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

O servidor envia o pedido para a troca (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

A resposta do servidor de que o pedido é aceito pela troca não é registrada.

Mas, a julgar pela seguinte entrada, a resposta do servidor sobre a configuração da troca veio (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


A julgar pelo fato de que a partir do momento da atribuição do bilhete de pedido e seu envio para a troca passou de 1,4 SEC.

aconteceu exatamente no próprio servidor, presumo que os atrasos ocorrem no próprio log do servidor(2) - log(3).


Bem, isto é muito "legal".

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
Razão: