2017.02.1714:05:01.032 Trades 'xxxxx': buy limit 2.00 Eu-9.17 at 65030 2017.02.1714:05:01.437 Trades 'xxxxx': accepted buy limit 2.00 Eu-9.17 at 65030 2017.02.1714:05:01.444 Trades 'xxxxx': buy limit 2.00 Eu-9.17 at 65030 placed for execution in412.406 ms (179.952 ms on server) 2017.02.1714:05:01.449 Trades 'xxxxx': sell limit 1.00 BR-8.17 at 57.45 2017.02.1714:05:01.603 Trades 'xxxxx': sell limit 1.00 LKOH-6.17 at 34098 placed for execution in554.628 ms (195.343 ms on server) 2017.02.1714:05:01.604 Trades 'xxxxx': accepted buy limit 3.00 MXI-6.17 at 2172.70 2017.02.1714:05:01.604 Trades 'xxxxx': buy limit 3.00 MXI-6.17 at 2172.70 placed for execution in537.273 ms (11.579 ms on server) 2017.02.1714:05:01.608 Trades 'xxxxx': accepted sell limit 5.00 GBPU-6.17 at 1.2495 2017.02.1714:05:02.012 Trades 'xxxxx': sell limit 5.00 GBPU-6.17 at 1.2495 placed for execution in921.827 ms (1.396 ms on server) 2017.02.1714:05:02.013 Trades 'xxxxx': accepted buy limit 5.00 HYDR-6.17 at 10779 2017.02.1714:05:02.015 Trades 'xxxxx': accepted buy limit 2.00 MGNT-9.17 at 9611 2017.02.1714:05:02.017 Trades 'xxxxx': accepted sell limit 2.00 MGNT-9.17 at 11001 2017.02.1714:05:02.018 Trades 'xxxxx': accepted buy limit 1.00 ED-9.17 at 1.0601 2017.02.1714:05:02.019 Trades 'xxxxx': buy limit 5.00 HYDR-6.17 at 10779 placed for execution in929.618 ms (3.608 ms on server) 2017.02.1714:05:02.022 Trades 'xxxxx': buy limit 2.00 MGNT-9.17 at 9611 placed for execution in610.425 ms (3.848 ms on server) 2017.02.1714:05:02.029 Trades 'xxxxx': sell limit 2.00 MGNT-9.17 at 11001 placed for execution in616.804 ms (3.793 ms on server) 2017.02.1714:05:02.030 Trades 'xxxxx': buy limit 1.00 ED-9.17 at 1.0601 placed for execution in616.485 ms (3.712 ms on server) 2017.02.1714:05:02.040 Trades 'xxxxx': cancel order #52607654 sell limit 1.00 LKOH-6.17 at 34098 2017.02.1714:05:02.042 Trades 'xxxxx': accepted sell limit 1.00 ED-9.17 at 1.0849 2017.02.1714:05:02.043 Trades 'xxxxx': sell limit 1.00 ED-9.17 at 1.0849 placed for execution in629.309 ms (2.119 ms on server) 2017.02.1714:05:02.215 Trades 'xxxxx': accepted buy limit 2.00 AUDU-6.17 at 0.7586 2017.02.1714:05:02.216 Trades 'xxxxx': accepted buy limit 5.00 TATN-6.17 at 37027 2017.02.1714:05:02.217 Trades 'xxxxx': accepted sell limit 5.00 AUDU-6.17 at 0.8025 2017.02.1714:05:02.217 Trades 'xxxxx': buy limit 2.00 AUDU-6.17 at 0.7586 placed for execution in793.001 ms (5.415 ms on server) 2017.02.1714:05:02.519 Trades 'xxxxx': buy limit 5.00 TATN-6.17 at 37027 placed for execution in1094.281 ms (5.535 ms on server) 2017.02.1714:05:02.521 Trades 'xxxxx': sell limit 5.00 AUDU-6.17 at 0.8025 placed for execution in1096.137 ms (5.514 ms on server) 2017.02.1714:05:02.533 Trades 'xxxxx': accepted sell limit 5.00 TATN-6.17 at 42028 2017.02.1714:05:02.533 Trades 'xxxxx': sell limit 5.00 TATN-6.17 at 42028 placed for execution in1108.871 ms (1.341 ms on server)
2017.02.1713:45:27.132 trader (RTS-3.17,M1) COrder::Place: Order sent to server... 2017.02.1713:45:27.141 trader (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket. 2017.02.1713:45:27.421 trader (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE--> ORDER_STATE_PLACED -- > Order place done.
289ms。
端末ログ
2017.02.17 13:45:27.132 Trades '1007932': buy limit 2.00 RTS-6.17 at 115190 2017.02.17 13:45:27.141 Trades '1007932': accepted buy limit 2.00 RTS-6.17 at 115190 2017.02.17 13:45:27.141 Trades '1007932': buy limit 2.00 RTS-6.17 at 115190 placed for execution in 8.526 ms
//+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ voidOnTradeTransaction(constMqlTradeTransaction &trans, constMqlTradeRequest &request, constMqlTradeResult &result) { switch(trans.type) { caseTRADE_TRANSACTION_REQUEST: if((order_id!=0) && (result.request_id==order_id)) { order_ticket=result.order; Print(__FUNCTION__, ": TRADE_TRANSACTION_REQUEST --> Order got ticket."); order_id=0; } break; caseTRADE_TRANSACTION_ORDER_UPDATE: if((order_ticket>0) && (trans.order==order_ticket)) { switch(trans.order_state) { caseORDER_STATE_PLACED: Print(__FUNCTION__, ": TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done."); SetSyncOrder(); break; } } else if((sync_order>0) && (trans.order==sync_order)) { switch(trans.order_state) { caseORDER_STATE_PLACED: Print(__FUNCTION__, ": TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal."); break; } }
break; } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SetSyncOrder() { MqlTradeRequest request={0}; MqlTradeResult result={0}; order_id=0; sync_order=0; request.magic=Magic; request.symbol=Symbol(); request.volume=1; request.type_filling=ORDER_FILLING_RETURN; request.type_time=ORDER_TIME_DAY; request.action=TRADE_ACTION_PENDING; request.type=ORDER_TYPE_SELL_LIMIT; request.comment=""; request.price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX); Print(__FUNCTION__, ": Sync Order send to server..."); if(OrderSend(request,result)) { if((result.retcode==TRADE_RETCODE_PLACED) || (result.retcode==TRADE_RETCODE_DONE)) { sync_order=result.order; Print(__FUNCTION__, ": Sync Order place done? but nof found in terminal."); } } else {Print("Order not send.");} } //--------------------- void SetOrder() { MqlTradeRequest request={0}; MqlTradeResult result={0}; order_id=0; order_ticket=0; request.magic=Magic; request.symbol=Symbol(); request.volume=1; request.type_filling=ORDER_FILLING_RETURN; request.type_time=ORDER_TIME_DAY; request.action=TRADE_ACTION_PENDING; request.type=ORDER_TYPE_SELL_LIMIT; request.comment=""; request.price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX); Print(__FUNCTION__, ": Async Order send to server..."); if(OrderSendAsync(request,result)) { if((result.retcode==TRADE_RETCODE_PLACED) || (result.retcode==TRADE_RETCODE_DONE)) { order_id=result.request_id; Print(__FUNCTION__, ": Async Order got request ID."); } } else {Print("Order not send.");} } //+------------------------------------------------------------------+
端末ログ
2017.02.1715:17:15.279 Trades '1007932': sell limit 1.00 RTS-3.17 at 121900 2017.02.1715:17:15.292 Trades '1007932': accepted sell limit 1.00 RTS-3.17 at 121900 2017.02.1715:17:15.292 Trades '1007932': sell limit 1.00 RTS-3.17 at 121900 placed for execution in13.559 ms 2017.02.1715:17:15.297 Trades '1007932': sell limit 1.00 RTS-3.17 at 121900 2017.02.1715:17:15.308 Trades '1007932': accepted sell limit 1.00 RTS-3.17 at 121900 2017.02.1715:17:15.310 Trades '1007932': sell limit 1.00 RTS-3.17 at 121900 placed for execution 2017.02.1715:17:15.317 Trades '1007932': order #54040029 sell limit 1.00 / 1.00 RTS-3.17 at 121900 done in19.853 ms
非同期モード-13ms。(処刑 される)
同期式 - 20 ms.
Expert Advisorのログ
2017.02.1715:17:15.277 Test_delay (RTS-3.17,M1) SetOrder: Async Order send to server... 2017.02.1715:17:15.279 Test_delay (RTS-3.17,M1) SetOrder: Async Order got request ID. 2017.02.1715:17:15.292 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket. 2017.02.1715:17:15.297 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done. 2017.02.1715:17:15.297 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order send to server... 2017.02.1715:17:15.317 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order place done? but nof found in terminal. 2017.02.1715:17:15.317 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.
CI 0 14:59:53.943 Trades '5122740': sell limit 1.00 MIX-3.17 at 225925 KL 0 14:59:53.997 Trades '5122740': accepted sell limit 1.00 MIX-3.17 at 225925 OH 0 14:59:54.025 Trades '5122740': order #134542376 sell limit 1.00 / 1.00 MIX-3.17 at market done in 82.884 ms JF 0 14:59:54.026 Trades '5122740': sell limit 1.00 MIX-3.17 at 225925 KM 0 14:59:54.082 Trades '5122740': accepted sell limit 1.00 MIX-3.17 at 225925 PI 0 14:59:54.082 Trades '5122740': order #134542377 sell limit 1.00 / 1.00 MIX-3.17 at market done in 57.025 ms
EN 014:59:53.942 Test (MIX-3.17,M1) SetOrder: Async Order send to server... PP 014:59:53.943 Test (MIX-3.17,M1) SetOrder: Async Order got request ID. JF 014:59:54.025 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket. GP 014:59:54.026 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done. KD 014:59:54.026 Test (MIX-3.17,M1) SetSyncOrder: Sync Order send to server... JM 014:59:54.082 Test (MIX-3.17,M1) SetSyncOrder: Sync Order place done? but nof found in terminal. DE 014:59:54.082 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.
CI 0 14:59:53.943 Trades '5122740': sell limit 1.00 MIX-3.17 at 225925 KL 0 14:59:53.997 Trades '5122740': accepted sell limit 1.00 MIX-3.17 at 225925 OH 0 14:59:54.025 Trades '5122740': order #134542376 sell limit 1.00 / 1.00 MIX-3.17 at market done in 82.884 ms JF 0 14:59:54.026 Trades '5122740': sell limit 1.00 MIX-3.17 at 225925 KM 0 14:59:54.082 Trades '5122740': accepted sell limit 1.00 MIX-3.17 at 225925 PI 0 14:59:54.082 Trades '5122740': order #134542377 sell limit 1.00 / 1.00 MIX-3.17 at market done in 57.025 ms
EN 014:59:53.942 Test (MIX-3.17,M1) SetOrder: Async Order send to server... PP 014:59:53.943 Test (MIX-3.17,M1) SetOrder: Async Order got request ID. JF 014:59:54.025 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket. GP 014:59:54.026 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done. KD 014:59:54.026 Test (MIX-3.17,M1) SetSyncOrder: Sync Order send to server... JM 014:59:54.082 Test (MIX-3.17,M1) SetSyncOrder: Sync Order place done? but nof found in terminal. DE 014:59:54.082 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.
MQ-Demoです。
そのことに疑いはないのでしょうか?
JF 014:59:54.025 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket. GP 014:59:54.026 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.
JF 014:59:54.025 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket. GP 014:59:54.026 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.
2017.02.1716:20:47.292 Trades '1007932': sell limit 1.00 RTS-3.17 at 121520 2017.02.1716:20:47.299 Trades '1007932': accepted sell limit 1.00 RTS-3.17 at 121520 2017.02.1716:20:47.300 Trades '1007932': sell limit 1.00 RTS-3.17 at 121520 placed for execution in8.287 ms 2017.02.1716:20:47.307 Trades '1007932': sell limit 1.00 RTS-3.17 at 121520 2017.02.1716:20:47.315 Trades '1007932': accepted sell limit 1.00 RTS-3.17 at 121520 2017.02.1716:20:47.316 Trades '1007932': sell limit 1.00 RTS-3.17 at 121520 placed for execution 2017.02.1716:20:47.323 Trades '1007932': order #54042531 sell limit 1.00 / 1.00 RTS-3.17 at 121520 done in15.978 ms
2017.02.1716:17:57.121 Test_delay (RTS-3.17,M1) SetOrder: Async Order send to server... 2017.02.1716:17:57.122 Test_delay (RTS-3.17,M1) SetOrder: Async Order got request ID. 2017.02.1716:17:57.132 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket. 2017.02.1716:17:57.146 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done. 2017.02.1716:17:57.146 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order send to server... 2017.02.1716:17:57.161 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order place done, but not found in terminal. 2017.02.1716:17:57.161 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done and found in terminal. 2017.02.1716:20:47.291 Test_delay (RTS-3.17,M1) SetOrder: Async Order send to server... 2017.02.1716:20:47.292 Test_delay (RTS-3.17,M1) SetOrder: Async Order got request ID. 2017.02.1716:20:47.300 Test_delay (RTS-3.17,M1) 8.305 2017.02.1716:20:47.300 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket. 2017.02.1716:20:47.307 Test_delay (RTS-3.17,M1) 15.644 2017.02.1716:20:47.307 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done. 2017.02.1716:20:47.307 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order send to server... 2017.02.1716:20:47.323 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order place done? but nof found in terminal. 2017.02.1716:20:47.323 Test_delay (RTS-3.17,M1) 16.033 2017.02.1716:20:47.323 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.
私のケースはありません。全ユーザーに共通する端末ログがあります。
OK、ログは同じですが、残念ながら結果は違いますね...。
289msと9msの違いが頑なにわからないんですね。
こちらが新鮮な1枚(リアル1531)です。
2017.02.17 14:05:01.437 Trades 'xxxxx': accepted buy limit 2.00 Eu-9.17 at 65030
2017.02.17 14:05:01.444 Trades 'xxxxx': buy limit 2.00 Eu-9.17 at 65030 placed for execution in 412.406 ms (179.952 ms on server)
2017.02.17 14:05:01.449 Trades 'xxxxx': sell limit 1.00 BR-8.17 at 57.45
2017.02.17 14:05:01.603 Trades 'xxxxx': sell limit 1.00 LKOH-6.17 at 34098 placed for execution in 554.628 ms (195.343 ms on server)
2017.02.17 14:05:01.604 Trades 'xxxxx': accepted buy limit 3.00 MXI-6.17 at 2172.70
2017.02.17 14:05:01.604 Trades 'xxxxx': buy limit 3.00 MXI-6.17 at 2172.70 placed for execution in 537.273 ms (11.579 ms on server)
2017.02.17 14:05:01.608 Trades 'xxxxx': accepted sell limit 5.00 GBPU-6.17 at 1.2495
2017.02.17 14:05:02.012 Trades 'xxxxx': sell limit 5.00 GBPU-6.17 at 1.2495 placed for execution in 921.827 ms (1.396 ms on server)
2017.02.17 14:05:02.013 Trades 'xxxxx': accepted buy limit 5.00 HYDR-6.17 at 10779
2017.02.17 14:05:02.015 Trades 'xxxxx': accepted buy limit 2.00 MGNT-9.17 at 9611
2017.02.17 14:05:02.017 Trades 'xxxxx': accepted sell limit 2.00 MGNT-9.17 at 11001
2017.02.17 14:05:02.018 Trades 'xxxxx': accepted buy limit 1.00 ED-9.17 at 1.0601
2017.02.17 14:05:02.019 Trades 'xxxxx': buy limit 5.00 HYDR-6.17 at 10779 placed for execution in 929.618 ms (3.608 ms on server)
2017.02.17 14:05:02.022 Trades 'xxxxx': buy limit 2.00 MGNT-9.17 at 9611 placed for execution in 610.425 ms (3.848 ms on server)
2017.02.17 14:05:02.029 Trades 'xxxxx': sell limit 2.00 MGNT-9.17 at 11001 placed for execution in 616.804 ms (3.793 ms on server)
2017.02.17 14:05:02.030 Trades 'xxxxx': buy limit 1.00 ED-9.17 at 1.0601 placed for execution in 616.485 ms (3.712 ms on server)
2017.02.17 14:05:02.040 Trades 'xxxxx': cancel order #52607654 sell limit 1.00 LKOH-6.17 at 34098
2017.02.17 14:05:02.042 Trades 'xxxxx': accepted sell limit 1.00 ED-9.17 at 1.0849
2017.02.17 14:05:02.043 Trades 'xxxxx': sell limit 1.00 ED-9.17 at 1.0849 placed for execution in 629.309 ms (2.119 ms on server)
2017.02.17 14:05:02.215 Trades 'xxxxx': accepted buy limit 2.00 AUDU-6.17 at 0.7586
2017.02.17 14:05:02.216 Trades 'xxxxx': accepted buy limit 5.00 TATN-6.17 at 37027
2017.02.17 14:05:02.217 Trades 'xxxxx': accepted sell limit 5.00 AUDU-6.17 at 0.8025
2017.02.17 14:05:02.217 Trades 'xxxxx': buy limit 2.00 AUDU-6.17 at 0.7586 placed for execution in 793.001 ms (5.415 ms on server)
2017.02.17 14:05:02.519 Trades 'xxxxx': buy limit 5.00 TATN-6.17 at 37027 placed for execution in 1094.281 ms (5.535 ms on server)
2017.02.17 14:05:02.521 Trades 'xxxxx': sell limit 5.00 AUDU-6.17 at 0.8025 placed for execution in 1096.137 ms (5.514 ms on server)
2017.02.17 14:05:02.533 Trades 'xxxxx': accepted sell limit 5.00 TATN-6.17 at 42028
2017.02.17 14:05:02.533 Trades 'xxxxx': sell limit 5.00 TATN-6.17 at 42028 placed for execution in 1108.871 ms (1.341 ms on server)
そのほうが、きっと意味が ある。
専門家ログ
2017.02.17 13:45:27.141 trader (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket.
2017.02.17 13:45:27.421 trader (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE--> ORDER_STATE_PLACED -- > Order place done.
289ms。
端末ログ
2017.02.17 13:45:27.141 Trades '1007932': accepted buy limit 2.00 RTS-6.17 at 115190
2017.02.17 13:45:27.141 Trades '1007932': buy limit 2.00 RTS-6.17 at 115190 placed for execution in 8.526 ms
9ms。
同じ色は同じイベントを示しています。なぜか2行ともターミナルログに27.141と表示されています。
Expert Advisorのログには27.141件、27.421件ものログが含まれています。OnTradeTransaction の 速度がまだ遅いようです。イベントは端末で受信されましたが、OnTradeTransaction に送信されたのは 200 ms 以上経ってからです。おそらく、Expert Advisor はこの 200ms の間、何かをしていて、そのために遅延したのでしょう。ソースコードがないと何とも言えません。
同じ色で同じイベントをマークしています。なぜか2行ともターミナルのログに27.141と出ています。
Expert Advisorのログには、27.141と27.421が表示されています。OnTradeTransaction の 速度がまだ遅いようです。イベントは端末で受信されましたが、OnTradeTransaction に送信されたのは 200 ms 以上経ってからです。おそらく、Expert Advisor はこの 200ms の間に何かをしていて、そのために遅延したのでしょう。ソースコードがないと何とも言えません。
デモ用オープナーでお試しください
//| Test_delay.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
ulong order_ticket;
ulong Magic=1234567890;
ulong order_id;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
SetOrder();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch(trans.type)
{
case TRADE_TRANSACTION_REQUEST: if((order_id!=0) && (result.request_id==order_id))
{
order_ticket=result.order;
Print(__FUNCTION__, ": TRADE_TRANSACTION_REQUEST --> Order got ticket.");
order_id=0;
}
break;
case TRADE_TRANSACTION_ORDER_UPDATE: if((order_ticket!=0) && (trans.order==order_ticket))
{
switch(trans.order_state)
{
case ORDER_STATE_PLACED:
Print(__FUNCTION__, ": TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Order place done.");
break;
}
}
break;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void SetOrder()
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
order_id=0;
order_ticket=0;
request.magic=Magic;
request.symbol=Symbol();
request.volume=1;
request.type_filling=ORDER_FILLING_RETURN;
request.type_time=ORDER_TIME_DAY;
request.action=TRADE_ACTION_PENDING;
request.type=ORDER_TYPE_SELL_LIMIT;
request.comment="";
request.price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX);
if(OrderSendAsync(request,result))
{
if((result.retcode==TRADE_RETCODE_PLACED) || (result.retcode==TRADE_RETCODE_DONE))
{
order_id=result.request_id;
Print(__FUNCTION__, ": Order send to server.");
}
}
else
{Print("Order not send.");}
}
//+------------------------------------------------------------------+
端末のログ
2017.02.17 14:48:33.368 Trades '1007932': accepted sell limit 1.00 RTS-3.17 at 121900
2017.02.17 14:48:33.369 Trades '1007932': sell limit 1.00 RTS-3.17 at 121900 placed for execution in 8.077 ms
8ms。
専門家によるログ
2017.02.17 14:48:33.369 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket.
2017.02.17 14:48:33.377 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Order place done.
16ms。
専門家の「TORRIBLE」はどこにあるのか?
今度は同期順序の設定を追加してタスクを複雑化する
//| Test_delay.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
ulong order_ticket;
ulong sync_order;
ulong Magic=1234567890;
ulong order_id;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
SetOrder();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch(trans.type)
{
case TRADE_TRANSACTION_REQUEST: if((order_id!=0) && (result.request_id==order_id))
{
order_ticket=result.order;
Print(__FUNCTION__, ": TRADE_TRANSACTION_REQUEST --> Order got ticket.");
order_id=0;
}
break;
case TRADE_TRANSACTION_ORDER_UPDATE: if((order_ticket>0) && (trans.order==order_ticket))
{
switch(trans.order_state)
{
case ORDER_STATE_PLACED:
Print(__FUNCTION__, ": TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.");
SetSyncOrder();
break;
}
}
else
if((sync_order>0) && (trans.order==sync_order))
{
switch(trans.order_state)
{
case ORDER_STATE_PLACED:
Print(__FUNCTION__, ": TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.");
break;
}
}
break;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void SetSyncOrder()
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
order_id=0;
sync_order=0;
request.magic=Magic;
request.symbol=Symbol();
request.volume=1;
request.type_filling=ORDER_FILLING_RETURN;
request.type_time=ORDER_TIME_DAY;
request.action=TRADE_ACTION_PENDING;
request.type=ORDER_TYPE_SELL_LIMIT;
request.comment="";
request.price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX);
Print(__FUNCTION__, ": Sync Order send to server...");
if(OrderSend(request,result))
{
if((result.retcode==TRADE_RETCODE_PLACED) || (result.retcode==TRADE_RETCODE_DONE))
{
sync_order=result.order;
Print(__FUNCTION__, ": Sync Order place done? but nof found in terminal.");
}
}
else
{Print("Order not send.");}
}
//---------------------
void SetOrder()
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
order_id=0;
order_ticket=0;
request.magic=Magic;
request.symbol=Symbol();
request.volume=1;
request.type_filling=ORDER_FILLING_RETURN;
request.type_time=ORDER_TIME_DAY;
request.action=TRADE_ACTION_PENDING;
request.type=ORDER_TYPE_SELL_LIMIT;
request.comment="";
request.price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX);
Print(__FUNCTION__, ": Async Order send to server...");
if(OrderSendAsync(request,result))
{
if((result.retcode==TRADE_RETCODE_PLACED) || (result.retcode==TRADE_RETCODE_DONE))
{
order_id=result.request_id;
Print(__FUNCTION__, ": Async Order got request ID.");
}
}
else
{Print("Order not send.");}
}
//+------------------------------------------------------------------+
端末ログ
2017.02.17 15:17:15.292 Trades '1007932': accepted sell limit 1.00 RTS-3.17 at 121900
2017.02.17 15:17:15.292 Trades '1007932': sell limit 1.00 RTS-3.17 at 121900 placed for execution in 13.559 ms
2017.02.17 15:17:15.297 Trades '1007932': sell limit 1.00 RTS-3.17 at 121900
2017.02.17 15:17:15.308 Trades '1007932': accepted sell limit 1.00 RTS-3.17 at 121900
2017.02.17 15:17:15.310 Trades '1007932': sell limit 1.00 RTS-3.17 at 121900 placed for execution
2017.02.17 15:17:15.317 Trades '1007932': order #54040029 sell limit 1.00 / 1.00 RTS-3.17 at 121900 done in 19.853 ms
非同期モード-13ms。(処刑 される)
同期式 - 20 ms.
Expert Advisorのログ
2017.02.17 15:17:15.277 Test_delay (RTS-3.17,M1) SetOrder: Async Order send to server...
2017.02.17 15:17:15.279 Test_delay (RTS-3.17,M1) SetOrder: Async Order got request ID.
2017.02.17 15:17:15.292 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket.
2017.02.17 15:17:15.297 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.
2017.02.17 15:17:15.297 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order send to server...
2017.02.17 15:17:15.317 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order place done? but nof found in terminal.
2017.02.17 15:17:15.317 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.
非同期モード-20ms。(どこの端末7msでやるの?)
同期モード - 20 msec.
遅れている理由を自分たちで解明することはできないだろう。
なぜなら、FORTSの接続は以下の通りだからです。
ターミナル→インターネット→ブローカーネットワーク→MT5サーバー→ブローカーネットワーク→インターネット - ターミナル
開発者自身が遅延に対応する気がない限り、こんなものでしょう。
そして今度は、同期順序の設定を追加して、タスクを複雑にするために
KL 0 14:59:53.997 Trades '5122740': accepted sell limit 1.00 MIX-3.17 at 225925
OH 0 14:59:54.025 Trades '5122740': order #134542376 sell limit 1.00 / 1.00 MIX-3.17 at market done in 82.884 ms
JF 0 14:59:54.026 Trades '5122740': sell limit 1.00 MIX-3.17 at 225925
KM 0 14:59:54.082 Trades '5122740': accepted sell limit 1.00 MIX-3.17 at 225925
PI 0 14:59:54.082 Trades '5122740': order #134542377 sell limit 1.00 / 1.00 MIX-3.17 at market done in 57.025 ms
PP 0 14:59:53.943 Test (MIX-3.17,M1) SetOrder: Async Order got request ID.
JF 0 14:59:54.025 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket.
GP 0 14:59:54.026 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.
KD 0 14:59:54.026 Test (MIX-3.17,M1) SetSyncOrder: Sync Order send to server...
JM 0 14:59:54.082 Test (MIX-3.17,M1) SetSyncOrder: Sync Order place done? but nof found in terminal.
DE 0 14:59:54.082 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.
MQ-Demoです。
遅れている理由を自分たちで解明することはできないだろう。
なぜなら、FORTSの接続は以下の通りだからです。
ターミナル→インターネット→ブローカーネットワーク→MT5サーバー→ブローカーネットワーク→インターネット - ターミナル
開発者自身が遅延に対応する気がない限り、こんなものでしょう。
KL 0 14:59:53.997 Trades '5122740': accepted sell limit 1.00 MIX-3.17 at 225925
OH 0 14:59:54.025 Trades '5122740': order #134542376 sell limit 1.00 / 1.00 MIX-3.17 at market done in 82.884 ms
JF 0 14:59:54.026 Trades '5122740': sell limit 1.00 MIX-3.17 at 225925
KM 0 14:59:54.082 Trades '5122740': accepted sell limit 1.00 MIX-3.17 at 225925
PI 0 14:59:54.082 Trades '5122740': order #134542377 sell limit 1.00 / 1.00 MIX-3.17 at market done in 57.025 ms
PP 0 14:59:53.943 Test (MIX-3.17,M1) SetOrder: Async Order got request ID.
JF 0 14:59:54.025 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket.
GP 0 14:59:54.026 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.
KD 0 14:59:54.026 Test (MIX-3.17,M1) SetSyncOrder: Sync Order send to server...
JM 0 14:59:54.082 Test (MIX-3.17,M1) SetSyncOrder: Sync Order place done? but nof found in terminal.
DE 0 14:59:54.082 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.
MQ-Demoです。
そのことに疑いはないのでしょうか?
GP 0 14:59:54.026 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.
1ms - NO!
もう一度確認してください。
追加
1525ビルドでテストしていました
このことに疑いはないのでしょうか?
GP 0 14:59:54.026 Test (MIX-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.
1ms - NO!
唯一の疑問は、端末が自らログを取る時間です。
そのため、次のようなことをしました。
//| Test_delay.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
ulong order_ticket;
ulong sync_order;
ulong Magic=1234567890;
ulong order_id;
ulong StartTime;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
StartTime = GetMicrosecondCount();
SetOrder();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch(trans.type)
{
case TRADE_TRANSACTION_REQUEST: if((order_id!=0) && (result.request_id==order_id))
{
Print(DoubleToString((GetMicrosecondCount() - StartTime) / 1000.0, 3));
order_ticket=result.order;
Print(__FUNCTION__, ": TRADE_TRANSACTION_REQUEST --> Order got ticket.");
order_id=0;
}
break;
case TRADE_TRANSACTION_ORDER_UPDATE: if((order_ticket>0) && (trans.order==order_ticket))
{
switch(trans.order_state)
{
case ORDER_STATE_PLACED:
Print(DoubleToString((GetMicrosecondCount() - StartTime) / 1000.0, 3));
Print(__FUNCTION__, ": TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.");
SetSyncOrder();
break;
}
}
else
if((sync_order>0) && (trans.order==sync_order))
{
switch(trans.order_state)
{
case ORDER_STATE_PLACED:
Print(DoubleToString((GetMicrosecondCount() - StartTime) / 1000.0, 3));
Print(__FUNCTION__, ": TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.");
break;
}
}
break;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void SetSyncOrder()
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
order_id=0;
sync_order=0;
request.magic=Magic;
request.symbol=Symbol();
request.volume=1;
request.type_filling=ORDER_FILLING_RETURN;
request.type_time=ORDER_TIME_DAY;
request.action=TRADE_ACTION_PENDING;
request.type=ORDER_TYPE_SELL_LIMIT;
request.comment="";
request.price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX);
Print(__FUNCTION__, ": Sync Order send to server...");
StartTime = GetMicrosecondCount();
if(OrderSend(request,result))
{
if((result.retcode==TRADE_RETCODE_PLACED) || (result.retcode==TRADE_RETCODE_DONE))
{
sync_order=result.order;
Print(__FUNCTION__, ": Sync Order place done? but nof found in terminal.");
}
}
else
{Print("Order not send.");}
}
//---------------------
void SetOrder()
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
order_id=0;
order_ticket=0;
request.magic=Magic;
request.symbol=Symbol();
request.volume=1;
request.type_filling=ORDER_FILLING_RETURN;
request.type_time=ORDER_TIME_DAY;
request.action=TRADE_ACTION_PENDING;
request.type=ORDER_TYPE_SELL_LIMIT;
request.comment="";
request.price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX);
Print(__FUNCTION__, ": Async Order send to server...");
StartTime = GetMicrosecondCount();
if(OrderSendAsync(request,result))
{
if((result.retcode==TRADE_RETCODE_PLACED) || (result.retcode==TRADE_RETCODE_DONE))
{
order_id=result.request_id;
Print(__FUNCTION__, ": Async Order got request ID.");
}
}
else
{Print("Order not send.");}
}
//+------------------------------------------------------------------+
何を得るか?
何が出るの?
2017.02.17 16:20:47.299 Trades '1007932': accepted sell limit 1.00 RTS-3.17 at 121520
2017.02.17 16:20:47.300 Trades '1007932': sell limit 1.00 RTS-3.17 at 121520 placed for execution in 8.287 ms
2017.02.17 16:20:47.307 Trades '1007932': sell limit 1.00 RTS-3.17 at 121520
2017.02.17 16:20:47.315 Trades '1007932': accepted sell limit 1.00 RTS-3.17 at 121520
2017.02.17 16:20:47.316 Trades '1007932': sell limit 1.00 RTS-3.17 at 121520 placed for execution
2017.02.17 16:20:47.323 Trades '1007932': order #54042531 sell limit 1.00 / 1.00 RTS-3.17 at 121520 done in 15.978 ms
2017.02.17 16:17:57.122 Test_delay (RTS-3.17,M1) SetOrder: Async Order got request ID.
2017.02.17 16:17:57.132 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket.
2017.02.17 16:17:57.146 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.
2017.02.17 16:17:57.146 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order send to server...
2017.02.17 16:17:57.161 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order place done, but not found in terminal.
2017.02.17 16:17:57.161 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done and found in terminal.
2017.02.17 16:20:47.291 Test_delay (RTS-3.17,M1) SetOrder: Async Order send to server...
2017.02.17 16:20:47.292 Test_delay (RTS-3.17,M1) SetOrder: Async Order got request ID.
2017.02.17 16:20:47.300 Test_delay (RTS-3.17,M1) 8.305
2017.02.17 16:20:47.300 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_REQUEST --> Order got ticket.
2017.02.17 16:20:47.307 Test_delay (RTS-3.17,M1) 15.644
2017.02.17 16:20:47.307 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Async Order place done.
2017.02.17 16:20:47.307 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order send to server...
2017.02.17 16:20:47.323 Test_delay (RTS-3.17,M1) SetSyncOrder: Sync Order place done? but nof found in terminal.
2017.02.17 16:20:47.323 Test_delay (RTS-3.17,M1) 16.033
2017.02.17 16:20:47.323 Test_delay (RTS-3.17,M1) OnTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE --> ORDER_STATE_PLACED --> Sync order place done. And found in terminal.
作品番号1533
追加
タイミングってなんだよ、じゃあなんでこんな小さい時間 軸でローカル タイムが正確なんだよ。