フォルツァ執行上の問題点 - ページ 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:

1日に4000件の取引を行い、各取引で少なくとも5~6回OnTradeTransactionを "twitches "しています。

誰がこれらの「portmanteaus」の意味を理解するのでしょうか :)結局、端末のログとMT5 Serverのログが必要なのだそうです。

ログがギガバイトになるようなら、それも分析します。サーバーのログは必要ない。


私は非常に何かがこのExpert Advisorを実行する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:

ログがギガバイトになるなら、それも処理する。サーバーのログは必要ありません。


私は非常に何かがこのExpert Advisorを実行する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:

それは修辞的な質問だった。

:)

しかし、とにかくブローカーに手紙を書きましょう。

 

Expert Advisorのロギングを少し変更したらこうなった。

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秒を経過していることから判断して。

は、まさにサーバ本体で発生したもので、遅延はサーバ本体で発生していると推測されます 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
理由: