English Русский 中文 Español Deutsch Português
MQL5とQLUAの比較ーなぜMQL5での取引操作は28倍速いのか?

MQL5とQLUAの比較ーなぜMQL5での取引操作は28倍速いのか?

MetaTrader 5 | 16 9月 2016, 10:07
1 407 0
MetaQuotes
MetaQuotes
多くのトレーダーは、どれくらいの速さで自分の注文が取引所に到達し、どれくらいの時間で実行されるのか、そしていつトレーダーの取引ターミナルに結果が反映されるのかということについてよく考えるものだと思います。

しかし彼らは自分の取引の質を簡単に改善できるということを知りません(より速い応答とトランザクションの実行)。

2016年9月12日に、ブローカー『オープン』のリアル口座で、MetaTrader 5のビルド1415とQuik 7.2.23における3種類の速度測定を行いました。各テストはアルゴトレードの観点から重要な特定の速度特性を測るものです。
  1. 同期操作のテスト — 取引所での各トランザクションの実行が成功している、10回連続の同期取引操作『Buy』。次の操作は取引所で操作が完了/不完了したかの確認が取引サーバからとれるまで行われません。実行速度は、ターミナル、取引サーバ、取引所、取引サーバ、ターミナルという全ての流れに依存します。同期取引操作の平均時間が小さければ小さいほど良いということになります。
  2. 非同期操作のテスト — トランザクションの実行に成功したかどうかの確認なしの、10回連続の非同期取引操作『Buy』。これは取引所へ注文を送信する速度を測る発注速度のテストです。こちらでもまた、10回の非同期買い注文の実行時間がより小さいターミナルが勝ちとなります。
  3. 板画面注文の更新テスト — 板画面での注文の変更速度を測定します。これは1秒単位で(更新された)板画面のティック数を簡単に計算するものです。取引所から取引ターミナルに頻繁に相場が来るほど、板画面は速く更新されます。つまり、自動売買プログラムが1秒により多くのティックを受信するほど、プログラムは素早くリクエストの構造体で市場の変化にリアクションすることができるのです。板画面の更新速度が速いターミナルが勝ちとなります。


実験条件

両方のターミナルはブローカー『オープン』の取引サーバと同様に、レンタルしたモスクワのVPSサーバ上に設置されています。取引はSi-9.6ツールでモスクワ証券取引所の緊急セクションの同じリアル口座で行われました

私達は3つのテストを1つのビデオに録画しました。

  1. 取引操作は同じリアル口座で、
  2. 同じSi-9.16ツールで、
  3. 同じコンピュータで行われました。
  4. 取引操作は同じ時間で
  5. 同じ市場条件で行われました
  6. 板画面の更新速度は同じツールおよび同じ時間に測定されました。
  7. オープンのサーバまでのネット遅延は2ミリ秒でした。

MetaTrader 5 vs QUIKの取引操作速度の比較結果

これらの3つのテストの結果は表に集約し、各テストの詳細結果はこの記事の別の章でご紹介します。

テスト
MetaTrader 5
QUIK
MT5の勝ち
同期操作の平均時間
9.59 ms277.80 ms28.96回
非同期操作の平均時間0.09 ms0.30 ms 3.33回
板注文画面の更新速度
42.7回/秒8.4回/秒5.08回

表からわかるように、MetaTrader 5が3つの全てのテストにおいて勝ちました。希望する方は、添付のソースコードを使って同様の検証をご自身で行ってみてください。テスト自体は下のビデオで見ることができます。


取引操作速度を比較したビデオ




結論:MetaTrader 5は取引操作において28倍QUIKよりも速い

行われた測定によって、MQL5言語は、モスクワ証券取引所での取引操作の実行においても、単に板画面のスキャンにおいてもQLUAよりもはるかに勝ることが分かりました。MQL5言語で作成された取引ロボットは50-600倍計算が速いだけでなく、取引も28倍速いです。そして、自分で何かを発明する必要がありません。既製の標準ライブラリの取引クラスや自動売買についての沢山の記事を利用することができます。

信頼性の高い取引ロボットは、必ず取引操作の送信結果をチェックします。つまり、取引サーバからの応答を待ちます。テストは同期操作においてMetaTrader 5が遥かに速いということを証明しました。非同期操作が必要な場合も、速度は3倍でした。注文のストリームを分析する必要がありますが、ここでもMetaTrader 5はスナップショットのない相場のストリームの5倍という結果を与えてくれます。

行われた検証は、素早い自動取引システムの作成に、MQL5言語がうってつけであることを証明しました。計算を速くする為にQUIKターミナルに追加するどんなコネクターもライブラリも助けにはなりません。狭い場所が取引操作の実行時間になるためです。

それでは、面白味はありませんが、不可避であるテストの詳細を見てみましょう。


ターミナルを比較した詳細レポート

QLUAのプログラムは、時間の測定時にデフォルトで10-15.6ミリ秒の範囲(多くの場合15.6ミリ秒)の測定誤差を持つOSのシステムタイマーにアクセスします。したがって、システムタイマーの精度を1ミリ秒にまで単に上げることでQLUAでの時間測定の精度を上げました。これはWinmm.dllシステムライブラリのtimeBeginPeriod関数を呼び出すSpeedupSystemTimer.mq5のスクリプトを使用して行いました。

#import "winmm.dll"
int timeBeginPeriod(uint per);
#import

void OnInit()
  {
   timeBeginPeriod(1);
  }

void OnTick()
  {
  }

このスクリプトをテストの開始前にMetaTrader 5で起動し、DLLの呼び出しを許可することで、QUIKターミナルでの操作の測定誤差は1ミリ秒以下になりました。

MQL5言語には既製のGetMicrosecondCount()があるので、MetaTrader 5ターミナルでの測定は1ミリ秒の精度で行われました(1ミリ秒=1000マイクロ秒)

#1 同期取引操作速度のテスト

同期取引操作の速度測定のテストとは、つまり次の取引操作はそれぞれ、前のトランザクションの実行に成功したという取引所からの完全な確認を取引サーバから取得できた後にのみ行われるということです。

初めにMetaTrader 5ターミナルを介して一連の取引操作を行い、それから同じ一連の取引操作をQUIKターミナルを介して実行しました。

検証の要点は、1ロットの成行買いの10の同期操作の平均時間の測定です。

  • SyncTradeTest.mq5
  • SyncTradeTest.lua

同期トランザクションにかかった時間の測定は次の方法で行われました。

  • MQL5言語にはOrderSend同期関数があり、一連の取引の始めと終わりで簡単に測定できます。

  • QLUA言語には同期取引関数がないため、取引ステータスは別個に取得する必要があります。取引操作のスタート時間は、os.closck()関数を使用してsendTransaction ()の呼び出し前に直接測定されました。トランザクションの正常な実行は、取引所で実行された取引についてのイベントを受信した瞬間の最初の呼び出しでOnOrder()内蔵プロセッサで追跡しました。これらのイベントの中の違いは、取引操作の実行にかかった時間にあります。
測定結果では、MetaTrader 5の同期操作は28倍速いことがわかりました。


#2 非同期取引操作の速度のテスト

このテストでは全てがもっと単純です。10回連続で取引所に1つのSi-9.16の先物取引の買い注文が送信されます。これによって、1 ms / 10 = 0.10 msの精度のQLUAでの非同期送信の平均時間を測定することができます。MetaTrader 5ではマイクロ秒タイマーが使用されているので、誤差はありません。

取引サーバへの各注文が送信された後にすぐに新しい注文が送信されるので、私達は自分たちの操作の結果を待ちません。

  • AsyncTradeTest.mq5
  • AsyncTradeTest.lua
結果から、MetaTrader 5の非同期操作は3.33倍速いことがわかりました。


#3 板画面注文の更新テスト

一連の取引戦略は板画面での注文のストリームの分析によって形成されます。MQL5言語では板画面測定のイベントはOnBookEvent()プロセッサで取得することができ、QLUAではOnQuote()を介して取得できます。

板画面の更新速度のテストは、添付のZIPアーカイブで利用できる次のプログラムを使用して行われました。

  • MarketUpdateTest.mq5
  • MarketUpdateTest.lua

二つの異なるターミナルでのこれらのプログラムの起動結果は、MetaTrader 5の板画面は約5倍の頻度で更新されていることを示しました。おそらくQUIKは単に板画面の更新頻度を限定しており、全ての変更を表示していません。

全てのソースコードはこちらに添付されているので、希望する人は誰でもこれらのテストを自力で行い、提示された結果を個人的に確認することができます。


なぜこのような差になったのでしょうか?

私達はファナティックに性能を信頼して、長年にわたり取引ターミナルの最適化をしながら、各十マイクロ秒の戦いを繰り広げています。

まさにこれゆえに、私達は内蔵のMQL5アルゴ言語の素晴らしい性能と取引トランザクションの速度をご紹介するのです。

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/2635

添付されたファイル |
裁量トレードに向けたファジーロジック 裁量トレードに向けたファジーロジック
この記事では、ファジィ集合論を適用することにより、裁量の取引戦略を改善する方法を提案します。例として、相場参入のために過度に形式的な基準をぼかすため、ファジーロジックアプリケーションや戦略の検索、パラメータの選択について、ひとつひとつ説明してきました。このように、戦略の変更後、相場の状況に反応してポジションを開く柔軟な条件を使用します。
トレーディングロボットのためのFalseトリガー保護 トレーディングロボットのためのFalseトリガー保護
取引システムの収益は、ロジックのアルゴリズムの品質にだけでなく、ロジックや金融商品のダイナミクスの解析の精度により、決定されます。Falseトリガーは、取引ロボットのメイン・ロジックを低品質なものにします。指定された問題を解決する方法は、この記事で考慮されています。
クロスプラットフォームEA:序章 クロスプラットフォームEA:序章
この記事では、クロスプラットフォームのEAを容易に開発できるメソッドを詳述します。提案メソッドは、両方のバージョンによって共有関数を統合し、互換性のない関数の派生クラスを分割します。
キャンバスクラスの学習。アンチエイリアスと影 キャンバスクラスの学習。アンチエイリアスと影
キャンバスクラスのアンチエイリアシングアルゴリズムは、アンチエイリアスが使用されているすべての構造の基本です。この記事では、アルゴリズムがどのように動作するかについて扱い、可視化に関連する例を示します。また、グラフィックオブジェクトの描画の色合いをカバーし、キャンバス上の図形を描画するために開発された詳細なアルゴリズムがあります。数値解析ライブラリALGLIBは、計算に使用します。