【開発の裏側㉛】週末になると時刻が何時間もずれた。値動きが止まると、MTの時計も止まります

【開発の裏側㉛】週末になると時刻が何時間もずれた。値動きが止まると、MTの時計も止まります

記事
IT・テクノロジー
どうも、FXトレーダー兼システムエンジニアのナオトです。

レンジのボックスを引くインジケーター、e-BoxRangeSnap を製品として作り直したときの話です。
古い版のコードを点検していて、週末になると、表示する時刻が何時間もずれる作りになっているのを見つけました。



このインジケーターは、お知らせやスナップショットに付ける時刻を、選んだ地域の時刻で出します。初めは東京です。

地域の時刻に直すには、業者のサーバーの時刻が、世界標準時から何時間ずれているかを知る必要があります。
古い版は、それを、サーバーの今の時刻から世界標準時を引いて出していました。

ここで使っていたのが、TimeCurrent です。



TimeCurrent は、名前だけ見ると、サーバーの今の時刻を返しそうです。
でも実際に返すのは、最後に値動きが届いた時刻です。

平日は、値動きが次々に届くので、ほぼ今の時刻と同じになります。
ところが週末は、金曜の終わりで値動きが止まります。TimeCurrent も、その時刻で止まったままです。

止まった時刻から、進み続ける世界標準時を引くと、差は時間がたつほど大きくなります。
土曜や日曜にチャートを開くと、業者の時刻のずれを、何時間も取り違えていました。



直し方は、MT5とMT4で分けました。

MT5には、TimeTradeServer という関数があります。こちらは値動きが無くても、サーバーの今の時刻を進めて返してくれます。MT5はこれに替えました。

MT4には、同じ関数がありません。
そこで、値動きが届いているときに測った差を覚えておき、値動きが止まっている間は、その覚えた差を使うようにしました。

ただ、MT4で、値動きの無い週末に初めて起動したときは、覚えた差がまだありません。その場合は、最初の値動きが来るまで、ずれが残ります。
ここは直しきれない所として、仕様書に書いてあります。



TimeCurrent が最後の値動きの時刻を返すことは、知っていれば当たり前のことです。
でも、平日にだけ動かして確かめていると、ずれは一度も出ません。週末に開いて初めて見えるので、気づきにくい所でした。

時刻を使う処理は、値動きの止まっている時間にどう動くかまで、見ておく必要があります。

インジケーターやEAの点検と改修のご依頼も受けています。


最後までお読みいただき、ありがとうございました。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す