TimeTradeServer関数の働き・役割
TimeTradeServer関数は、接続されたトレードサーバーの正確な現在時刻を取得する役割を担っています。
一見するとTimeCurrent関数と同じような関数に感じます。
実際にTimeCurrent関数とTimeTradeServer関数、2つの情報を同時に取得した時に外形的な違いが出る事は殆どないでしょう。
ただ、処理的な違いとして、TimeCurrent関数が返すのが、最新の市場価格が到着した最終時点のサーバー時間(=「気配値表示」ウィンドウで選択したシンボルのうちの 1 つの相場受信のサーバー最終時刻)であるのに対し、TimeTradeServer関数は常に現在のサーバー時間を提供する、という相違点があります。
理論的には極端に流動性が低下している局面においてはTimeCurrent関数とTimeTradeServer関数の日時情報に違いが生じる可能性はある、という事になります。
※TimeCurrent関数については↓の記事をご参照ください
TimeTradeServer関数の引数について
//引数を記述しないヴァージョン
datetime TimeTradeServer();
//引数を記述するヴァージョン
datetime TimeTradeServer(
MqlDateTime& dt_struct // 構造体型の変数
);
TimeTradeServer関数は引数を必要としないシンプルな関数ですが、オーバーロードされたバージョンでは、MqlDateTime構造体のインスタンスを引数(参照渡し)として取ることもできます。
このバージョンを使用すると、取得した時間情報を直接MqlDateTime構造体型のインスタンスに格納する事ができます。
※オーバーロードについての詳細は↓の記事をご参照ください
※MqlDateTime構造体についての詳細は↓の記事をご参照ください
※参照渡しについての詳細は↓の記事をご参照ください
※インスタンスについての詳細は↓の記事をご参照ください
TimeTradeServer関数の戻り値について
戻り値は、サーバー時間なので必然的にdateTime型です。
これUNIXタイムという、1970年1月1日からの秒数として表される時刻値になります
また、MqlDateTime構造体を引数にとるヴァージョンの場合、引数に記述したMqlDateTime構造体型インスタンスに格納されている各メンバの値も更新されます
※UNIXタイムについての詳細は↓の記事をご参照ください
TimeTradeServer関数を使う際の注意点
トレードサーバーとクライアント端末間の通信遅延には注意が必要です。
また、サーバー時間が夏時間(DST)などで変更される可能性があるため、これらの変更を自動トレーディングシステムが認識しているか確認する必要があります。
TimeTradeServer関数を使う際は、高精度のタイマーを必要とする場合には適していないことに注意が必要です。
ミリ秒単位での精度が必要な場合は、GetTickCount関数を使用することを検討してください。
※GetTickCount関数については↓の記事をご参照ください
また、ストラテジーテスターでのバックテスト中にはTimeTradeServer関数は、シミュレーションされたサーバー時間であるTimeCurrent関数と同じ値を返します。
TimeTradeServer関数を使ったサンプルコード
下記のサンプルコードはTimeTradeServer関数を始めとする、MQL5の時間情報系関数が取得した値をログ出力させたものになります。
void OnStart()
{
// TimeCurrent関数の戻り値は最終価格更新時の時刻
datetime timeCurrent = TimeCurrent();
// TimeTradeServer関数の戻り値はトレードサーバーの現在時刻
datetime timeTradeServer = TimeTradeServer();
// TimeLocal関数の戻り値はクライアント端末のローカル時刻
datetime timeLocal = TimeLocal();
// TimeGMTOffset関数の戻り値はGMTとの時差
int gmtOffset = TimeGMTOffset();
// ログに各時刻とGMTオフセットを出力
Print("TimeCurrent: ", TimeToString(timeCurrent));
Print("TimeTradeServer: ", TimeToString(timeTradeServer));
Print("TimeLocal: ", TimeToString(timeLocal));
Print("GMT Offset: ", gmtOffset);
}
<参照>
TimeCurrent関数/TimeToString関数/UNIXタイム/タイムスタンプ/datetime型/iTime関数/StringToTime関数/ENUM_TIMEFRAMES/TimeToStruct関数/GetTickCount関数/MqlDateTime構造体/タイムゾーン/TimeDaylightSavings関数/TimeGMT関数/TimeGMTOffset関数/TimeLocal関数/夏時間/サーバー時間
————————————————————————————–
※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる
をメインコンテンツとして展開しています。
第0回から、順を追って勉強していけばプログラミングの経験がなくてもMQL5を使って、MT5用のEAが作れるように書いています。最初は難しいと感じるかもしれませんが、繰り返し勉強していく事で自然とスキルが身についていくはずです。興味ある方は是非ご覧ください。