MT4(MQL4)でいろんな時間関数や取得方法をまとめたソースを公開しました。
どんな時間を取得できるのか?
取得できる時間の種類には下記の2つ軸があります。
- どこから時間を取得するのか
- どの単位を時間を取得するのか
「1」にはMT4会社のサーバ時間を取得するのか、MT4を動かしているパソコンのローカル時間を取得するのかの2つがあります。
「2」には秒単位まで取得するのか、秒よりも細かい1000分の1秒単位のTickの時間を取得するのかの2つがあります。さらに粒度を粗くすると「曜日」「日付」「時間(hour)」などを取得することもできます。
なぜいろんな時間の取得方法を使う必要があるのか
時間の活用には「〇秒後に処理をするといった処理の制御」と、「ログに出力して処理時間を確認する」といった使い方が考えられます。
前者は安定したMT4のサーバ時間を使うほうが良いのですが、後者はローカル時間のほうが後から時間を確認しやすいです。
また処理の制御をする際にミリ秒単位で制御したいのか、秒単位で制御したいのか、分単位で制御したいのかによっても取得方法が変わります。
「一度取引をしたから〇秒は取引をしない」「ある処理のあとに〇ミリ秒だけWaitする」「週を跨いだ取引をしないように金曜の〇時以降は取引しない」という制御はよく使われます。
関数とソースの説明
処理の制御やログ出力によく使う時間関数をまとめて記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
int OnInit(){ return(INIT_SUCCEEDED); } void OnDeinit(const int reason){ ObjectsDeleteAll(); } void OnTick() { // 1-1)MT4のサーバ時刻を秒単位で取得し、複数の日付時刻型で表示する datetime server_time = TimeCurrent(); Print("MT4 ServerTime(YYYY.MM.DD HH:MM)=",TimeToStr(server_time)); Print("MT4 ServerTime(YYYY.MM.DD)=",TimeToStr(server_time,TIME_DATE)); Print("MT4 ServerTime(HH:MM)=",TimeToStr(server_time,TIME_MINUTES)); Print("MT4 ServerTime(HH:MM:SS)=",TimeToStr(server_time,TIME_SECONDS)); // 1-2)MT4のサーバ時刻を秒単位で取得し、int型で表示する int server_time_sec = TimeCurrent(); Print("MT4 ServerTime(sec)=",server_time_sec); Print(" "); // 2-1)ローカルPCの時刻を秒単位で取得し、複数の日付時刻型で表示する datetime local_time = TimeLocal(); Print("PC LocalTime(YYYY.MM.DD HH:MM)=",TimeToStr(local_time)); Print("PC LocalTime(YYYY.MM.DD)=",TimeToStr(local_time,TIME_DATE)); Print("PC LocalTime(HH:MM)=",TimeToStr(local_time,TIME_MINUTES)); Print("PC LocalTime(HH:MM:SS)=",TimeToStr(local_time,TIME_SECONDS)); // 2-2)ローカルPCの時刻を秒単位で取得し、int型で表示する int local_time_sec = TimeLocal(); Print("PC LocalTime(sec)=",local_time_sec); Print(" "); // 3)サーバ起動から経過した時間をミリ秒で表示する long server_time_tick_msec = GetTickCount(); Print("MT4 ServerTime(msec)=",server_time_tick_msec); Print(" "); // 4)その他日付関連の関数 Print("Day of the week=",DayOfWeek()); //MT4サーバ基準の曜日 日曜:0、月曜:1、・・・ Print("Hour=",Hour()); //MT4サーバ基準の時間 Print(" "); } |
【結果ログのサンプル】
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(YYYY.MM.DD HH:MM)=2019.10.25 06:36
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(YYYY.MM.DD)=2019.10.25
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(HH:MM)=06:36
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(HH:MM:SS)=06:36:28
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(sec)=1571985388
0 12:36:28.492 kensho USDJPY.oj1m,H1:
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(YYYY.MM.DD HH:MM)=2019.10.25 12:36
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(YYYY.MM.DD)=2019.10.25
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(HH:MM)=12:36
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(HH:MM:SS)=12:36:28
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(sec)=1572006988
0 12:36:28.492 kensho USDJPY.oj1m,H1:
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(msec)=3734040641
0 12:36:28.492 kensho USDJPY.oj1m,H1:
0 12:36:28.492 kensho USDJPY.oj1m,H1: Day of the week=5
0 12:36:28.492 kensho USDJPY.oj1m,H1: Hour=6
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(YYYY.MM.DD)=2019.10.25
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(HH:MM)=06:36
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(HH:MM:SS)=06:36:28
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(sec)=1571985388
0 12:36:28.492 kensho USDJPY.oj1m,H1:
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(YYYY.MM.DD HH:MM)=2019.10.25 12:36
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(YYYY.MM.DD)=2019.10.25
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(HH:MM)=12:36
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(HH:MM:SS)=12:36:28
0 12:36:28.492 kensho USDJPY.oj1m,H1: PC LocalTime(sec)=1572006988
0 12:36:28.492 kensho USDJPY.oj1m,H1:
0 12:36:28.492 kensho USDJPY.oj1m,H1: MT4 ServerTime(msec)=3734040641
0 12:36:28.492 kensho USDJPY.oj1m,H1:
0 12:36:28.492 kensho USDJPY.oj1m,H1: Day of the week=5
0 12:36:28.492 kensho USDJPY.oj1m,H1: Hour=6
補足説明
・GetTickCountで取得する値は、「OS起動からのミリ秒数」です。約50日を経過すると、オーバーフローして0に戻るのでご注意ください。
AIを活用した自動売買EAの無料配布始めました。3年以上の年月をかけて大分安定してきましてので、よければ「機械学習EA(Aizack)とは」をご覧ください。