【調べてみた】1つのMT4で複数のEAを稼働させた場合、同時に発生した注文は速やかに処理されるか?
1つのMT4で複数のEAを稼働させる際の注意点として「全く同じタイミングで複数注文が入ったとしても1つの注文しか処理出来ない」を挙げる方が多いと思います。根拠としてはトレードサーバーとMT4の接続が1スレッド分しか確保されないからだそうです。
いや、ちょっと待って下さい。
僕自身は1つのMT4で多数のEAを稼働させてますが、「1つの注文しか処理出来ない」という状況に遭遇したことがありません。
唯一FXCMのサーバーだけはToo many requestsエラーが出やすく怪しいのですが、「1つの注文しか処理出来ない」というような原因ではなく、サーバー側の制約ではないかと考えています。
同時複数注文発生時の処理状況をMT4のログで確かめてみる
昨日7/1の20:30(日本時間)にFOREX.comデモ口座で複数の注文が発生していたので、MT4のログを調べてみました。MT4のBulidは840です。
FOREX.comデモ口座 操作履歴ログ 2015/7/1 20:30
2015.07.01 20:30:00.459 '1111111': close order #23758529 sell 0.06 GBPJPYpro at 193.455 sl: 196.755 tp: 190.155 at price 0.000 2015.07.01 20:30:00.459 '1111111': close order #23769485 sell 0.06 GBPJPYpro at 192.367 sl: 195.362 tp: 189.962 at price 0.000 2015.07.01 20:30:00.459 '1111111': close order #23757136 sell 0.06 USDJPYpro at 122.577 sl: 124.986 tp: 121.386 at price 0.000 2015.07.01 20:30:00.475 '1111111': close order #23766881 sell 0.05 GBPJPYpro at 192.823 sl: 195.523 tp: 189.523 at price 0.000 2015.07.01 20:30:00.491 '1111111': close order #23758722 sell 0.06 GBPJPYpro at 193.446 sl: 0.000 tp: 188.343 at price 0.000 2015.07.01 20:30:00.491 '1111111': close order #23766802 sell 0.05 GBPJPYpro at 192.764 sl: 195.764 tp: 189.464 at price 0.000 2015.07.01 20:30:00.491 '1111111': close order #23778830 sell 0.06 GBPJPYpro at 192.173 sl: 195.773 tp: 189.773 at price 0.000 2015.07.01 20:30:00.522 '1111111': close order #23776787 sell 0.06 EURJPYpro at 136.307 sl: 0.000 tp: 133.007 at price 0.000 2015.07.01 20:30:00.522 '1111111': order #23769484 sell 0.10 GBPJPYpro closing at 0.000 failed [Trade context is busy] 2015.07.01 20:30:00.662 '1111111': order #23769484 sell 0.10 GBPJPYpro closing at 0.000 failed [Trade context is busy] 2015.07.01 20:30:00.803 '1111111': order #23758529 sell 0.06 GBPJPYpro at 193.455 sl: 196.755 tp: 190.155 closed at price 192.519 2015.07.01 20:30:00.803 '1111111': order #23769485 sell 0.06 GBPJPYpro at 192.367 sl: 195.362 tp: 189.962 closed at price 192.519 2015.07.01 20:30:00.834 '1111111': order #23757136 sell 0.06 USDJPYpro at 122.577 sl: 124.986 tp: 121.386 closed at price 122.948 2015.07.01 20:30:00.896 '1111111': order #23766881 sell 0.05 GBPJPYpro at 192.823 sl: 195.523 tp: 189.523 closed at price 192.519 2015.07.01 20:30:00.896 '1111111': order #23758722 sell 0.06 GBPJPYpro at 193.446 sl: 0.000 tp: 188.343 closed at price 192.519 2015.07.01 20:30:00.896 '1111111': order #23766802 sell 0.05 GBPJPYpro at 192.764 sl: 195.764 tp: 189.464 closed at price 192.520 2015.07.01 20:30:00.896 '1111111': order #23778830 sell 0.06 GBPJPYpro at 192.173 sl: 195.773 tp: 189.773 closed at price 192.520 2015.07.01 20:30:00.896 '1111111': close order #23769484 sell 0.10 GBPJPYpro at 192.367 sl: 195.362 tp: 189.962 at price 0.000 2015.07.01 20:30:00.896 '1111111': order #23776787 sell 0.06 EURJPYpro at 136.307 sl: 0.000 tp: 133.007 closed at price 136.529 2015.07.01 20:30:01.161 '1111111': order #23769484 sell 0.10 GBPJPYpro at 192.367 sl: 195.362 tp: 189.962 closed at price 192.520 2015.07.01 20:30:01.161 '1111111': order buy market 0.10 GBPJPYpro sl: 189.520 tp: 194.920 2015.07.01 20:30:01.349 '1111111': order buy market 0.06 GBPJPYpro sl: 189.520 tp: 194.920 2015.07.01 20:30:01.364 '1111111': order buy market 0.06 GBPJPYpro sl: 189.220 tp: 195.820 2015.07.01 20:30:01.380 '1111111': order buy market 0.06 USDJPYpro sl: 120.548 tp: 124.148 2015.07.01 20:30:01.442 '1111111': order buy market 0.05 GBPJPYpro sl: 189.520 tp: 195.820 2015.07.01 20:30:01.442 '1111111': order buy market 0.06 GBPJPYpro sl: 0.000 tp: 197.620 2015.07.01 20:30:01.442 '1111111': order buy market 0.06 GBPJPYpro sl: 188.920 tp: 194.920 2015.07.01 20:30:01.458 '1111111': order buy market 0.05 GBPJPYpro sl: 189.820 tp: 195.820 2015.07.01 20:30:01.458 '1111111': order was opened : #23783215 buy 0.10 GBPJPYpro at 192.520 sl: 189.520 tp: 194.920 2015.07.01 20:30:01.707 '1111111': order was opened : #23783219 buy 0.06 GBPJPYpro at 192.520 sl: 189.520 tp: 194.920 2015.07.01 20:30:01.707 '1111111': order was opened : #23783220 buy 0.06 GBPJPYpro at 192.520 sl: 189.220 tp: 195.820 2015.07.01 20:30:01.707 '1111111': order was opened : #23783221 buy 0.06 USDJPYpro at 122.948 sl: 120.548 tp: 124.148 2015.07.01 20:30:01.739 '1111111': order was opened : #23783222 buy 0.05 GBPJPYpro at 192.520 sl: 189.520 tp: 195.820 2015.07.01 20:30:01.739 '1111111': order was opened : #23783223 buy 0.06 GBPJPYpro at 192.520 sl: 0.000 tp: 197.620 2015.07.01 20:30:01.754 '1111111': order was opened : #23783224 buy 0.06 GBPJPYpro at 192.520 sl: 188.920 tp: 194.920 2015.07.01 20:30:01.770 '1111111': order was opened : #23783226 buy 0.05 GBPJPYpro at 192.520 sl: 189.820 tp: 195.820これを注文毎に整理すると下表のようになります。 決済注文がほぼ同時に8件リクエストされ、1件(チケット#23769484)はエラーになったものの、残り7件は滞ること無く処理されていまし、エラーもすぐ解消されています。続けて成行注文がほぼ同時に8件リクエストされましたが、こちらはエラーも無く速やかに処理されています。 8件の同時注文はさすがに多すぎてトレード用の通信スレッドがビジーになってしまったようですが、2~3件の同時注文であれば問題なく処理できそうです。
リアル口座でも複数の注文が速やかに処理されるか?
デモ口座だけではなくリアル口座での状況も確かめてみたいと思います。
(リアル口座はデモ口座ほどのEA稼働はしてないので注文数が少なめです)
FXCMリアル口座 操作履歴ログ 2015/7/1 20:30
2015.07.01 20:30:00.543 '22222222': close order #22029175 sell 0.01 EURJPY at 136.314 sl: 0.000 tp: 133.014 at price 136.526 2015.07.01 20:30:00.613 '22222222': close order #22056151 sell 0.01 GBPJPY at 192.181 sl: 195.781 tp: 189.781 at price 192.514 2015.07.01 20:30:00.613 '22222222': close order #21894365 sell 0.01 GBPJPY at 193.458 sl: 196.758 tp: 190.158 at price 192.514 2015.07.01 20:30:00.897 '22222222': order #22029175 sell 0.01 EURJPY at 136.314 sl: 0.000 tp: 133.014 closed at price 136.525 2015.07.01 20:30:00.944 '22222222': order #22056151 sell 0.01 GBPJPY at 192.181 sl: 195.781 tp: 189.781 closed at price 192.514 2015.07.01 20:30:00.944 '22222222': order #21894365 sell 0.01 GBPJPY at 193.458 sl: 196.758 tp: 190.158 closed at price 192.514 2015.07.01 20:30:01.490 '22222222': instant order buy 0.01 GBPJPY at 192.514 sl: 189.214 tp: 195.814 2015.07.01 20:30:01.490 '22222222': instant order buy 0.01 GBPJPY at 192.514 sl: 188.914 tp: 194.914 2015.07.01 20:30:01.600 '22222222': order buy 0.01 GBPJPY opening at 192.514 sl: 188.914 tp: 194.914 failed [Too many requests] 2015.07.01 20:30:01.819 '22222222': order was opened : #22074207 buy 0.01 GBPJPY at 192.513 sl: 189.214 tp: 195.814 2015.07.01 20:30:04.317 '22222222': instant order buy 0.01 GBPJPY at 192.502 sl: 188.902 tp: 194.902 2015.07.01 20:30:04.633 '22222222': order was opened : #22074216 buy 0.01 GBPJPY at 192.502 sl: 188.902 tp: 194.902これを注文毎に整理した結果です。 3件の決済注文がほぼ同時にリクエストされましたが滞りなく完了しています。続けて成行注文がほぼ同時に2件リクエストされましたが、1件はToo many requestsエラーが発生したためリトライしています。(FXCMはToo many requestsエラーが発生しやすいです) エラーは発生しましたがToo many requestsはサーバー側の応答ですので、MT4側の問題ではありません。 リアル口座であっても複数発生した注文を速やかに処理出来ているように見えます。
まとめ
一応、他のデモ口座やリアル口座のログも確認しましたが、複数の注文が同時に発生しても速やかに処理されていました。
さすがに処理しきれないほど多数の注文が殺到した場合はTrade context is busyエラーになりますが、ビジー状態も速やかに(1秒以内に)解消されているようです。
このように、1つのMT4で複数のEAを稼働させた場合に複数の注文が同時発生しても速やかに処理されますので、注文の遅延を心配する必要はあまりないと思います。
※重いEAを1つのMT4で複数稼働させると、MT4の動作が重くなり注文が遅れることはあり得ます。複数のEAを稼働させる際はMT4の動作が重くならない程度にしましょう。
written by nekonote