Determing the broker offset and GMT automatically. Instead of asking the support of your broker, from whom you will probably receive an insufficient answer (who would be willing to explain a missing hour), we simply look ourselves how they time their prices in the weeks of the time changes — but not cumbersome by hand, we let a program do it — why do we have a PC after all.
Determing the broker offset and GMT automatically. Instead of asking the support of your broker, from whom you will probably receive an insufficient answer (who would be willing to explain a missing hour), we simply look ourselves how they time their prices in the weeks of the time changes — but not cumbersome by hand, we let a program do it — why do we have a PC after all.
Determing the broker offset and GMT automatically. Instead of asking the support of your broker, from whom you will probably receive an insufficient answer (who would be willing to explain a missing hour), we simply look ourselves how they time their prices in the weeks of the time changes — but not cumbersome by hand, we let a program do it — why do we have a PC after all.
DealingWithTime.mqhの バージョンは、Dealing with Time (Part 2)の記事の1.01です:関数 (https://www.mql5.com/en/articles/9929) が動作しなくなったのは、この記事が公開されてからしばらくして、MQ がCopyTime( ) 関数の動作を変更したためです。この関数は、start_time や stop_time パラメータに指定されたTimeCurrent() よりも大きい場合、将来の時間値を返さなくなりました。その代わりに、最後の現在のバーの始値が可能な限り大きな値として返されます。
FXセッションの終了時刻は、ブローカーのタイムシフトを決定するためにこの方法で決定されたため、現在、これは正しくない値につながります!
この計算はバージョン2.03で変更されました。このバージョンはすでにCodeBaseで利用可能です: https://www.mql5.com/en/code/45287。
しかし、タイムシフトの計算も完全に変更され、1970年代までのシドニー(オーストラリア)のタイムシフトの複雑な時間がカバーされるようになりました。
また、1970年代以降のすべての時刻の変化をzipファイルにしたDST 1975 - 2030.xlsxの 表も添付しましたので、計算式が正しく機能するかどうかご確認ください:
1982年1月1日はアメリカの標準時(DST==0)であり、次の変更は1982年4月25日、4月の最終(25日)日曜日(4)である。この表は、すでに地理的なタイムゾーン(A列)でソートされ、次にその年のタイムゾーン(L列、spr=春、aut=秋、)、最後に問い合わせの日付(C列)でソートされている。 Test_DST 2.mq5を デバッグモードで実行し、デバッガで日記のログから行をコピーしてスプレッドシートに貼り付けると、表が自動的に作成されます(スクリプトをデバッグモードで実行することはできません)。 セルの区切り文字はスペースです。
さらに、新しいシンプルなSecTillClose() 関数が追加され、CopyTime()を 使用せずに、外為市場がクローズするまでの残り時間(MQ時間通貨)を秒単位で表示します。これは、週末前にポジションをクローズしたい人や、週末前の定義された期間に新しいポジションをオープンしたくない人にとって興味深いものです。
付属のインジケータDealingWithTime_TestIndi.mq 5は、チャート上のコメントとして、ヨーロッパ、アメリカ、オーストラリア(シドニー)のサマータイムだけでなく、様々な都市の現在時刻と時差も表示します。ここでは、比較のために、主要都市の現地時間の違いを表にしています: https://www.timeanddate.com/worldclock/。このため、いつでも値を確認することができる。このインジケーターは、これらの値がどのように決定され、どのように使用されるのか(何から何が引かれ、何に何が加えられるのか)も示しているため、自分で簡単に使用することができます。
最後の2行は、現在のFXセッションの最後の1秒と、残り時間を時間単位(判断しやすい)と秒単位で表示しています。ニューヨークでは、金曜日の現地時間午後5時にFXセッションが終了すると、ニューヨーク時間午後5時にオープンしている有効なバーはありません。したがって、この関数では、ブローカーの時間における最後のバーの有効なオープン時間を得るために、1秒が差し引かれます。ただし、ブローカーによってはFXセッションを数分早く終了し、価格の提供を停止し、取引注文を受け付けなくなる場合があります。
記事の処理時間(その2):DealingWithTime.mqh v. 1.01バージョンの関数( https://www.mql5.com/en/articles/9929 )が動作しなくなったのは、この記事が公開されてからしばらくして、MQがCopyTime()を 動作するように変更したためです。この関数は、start_timeおよび/またはstop_timeパラメータに指定されたTimeCurrent() よりも大きい場合、未来の時間値を返さなくなりました。その代わりに、最後の現在のバーの始値が可能な最大値として返されます。
FXセッションの終了時刻は、ブローカーの時間オフセットを決定するためにこの方法で決定されるため、この結果、誤った値が返されるようになりました!
この計算はバージョン2.03で変更されました。このバージョンはコードベースで利用可能です: https: //www.mql5.com/en/code/45287.
また、時間変化の計算も完全に変更され、シドニー(オーストラリア)から1970年代までの複雑な時間変化をカバーするようになりました。
また、計算式が正しく動作していることを確認できるように、70年代以降のすべての時間変化を記載した表DST 1975 - 2030.xlsxを zipファイルとして添付しました:
1982年1月1日は米国標準時(DST=0)であり、次の変更は1982年4月25日、4月の最後の(25日目の)日曜日(4)である。この表は、地理的なタイムゾーン(A列)、年のタイムゾーン(L列、spr=春、aut=秋)、そして最後にクエリー日付(C列)でソートされている。 Test_DST 2.mq5 デバッグモードで実行し、デバッガから日誌ログの行をコピーしてスプレッドシートに貼り付けると、セルの区切りがスペースになる。
さらに、新しいシンプルな関数SecTillClose() が追加され、外為市場(MQの時間通貨)がクローズするまでの残り時間を秒単位で知ることができます -CopyTime() は不要です。これは、週末前にポジションを決済したい場合や、週末前の指定時間内に新規ポジションを建てたくない場合に便利です。
チャートの注釈として含まれるインジケータDealingWithTime_TestIndi.mq5 は、ヨーロッパ、米国、オーストラリア (シドニー) の夏時間だけでなく、現在時刻と各都市間の時差も表示します。ここでは、主要都市の異なるローカル時間の比較のためのテーブルを見つけることができます:https ://www.timeanddate.com/worldclock/ 。このように、いつでもこれらの値を確認することができます。このインジケーターは、これらの値をどのように決定して使用するか(何から何を引くか、何に何を足すか)も示しているので、自分で簡単に使用することができます - コピー&ペースト、これはプログラミングの最も速い形式です。
最後の2行は、現在のFXセッションの最後の1秒と、残り時間を時間(判断しやすい)と秒単位で表示しています。ニューヨークでは、金曜日の現地時間午後5時にFXセッションが終了すると、ニューヨーク時間午後5時に有効なバーは開いていません。したがって、この関数では、ブローカーの時間で最後の有効なバーのオープン時間を得るために、1秒を差し引きます。ただし、ブローカーによっては数分早くFX取引を終了し、価格の提示や取引注文の受付を終了するところもあります。
DealingWithTime.mqhの バージョン。1.01は、Dealing with Time (Part 2)の記事で紹介したものです:関数 (https://www.mql5.com/ja/articles/9929) が動作しなくなったのは、この記事が公開されてからしばらくして、MQ がCopyTime( ) の 動作を変更したためです。この関数は、start_time や stop_time パラメータに指定されたTimeCurrent( ) よりも大きい場合、将来の時間値を返さなくなりました。その代わりに、最後の現在のバーの可能な最大開始時間値が返されます。
通貨セッションの終了時刻は、ブローカーの時間オフセットを決定するような方法で定義されていたため、この結果、正しくない値が返されるようになりました!
この計算はバージョン2.03で変更されました。このバージョンはCodeBaseのhttps://www.mql5.com/ja/code/45287。
また、時間変換の計算も完全に変更され、オーストラリアのシドニーから70年代までの複雑な時間変換がカバーされるようになりました。
また、70年代以降のすべての時刻の変更を含むDST テーブル1975 - 2030.xlsxを zipファイルとして添付しました:
1982年1月1日。- 米国標準時(DST==0)、次の変更は1982年4月25日、4月(4)の最終(25日)日曜日です。この表は、すでに地理的なタイムゾーン(列A)でソートされ、次にその年のタイムゾーン(列L、spr=春、aut=秋)でソートされ、最後にクエリの日付(列C)でソートされている。 Test_DST 2.mq5を デバッグモードで実行し、デバッガでログ行をコピーしてスプレッドシートに貼り付けると、スプレッドシートが自動的に作成されます(スクリプトをデバッグモードで実行することはできません)。 セルの区切り文字はスペースになります。
さらに、新しいシンプルな関数SecTillClose() が追加され、CopyTime() を 使用せずに、外為市場がクローズするまでの残り時間 (MQ 時間通貨) を秒単位で表示します。これは、週末前にポジションをクローズしたい人や、週末前の一定期間に新しいポジションをオープンしたくない人にとって興味深いものです。
付属のインジケータDealingWithTime_TestIndi.mq 5は、チャート上のコメントとして、ヨーロッパ、アメリカ、オーストラリア(シドニー)のサマータイムだけでなく、異なる都市の現在時刻と時差も表示します。ここでは、比較のために、主要都市の現地時間の異なる表を見つけることができます: https://www.timeanddate.com/worldclock/。このように、いつでも値を確認することができる。このインジケーターは、これらの値がどのように定義され、どのように使用されるのか(何から何が引かれ、何から何が加えられるのか)も示しているため、自分で簡単に使用することができます。
最後の2行には、現在のFXセッションの最後の1秒と、残り時間が時間(判断しやすい)と秒単位で表示されています。ニューヨークでは、金曜日の現地時間17:00にFXセッションが終了すると、ニューヨーク時間17:00には有効なバーが開いていません。したがって、この関数は、ブローカーの時間で最後のバーの有効なオープン時間を取得するために1秒を差し引きます。ただし、一部のブローカーは、通貨セッションを数分早く終了し、価格の提供や取引注文の受け付けを終了します。
こんにちは。
作者@Carl Schreiberの CopyTime() 関数に関する最後の投稿を読みましたが、最初のバージョンの方がより理解しやすい ことが分かったので、私はまだDealingWithTime.mqh v .1.01を使って います。
私のインジケーターでは、次のようにしたいのです:
double NyRawTimeBuffer[]; double NyHourBuffer[]; double NyMinuteBuffer[];この関数は、ターミナルが始まるタイムフレームチャートがH1に設定されているときだけ動作します。
ターミナルを終了し、タイムフレームを例えばM5に設定し、ターミナルを再起動すると、以下のエラーが発生します:
2024.02.18 15:33:38.048 MyFractals_V4 (EURUSD,M5) 240:CopyTime() FAILED for EURUSD H1: 2024.02.12 02:00:00からの時間が必要ですが、1970.01.01 00:00:00からの時間しかありません:4401
この記事(https://www.mql5.com/ja/code/1251)にあるCheckLoadHistory()を 使用し、ライブラリのCopyXXXX()関数の前に配置するよう、メッセージですでに提案していただきました:
しかし、問題はまだ残っています。
checkhistory.mqh(19行目)に以下のコメントがありますが、これが問題なのかどうかわかりません。コメントをして再度プログラムをテストしてみましたが、うまくいきませんでした。
すべてのコードを書き直すことなく、更新されたライブラリDealingWithTimeV2.03.mqhに 切り替えることなくバグを調整する方法はありますか?
ストラテジーテスターで正しいタイムを得るには、「入力変数を使った代替方法」しかないのでしょうか?
こんにちは。
コードを以下のように変更してみたところ、今のところうまくいっています。コンストラクタを持つクラスを変換し、すべてのメソッドはクラスの一部であることに注意してください。クラスはEA/ストラテジークラス内で呼び出され、初期化される必要があります。
CDealWithTime.OnTick()はEA/ストラテジーのOnTick()内に置く必要があります。
このコードは、ヨーロッパと米国のブローカーのために自動的に夏時間を計算します:
https://www.mql5.com/ja/code/27860
上記のコードは、Forex Market Hourshttps://www.mql5.com/ja/code/27771 で、夏時間の変更を計算するために 使用されました。
同じような関数を世界のさまざまな地域について構築することができる。
こんにちは、Amrali
DealingWithTime v2.03の記事の代替として、シンプルで良いコードですね。もっと詳しく調べてみます。
DealingWithTime.mqh v . 1.01.
こんにちは、ダニエル
DealingWithTime.mqh v . 1.01.この記事とそのコードは、DealingWithTime.mqh v.2.03の記事https://www.mql5.com/ja/code/45287 でカールが説明しているように、MQLの計算方法の変更により、もう機能しません。
このコードを使うべきではありません。