MQL5

【MQL5】 TimeTradeServer() と TimeCurrent() の違いとは?

MQL5 のサーバー時間を取得する方法として、TimeCurrent()TimeTradeServer() がありますが、その違いが若干わかりにくいのはないでしょうか?

MQL4 に TimeCurrent() はありますが、TimeTradeServer() はないのでMT5に移行したばっかりの人は TimeTradeServer() が何なのか、知りたいと思います。

実際、どちらを使うべきか悩んでいる人も多いと思うので、「何が異なっていて、どちらを使うべきなのか」を解説したいと思います。

共にサーバー時間を取得するための関数

これらの共通点はともに「サーバーの時間」を取得するものであるという点です。

何が違うのか?

では何が違うのでしょうか?

実際には、2つの点が異なります。

(1) 現在時刻の「計算方法」
(2) 現在時刻の「定義」

 

が異なります。

1つずつ解説します。

① 現在時刻の「計算方法」の違い

時刻の計算方法が異なります。

TimeCurrent() は「サーバー本体の時刻」がベースとなっているのに対して、

TimeTradeServer() は「自分のコンピューターのローカル時刻」をベースに計算を行います。

 

TimeCurrent() の利点は、「コンピュータの時間の設定」に依存しないという点ですが、

実際には TimeTradeServer()  はローカル時刻をベースに計算を行うというだけで、
「(自動的に)取引サーバーのタームゾーン(時間帯)にあわせた時間を計算してくれる」ので、

その点においては、そこまで変わらないと思います。

② 現在時刻の「定義」の違い

同じ現在時刻といっても、その定義は異なります。「最終時刻」の意味合いとしては

TimeCurrent() では「最終ティックの到達時刻」になりますが

TimeTradeServer() では「実際の現在の時刻」を意味します。

 

TimeCurrent() の「最終ティックの到達時刻」というのは、
詳しく言うと「気配値ウィンドウにて受信されている銘柄の中で、一番最後に到達した銘柄の、ティックの時刻」という意味です。

つまり「気配値ウィンドウ」にて受信している銘柄(symbol)に依存します。

また、ティックが到達しない間は TimeCurrent() は更新されないことになります。

その反対に、TimeTradeServer() では常に現在の実際の時刻を返すので、ティックの到達に関係なく値は常に更新されることになります。

これが一番の違いかもしれません。

どちらを使うべきなのか?

一長一短なのでどちらとは明確に言えませんが、個人的には TimeTradeServer() の方が便利だと思います。

私はアービトラージのシステムをメインに運用していて、
「各ティックが到達してからどれぐらいの時間が経っているか」を知りたい場面が多いので、常に現在時刻を返してくれる TimeTradeServer() は助かります。

ともに MqlDateTime 型 として呼び出すことが可能

これらの関数はともに「2パターンの呼び出し方法」があります。

(1) 引数なしで呼び出す方法と、 (2) 引数として MqlDateTime 型の変数を渡して、そこに格納する方法 です。

(1) 引数なしで呼び出す場合は、

TimeTradeServer();

とすると値が返ってきます。

一方、(2) MqlDateTime 型の変数に格納する場合は、

MqlDateTime  mydatetime;      // 構造体を宣言する

TimeTradeServer(mydatetime);  // 関数を実行することで、構造体に値を格納する

などとして、まずMqlDateTime型の変数を宣言してから呼び出す必要があります。

なお、MqlDateTime 構造体を含めた、「MQL5 で予め定義済みの構造体」に関してはこの記事で解説しているので、興味があったら是非読んでみてください。

まとめ

今回は、MQL5 に特有の TimeTradeServer() を紹介し、TimeCurrent() 関数との違いに関しても述べました。

用途によってどちらが適しているのかは異なりますが、常に現在時刻を返してくれる TimeTradeServer() も有効活用できるといいと思います。

   

コメントを残す

*

CAPTCHA