//+------------------------------------------------------------------+//| ロンドン(イギリス)のサマータイムを計算する。//| Validated to https://www.timeanddate.com/time/change/uk/london |//+------------------------------------------------------------------+void DST_Europe(int iYear, datetime &dst_start, datetime &dst_end)
{
datetime dt1,dt2;
MqlDateTime st1,st2;
/* 英国の夏時間は、3月最終日曜日の現地時間01:00(
)に開始し、10月最終日曜日の現地時間02:00に終了する。
dt1=StringToTime((string)iYear+".03.31 01:00");
dt2=StringToTime((string)iYear+".10.31 02:00");
TimeToStruct(dt1,st1);
TimeToStruct(dt2,st2);
dst_start=dt1-(st1.day_of_week*86400);
dst_end =dt2-(st2.day_of_week*86400);
}
//+------------------------------------------------------------------+//| ニューヨークの夏時間を計算する。//| https://www.timeanddate.com/time/change/usa/new-york|に 検証された。//+------------------------------------------------------------------+void DST_USA(int iYear, datetime &dst_start, datetime &dst_end)
{
datetime dt1,dt2;
MqlDateTime st1,st2;
/* 米国の夏時間は、3月の第2日曜日(
)の現地時間02:00に開始し、11月の第1日曜日の現地時間02:00に終了する。
dt1=StringToTime((string)iYear+".03.14 02:00");
dt2=StringToTime((string)iYear+".11.07 02:00");
TimeToStruct(dt1,st1);
TimeToStruct(dt2,st2);
dst_start=dt1-(st1.day_of_week*86400);
dst_end =dt2-(st2.day_of_week*86400);
}
//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+voidOnStart()
{
datetime dst_start,dst_end;
dst_start=dst_end=0;
//--- 欧州連合(EU)では、夏時間は1月1日の最終日曜日から始まる。//--- 3月から10月の最終日曜日まで。Print("========= European Summer Time (DST) =========");
for(int year=2010; year<=2029; year++)
{
DST_Europe(year,dst_start,dst_end);
Print("DST starts on ",dst_start," and ends on ",dst_end);
}
//--- アメリカでは、夏時間は第2日曜日から始まる。//--- 3月から11月の第1日曜日まで。Print("========= American Summer Time (DST) =========");
for(int year=2010; year<=2029; year++)
{
DST_USA(year,dst_start,dst_end);
Print("DST starts on ",dst_start," and ends on ",dst_end);
}
}
//+------------------------------------------------------------------+/*
output:
============== 欧州夏時間 (DST) ====================
夏時間は2010.03.28 01:00:00に開始し、2010.10.31 02:00:00に終了する
夏時間は2011.03.27 01:00:00に開始し、2011.10.30 02:00:00に終了する。10.30 02:00:00
夏時間開始:2012.03.25 01:00:00、終了:2012.10.28 02:00:00
夏時間開始:2013.03.31 01:00:00、終了:2013.10.27 02:00:00
夏時間開始:2014.03.30 01:00:00に開始し、2014.10.26 02:00:00に終了
DST starts on 2015.03.29 01:00:00に開始し、2015.10.25 02:00:00に終了
DST starts on 2016.03.27 01:00:00に開始し、2016.10.30 02:00:00
DST starts on 2017.03.26 01:00:00 and end on 2017.10.29 02:00:00
DST starts on 2018.03.25 01:00:00 and end on 2018.10.28 02:00:00
DST starts on 2019.03.31 01:00:00 and end on 2019.10.27 02:00:00
DST starts on 2020.03.29 01:00:00 and end on 2020.10.25 02:00:00
DST starts on 2021.03.28 01:00:00 and end on 2021.10.31 02:00:00
DST starts on 2022.03.27 01:00:00 and end on 2022.10.30 02:00:00
DST starts on 2023.03.26 01:00:00 and end on 2023.10.29 02:00:00
DST starts on 2024.03.31 01:00:00 and end on 2024.10.27 02:00:00
DST starts on 2025.03.30 01:00:00 and end on 2025.10.26 02:00:00
DST starts on 2026.03.29 01:00:00 and end on 2026.10.25 02:00:00
DST starts on 2027.03.28 01:00:00に開始し、2027.10.31 02:00:00に終了
夏時間は2028.03.26 01:00:00に開始し、2028.10.29 02:00:00に終了
夏時間は2029.03.25 01:00:00に開始し、2029.10.28 02:00:00
============== アメリカ夏時間(DST) ============
DST開始:2010.03.14 02:00:00、終了:2010.11.07 02:00:00
DST開始:2011.03.13 02:00:00、終了:2011.11.06 02:00:00
DST開始:2012.03.11 02:00:00、終了:2012.11.04 02:00:00
DST開始:2013.03.10 02:00:00、終了:2013.11.03 02:00:00
DST開始:2014.03.09 02:00:00から2014.11.02 02:00:00まで
DST開始日:2015.03.08 02:00:00から2015.11.01 02:00:00まで
DST開始日:2016.03.13 02:00:00から2016.11.06 02:00:00
DST starts on 2017.03.12 02:00:00 and end on 2017.11.05 02:00:00
DST starts on 2018.03.11 02:00:00 and end on 2018.11.04 02:00:00
DST starts on 2019.03.10 02:00:00 and end on 2019.11.03 02:00:00
DST starts on 2020.03.08 02:00:00 and end on 2020.11.01 02:00:00
DST starts on 2021.03.14 02:00:00 and end on 2021.11.07 02:00:00
DST starts on 2022.03.13 02:00:00、2022.11.06 02:00:00
夏時間開始 2023.03.12 02:00:00、2023.11.05 02:00:00
夏時間開始 2024.03.10 02:00:00、2024.11.03 02:00:00
夏時間開始:2025.03.09 02:00:00、終了:2025.11.02 02:00:00
夏時間開始:2026.03.08 02:00:00、終了:2026.11.01 02:00:00
夏時間開始:2027.03.14 02:00:00に開始し、2027.11.07 02:00:00に終了
DSTは2028.03.12 02:00:00に開始し、2028.11.05 02:00:00に終了
DSTは2029.03.11 02:00:00に開始し、2029.11.04 02:00:00に終了
*/
1.サポートが必ずしも正しい情報を提供するとは限らないからです。あなた自身がアルパリのディーラーについて指摘したことです。+ 各ディーラーから変遷を聞き出すのはコストがかかる。エンドユーザーが誰と議論しているのかが分からない。
2.しかし、もしディーラーが冬から夏への切り替えをしないのであれば、計算が少しおかしくなる。
私はあなたのライブラリを少し修正しようとしましたが、どうやら何かが間違っていたようです。このコードは、Expert Advisorが自動的にGMT時間を検出し、ブローカーのサーバーではなくGMT時間に従って取引することにつながるはずだと思いました。コードが最適かどうかはわかりませんが、解決策はうまくいったようです。しかし、時間を変更しないディーラーでは、不正確な計算が行われています。
1.
- EURUSDに固定せず、EAが配置されているペアを使用します。
- 時間も固定せず、現在の時間から1年を引いただけです。
そして、このブロックを動的に取得するために、bool setBokerOffset(string symbol, int &USwinEUwin1, int &USsumEUsum1, int &USsumEUwin1)にパラメータを渡しています。
2. アルファFX。私はデモ口座からのデータを提供することができますので、何も開かずに確認することができます。ディーラーが冬から夏に切り替わることはなく、GMTとの差はまだ発生しているということです。
3.デザインがどこでどのように使われているのかが少し不明。
3. Немного не понял, как и где использована конструкция.
インジケータでは、すべてのバーを ループする。
一般的に、私はグリニッジに切り替えた。私は、冬時間に移行する時間をサーバー時間とグリニッジ標準時の差と定義している。ただ、ブローカーごとにこの差を自分で計算し、Expert Advisorの定数に入力する必要があります。ユーザーが異なるシフト、ブローカー、取引所を持ち、冬時間に移行する時間が同じでないときに、グリニッジはすべて同じです。
具体的にはどうやったのですか?定数はどのように計算されていますか?
具体的にはどうやったのですか?定数はどのように計算されているのですか?
グリニッジ時間マイナスtimecarrent、冬時間への移行で、それは時間によって変更されます。私は仕事の開始と終了の時刻を一度書き、クライアントと1時間の差+3と+2、ブローカー+3、+2、-6グリニッジ時間)))。そして、それはすべてのために同じ、特定の時間に仕事を開始する必要がありました。グリニッジ標準時は同じですが、サーバーとローカル時間は異なります。私はFedoseyevの教科書からコードを作り直した)。
一般的に問題は、サーバー時間とグリニッジ標準時の差を表す標準関数がないことだ。しかし、それはカウントされる。また、ローカルタイムも冬時間に移行することがあり、ブローカーの移行とは異なる時刻に移行するという問題もある。
グリニッジ時間マイナスtimecarrent、冬時間への移行と、それは時間によって変更されます。私は、クライアントとの仕事の開始と終了の時間を一度書いた時間+3と+2、ブローカー+3、+2、-6グリニッジ時間の違い)))。そして、それはすべてのために同じ、特定の時間に仕事を開始する必要がありました。グリニッジ標準時は同じですが、サーバーとローカル時間は異なります。フェドセーエフの教科書のコードを手直しした)。
一般的に問題は、サーバー時間とグリニッジ標準時の差を表す標準関数がないことだ。しかし、それはカウントされる。また、ローカルタイムも冬時間に移行することがあり、ブローカーの移行時間とは異なる時間に移行するという問題もある。
この解決策は私の頭の中にあります。しかし、あなたは最後の段落で痛みを指摘した)
こんにちは、カール・シュライバー です。
この記事がしばらく前にアップされていたことは知っていますが、今見つけました。 この作業を共有していただきありがとうございます。 本当に理解するためには、実際にテストする必要がありますが、今のところ簡単な質問があります:
MqlDateTime 構造体.day_of_weekに依存するのではなく、別の曜日計算を行っているようですが、なぜこのような別の計算方法を使用しているのでしょうか? 精度に利点があるのでしょうか? それとも単に構造体への変換を避けるためでしょうか?
このコードは、ヨーロッパと米国のブローカーのために自動的に夏時間を計算します:
https://www.mql5.com/ja/code/27860
上記のコードは、Forex Market Hourshttps://www.mql5.com/ja/code/27771 で、夏時間の変更を計算するために 使用されました。
同じような関数を世界のさまざまな地域用に構築することができます。