時間の取扱い(第1部):基本
どちらの時刻
正確なタイミングは取引において重要な要素になることがあります。現在時刻でロンドンやニューヨークの証券取引所がすでに開いているかまだ開いていないか、外国為替取引の取引時間はいつ開始および終了するかなどです。手動で取引して生活しているトレーダーにとって、これは大きな問題ではありません。さまざまなインターネットツールと金融商品の仕様を通じて、自分の時間で自分のストラテジーで取引するのに適切な時期をすばやく確認できます。価格の動向だけを見て、価格の動向が彼にシグナルを提供するときはいつでも売買する一部のトレーダーにとって、時間はあまり重要ではありません。これは、「ナイトスキャルピング」を行うトレーダー、ニューヨークの(株式)市場が閉じた後やEUの(株式)市場が開く前に取引するトレーダー、または具体的(たとえば「ロンドンブレイクアウト」またはその他の方法で、売上高が最も高い時間帯)に取引するトレーダー、または株式や先物を取引するすべての人については異なります。これらのトレーダーは証券会社の時間を追跡することはできず、それぞれの取引所が開閉する米国、日本、ロンドン、EU、モスクワの実際の現地時間、または特別な先物が取引される特別な時間を使用する必要があります。
夏時間、冬時間、証券会社オフセット
すでに述べたように、画面の前に座って売買するトレーダーは、さまざまな時間を簡単に処理できます。インターネットまたは特定の関数を介して、PCが保持する値やクロックは利用可能であり、TimeGMT()、TimeGMTOffset()などのMQL関数を使用していつでも取得できます。時間に関連して取引する履歴データを使用して取引プログラムを作成およびテストする場合は、状況が異なります。実際、ライブ取引と同様に、質問にも同じように簡単に答えることができます。
UTC(協定世界時)またはグリニッジ標準時(GMT、https://greenwichmeantime.com/what-is-gmt/)から開始して、地理的または商品関連のタイムシフトを追加するだけで、今どこで何時なのかがわかります。しかし、それはそれほど単純ではありません。冬時間と夏時間(DSTまたは夏時間)の切り替えがあり、時間に応じて1時間が加算または減算されます。ただし、統一されているわけではありませんが、ヨーロッパなどの国や地域には独自の定義があり、場合によっては何年も一定(EUと米国)であるか、2014年に廃止されたロシアのように時々変更されます。EUでは、2018年に、年次時間変更の廃止に関する調査を含む議論が行われました( https://ec.europa.eu/germany/news/20180831-konsultation-sommerzeit_de)、これにより過半数が廃止に賛成したため、委員会は時間変更の終了に関する立法案を提出しました(https://ec.europa.eu/germany/news/20180914-kommission-gesetzesvorschlag -ende-zeitumstellung_de)、その後再び何も起こりませんでした。
それが十分に混沌としていないかのように、現在、証券会社はそれぞれのサーバー時間を定義する方法をミックスに追加しています。2015年に、ドイツの証券会社が私に次のように書いています。
- 2015年3月8日まで、MT4サーバーの時刻はロンドン時刻(= GMT)に設定されています。
- 2015年3月8日からは3月29日まで、CET(GMT + 1)に設定されます。
- 3月29日の時点で、サーバーはロンドン時間(= GMT + 1)に設定されます。
つまり、ドイツの証券会社はGMT + DST-USA、または(主に)ロンドン時間+米国のDSTを使用します。理由は理解できますが、外国為替取引はニューヨークの17:00に開始されるため、最初にそれを考え出す必要があります。 時間、そしてそれはアメリカの時間変更の対象となります。その結果、フランクフルトに拠点を置く人の場合、外国為替取引は21:00に開始されることがありますが、通常は22:00に開始され、秋の1〜2週間は23:00に開始されます。
トレーダーやクライアントにとって、これは幼稚園にいるようなものです。誰もが自分の望むことを望む方法で行っているのです。したがって、トレーダーまたは開発者は多くの異なる時間に直面します。これらはすべて重要である可能性があり、MQLの「オンボードリソース」からすべてを決定する必要がありますが、残念ながら、指標、スクリプト、またはEAがストラテジーテスターで実行されている場合は違います。
それを変更します。証券会社に問い合わせる必要なしに、それぞれのタイムシフトを決定します。GMTは、ストラテジーテスターの任意のタイムスタンプ、およびその後、もちろん、ニューヨーク時間などのさらに必要な現地時間で、いつでも非常に簡単に決定できるようになります。さらに、この文脈で登場したばかりなので、必要に応じて週末前にポジションを決済したいすべてのトレーダーのために、外国為替市場が開いている残り時間もです。ただし、これらの関数については2番目の記事でのみ説明します。これは、いくつかのマクロ置換を開発して、前述の関数の制御の計算と表現が簡略化されるためです。
マクロ置換
追加はすべて(添付の)インクルードファイルDealingWithTimePart1.mqhで行われます。このファイルの冒頭には、さまざまなマクロ置換があります。
まず、異なる地域のいくつかの時間シフトがあるので、それらを何度も導き出したり検索したりする必要はありません。
//--- defines #define TokyoShift -32400 // always 9h #define NYShift 18000 // winter 17h=22h GMT: NYTime + NYshift = GMT #define LondonShift 0 // winter London offset #define SidneyShift -39600 // winter Sidney offset #define FfmShift -3600 // winter Frankfurt offset #define MoskwaShift -10800 // winter Moscow offset #define FxOPEN 61200 // = NY 17:00 = 17*3600 #define FxCLOSE 61200 // = NY 17:00 = 17*3600 #define WeekInSec 604800 // 60sec*60min*24h*7d = 604800 => 1 Week
理解を深めるために、GMTは非可変の時間アンカーであることに同意しますが、ニューヨーク、ロンドン、モスクワの異なる現地時間は、それぞれ異なる(可変の)時間オフセットによって異なります。同様に、夏時間または冬時間によるシフトも変数と呼びます。理由は簡単です。可変時間差の兆候は、次のように定義されます。
可変時間+可変時間シフト= GMT
いくつかの例
モスクワ(16h) + モスクワオフセット(-3h) = GMT (13h)
ニューヨーク時間(16h) + ニューヨークオフセット(+5h) = GMT (21h)
ニューヨーク時間(16h) + (ニューヨークオフセット(+5h) + DST_US(-1h)) = GMT (20h)
フランクフルト時間(16h) + (フランクフルトオフセット(-1h) + DST_US(-1h)) = GMT (14h)
かっこに注意してください。可変時間がGMTから計算される場合、これらは重要になります。
ニューヨーク時間(16h) = GMT (20h) - (ニューヨークオフセット(+5h) + DST_US(-1h)) => 20 -(+5 + -1) = 20 - 5 +1 = 16h
フランクフルト時間(16h) = GMT (14h) - (フランクフルトオフセット(-1h) + DST_US(-1h)) => 14 -( -1 + -1) = 14 +1 +1 = 16h
信じてください、これは永続的に符号エラーと誤解の源となります。
この形式でも、MQL5とPCは、TimeGMTOffset(): TimeLocal() + TimeGMTOffset() = TimeGMT())またはTimeDaylightSavings(): TimeLocal() + TimeDaylightSavings()= PCの冬または標準の現地時間のように時間の差を扱います。
この部分の最後には、FxOpenとFxClose、および秒単位での1週間の期間(WeekInSec)があります。これは、このような指定は、 コードで突然「 604800」などが変数に追加される場合より理解しやすいためです。
次に、変数出力の2つの簡単な簡略化があります。TOSTR(A)は、変数の名前とその値を出力するので、非常に便利です。次に、平日の略語を含む配列。このプロジェクト用に開発されたコードで数回使用され、行のスペースを節約するだけでなく、計算されたタイムスタンプの方向付けにも役立ちます。
#define TOSTR(A) #A+":"+(string)(A)+" " // Print (TOSTR(hGMT)); => hGMT:22 (s.b.) string _WkDy[] = // week days { "Su.", "Mo.", "Tu.", "We.", "Th.", "Fr.", "Sa.", "Su." };
次に、MQ構造体MqlDateTimeに時間を割り当ててスカラー値を読み取ることを回避する、時間計算の代替手段に従います。それらは直接計算されます。
#define DoWi(t) ((int)(((t-259200)%604800)/86400)) // (int)Day of Week Su=0, Mo=1,... #define DoWs(t) (_WkDy[DoWi(t)]) // Day of Week as: Su., Mo., Tu., ....
DoWi(t)(整数としての曜日)は曜日を整数(日曜日:0、月曜日:1、...)として特定し、DoWs(t)(文字列としての曜日)は、DoWi(t)と配列_WkDy[]を使用して、省略された曜日をテキストとして返します。記事の後半では週末の最後と最初の時間を扱っているため、これらのマクロ置換がより頻繁に使用されます。
#define SoD(t) ((int)((t)%86400)) // Seconds of Day #define SoW(t) ((int)((t-259200)%604800)) // Seconds of Week
SoD(t)(1日の秒数)は、経過した時刻の00:00からの秒数を返します。したがって、SoD(TimeCurrent())は、この簡単な方法で、日のローソク足がすでに存在する時間を秒単位で計算します。同様に、SoW(t)は、最後の日曜日00:00からの秒数を計算します。このようにして、経過時間のパーセンテージ(秒単位)とこの日のローソク足の残り時間を簡単に計算できます。この値を864(=0.01*24*60*60)で割ると、その日がすでに経過したパーセンテージが得られます。
(double)SoD(D’20210817 15:34‘) / 864. = 64.86% 86400 - SoD(D’20210817 15:34‘) = Print("D'20210817 15:34': ", DoubleToString((double)SoD(D'20210817 15:34')/864.0, 2),"% ", 86400 - SoD(D’20210817 15:34‘),“ sec left“ );
これらの計算はそれに応じて機能します(必要な人は誰でも)。
#define MoH(t) (int(((t)%3600)/60)) // Minute of Hour #define MoD(t) ((int)(((t)%86400)/60)) // Minute of Day 00:00=(int)0 .. 23:59=1439
関数ToD(t)は、その日の秒を「datetime」データ型として返します。これにより、次のいずれかの状況でコンパイラの警告メッセージが表示されなくなります。
#define ToD(t) ((t)%86400) // Time of Day in Sec (datetime) 86400=24*60*60
関数HoW(to)は、日曜日の00:00から経過した時間の数を返します。
#define HoW(t) (DoW(t)*24+HoD(t)) // Hour of Week 0..7*24 = 0..168 0..5*24 = 0..120
これを使用すると、簡単な方法で1日の時間を計算できます。結果は、日付ではなく整数になります。
#define HoD(t) ((int)(((t)%86400)/3600)) //Hour of Day: 2018.02.03 17:55 => 17
同じ(ただし「商用」丸め)。
#define rndHoD(t) ((int)((((t)%86400)+1800)/3600))%24 // rounded Hour of Day 17:55 => 18
また、同じdatetime型です。
#define rndHoT(t) ((t+1800)-((t+1800)%3600)) // rounded Hour of Time: 2018.02.03 17:55:56 => (datetime) 2018.02.03 18:00:00
1日の始まりの時刻をdatetimeとします。それ以外の場合は、時間枠D1(1日)の呼び出しで追加で決定する必要があります。
#define BoD(t) ((t)-((t)%86400)) // Begin of day 17.5 12:54 => 17.5. 00:00:00
datetimeとしての週の初めの時刻。それ以外の場合は、1週の時間枠を呼び出して決定する必要があります。
#define BoW(t) ((t)-((t-172800)%604800 - 86400)) // Begin of Week, Su, 00:00
次の抜粋では、MQLの構造体と関数を使用しています。これは、たとえばうるう年のために変換が複雑すぎたためですが、上記と同じ形式の原則に従っており、時間関数の名前は主に3文字または頭字語(DoY(=日番号)、MoY(月番号)、YoY(年番号))です。
MqlDateTime tΤ; // hidden auxiliary variable: the Τ is a Greek characker, so virtually no danger int DoY(const datetime t) {TimeToStruct(t,tΤ);return(tΤ.day_of_year); } int MoY(const datetime t) {TimeToStruct(t,tΤ);return(tΤ.mon); } int YoY(const datetime t) {TimeToStruct(t,tΤ);return(tΤ.year); }
これは、米国の定義に従った週番号の計算です。
int WoY(datetime t) //Su=newWeek Week of Year = nWeek(t)-nWeeks(1.1.) CalOneWeek:604800, Su.22:00-Su.22:00 = 7*24*60*60 = 604800 { return(int((t-259200) / 604800) - int((t-172800 - DoY(t)*86400) / 604800) + 1); // calculation acc. to USA }
(週ごとの計算について詳しくは、https://en.wikipedia.org/wiki/Week#Numberingをご覧ください)。
季節と地域の時差
関数に必要な簡略化などを宣言して説明したので、次に、さまざまなローカルおよび季節のタイムシフトの幅広いフィールドと、証券会社とMQL5がそれらを処理する方法を準備します。プログラミング言語MQL5から始めましょう。
MQL5での時間
最初の即時の時間は、証券会社が相場を提供する時間です。これは、バーの開始時間に反映され、最後に受け取ったクォートについてTimeCurrent()で照会できます。多くの場合(そしてこれは驚くべきことかもしれませんが)、今の時刻は比較的重要ではなく、バー、価格だけでなく、時間内の取引活動を分類するのに役立ちます。そのため、ターミナルの環境、ライブ取引、およびストラテジーテスターにのみ関連性があります。
次に、TimeTradeServer()があります。これは「取引サーバーの現在の計算時間を返します。TimeCurrent()関数とは異なり、時間の計算はクライアントターミナルで実行され、ユーザのコンピュータの時間設定に依存します。」ただし、「ストラテジーテスターでのテスト中、TimeTradeServer()は履歴データに従ってシミュレートされ、常に TimeCurrent()。」したがって、この関数は、ストラテジーテスターでのライブ操作用に最適化されるプログラムにはあまり役立ちません。
同じことがTimeGMT()とTimeLocal()にも当てはまります。「ストラテジーテスターでのテスト中、TimeGMT()は常にTimeTradeServer()でシミュレートされたサーバー時間と等しくなります。」 これはTimeCurrent()と同じです。
TimeGMTOffset()= TimeGMT()-TimeLocal()であるため、これにより、ストラテジーテスターでは TimeGMTOffset()が「役に立たない」状態になり、これは常にゼロです。:(
最後に残っているのはTimeDaylightSavings()です。「夏時間への移行が発生した場合、夏時間の補正を秒単位で返します。ユーザのコンピュータの設定によって異なります。... 冬時間(標準時)への移行が発生した場合は、0を返します。」
ライブデモ口座からの出力は次のとおりです(日付からわかるように、MQは現在、クエリの時点でEUと米国の夏時間です)。
2021.08.26 09:25:45.321 MasteringTime (EURUSD,M1) TimeCurrent: 10:25
2021.08.26 09:25:45.321 MasteringTime (EURUSD,M1) TimeTradeServer: 10:25
2021.08.26 09:25:45.321 MasteringTime (EURUSD,M1) TimeLocal: 09:25
2021.08.26 09:25:45.321 MasteringTime (EURUSD,M1) TimeGMT: 07:25
2021.08.26 09:25:45.321 MasteringTime (EURUSD,M1) TimeDaylightSavings: -3600 h: -1
2021.08.26 09:25:45.321 MasteringTime (EURUSD,M1) TimeGMTOffset: -7200 h: -2
以下は、ストラテジーテスターの同じ口座の出力です(デバッグ)。
2021.08.26 10:15:43.407 2021.06.18 23:54:59 TimeCurrent: 23:54
2021.08.26 10:15:43.407 2021.06.18 23:54:59 TimeTradeServer: 23:54
2021.08.26 10:15:43.407 2021.06.18 23:54:59 TimeLocal: 23:54
2021.08.26 10:15:43.407 2021.06.18 23:54:59 TimeGMT: 23:54
2021.08.26 10:15:43.407 2021.06.18 23:54:59 TimeDaylightSavings: 0 h: 0
2021.08.26 10:15:43.407 2021.06.18 23:54:59 TimeGMTOffset: 0 h: 0
これらの機能はすべて、ストラテジーテスターでは役立たず、実際の状況でのみ役立ちます。したがって、他のすべての時間を自分で計算できるのはTimeCurrent()だけで、それには混乱がともないます。まあ、簡単に誰でもできます;)
理論的には、証券会社からすべてを入手できます。証券会社が相場のタイムスタンプのタイムシフトをどのように定義しているかを確認できます。たとえば、Alpariからの回答は次のとおりです。
(GMT+2/GMT +3 DST) and end on Friday at 23:55:00 Server Time. During Summer
hours trading starts at 21:05 GMT on a Sunday, and during winter hours it is
22:05 GMT on a Sunday.
これは部分的にしか当てはまらないことがわかりました。第一に、EUと米国が夏時間または冬時間で等しくない移行時間については言及されておらず、第二に、この移行時間の価格、例えば、 26.3.2021では、23:55ではなく、22:55に終了します。前後再び23:55になります。
先に進む前に、さまざまなタイムゾーンとその頭字語の概要を説明します。このトピック全体に最も役立つのは、https://24timezones.com/time-zonesのサイトのようです。そこでの表には、200の異なるタイムゾーンがリストされています。これが私たちに関連するものです。
頭字語 | タイムゾーン | サイト | UTCとの差 | GMTとの差 |
---|---|---|---|---|
CEST | 中央ヨーロッパ夏時間 | フランクフルト、夏時間 | UTC+2 | GMT+2 |
CET | 中央ヨーロッパ時間 | フランクフルト、標準時間 | UTC+1 | GMT+1 |
EDT | 東部標準時(夏時間). | ニューヨーク、標準時間 | UTC-4 | GMT-4 |
EEST | 東ヨーロッパ夏時間 | キプロス、夏時間 | UTC+3 | GMT+3 |
EET | 東ヨーロッパ標準時間 | キプロス、標準時間 | UTC+2 | GMT+2 |
EST | 東部標準時間 | ニューヨーク、標準時間 | UTC-5 | GMT-5 |
ET | 東部標準時間 | ニューヨーク | UTC-5/UTC-4 | GMT-5/GMT-4 |
GMT | グリニッジ標準時間 | ロンドン、標準時間 | UTC+0 | GMT+0 |
UTC | 協定世界時間 | ロンドン、標準時間 | UTC | GMT |
純粋に数字を見他場合、 ニューヨークとの通常の時差は-5時間で夏には-4時間で1時間「少ない」のに対し、フランクフルトからの時間差は+1またはMQ +2ですが、夏の時間差はそれぞれ+2と+3なので1時間「多い」です。 これによって混同しないでください。例を覚えておいてください。
次に、週末のMQのデモ口座の最初と最後の相場のタイムスタンプを見てみましょう。「EURUSD」のM1チャートで、最初に期間の区切りをアクティブにしてから、チャートでEnterキーを押して、月曜日の場合dd.mm.yyyy形式の日付(MQ日付形式ではありません)をそれぞれの場合に入力します。 。 次に、マウスでチャートを少し右に移動します。 これで、縦線の付いたバーが新しい週の最初になり、その左側のバーが先週の最後になります。 金曜日の最後のバーと週末の後の最初のバーの日付は次のとおりです。
以下は、2020年秋の時間切り替え前後の週末です。
EU(夏) | EU(夏) | EU(夏) | EU(冬) | EU(冬) | EU(冬) | EU(冬) | EU(冬) | EU(冬) | EU(冬) |
---|---|---|---|---|---|---|---|---|---|
US(夏) | US(夏) | US(夏) | US(夏) | US(夏) | US(冬) | US(冬) | US(冬) | US(冬) | US(夏) |
金 | 月 | 金 | 月 | 金 | 月 | 金 | 月 | 金 | 月 |
2020.10.16 | 2020.10.19 | 2020.10.23 | 2020.10.26 | 2020.10.30 | 2020.11.02 | 2021.03.05 | 2021.03.08 | 2021.03.12 | 2021.03.15 |
23:54 | 00:05 | 23:54 | 00:05 | 22:54 | 00:02 | 23:54 | 00:03 | 23:54 | 00:00 |
1,1716 | 1,17195 | 1,18612 | 1,18551 | 1,16463 | 1,16468 | 1,19119 | 1,19166 | 1,19516 | 1,19473 |
1,17168 | 1,17208 | 1,18615 | 1,18554 | 1,16477 | 1,16472 | 1,19124 | 1,19171 | 1,19521 | 1,19493 |
1,1716 | 1,1718 | 1,18596 | 1,18529 | 1,16462 | 1,16468 | 1,19115 | 1,19166 | 1,19514 | 1,19473 |
1,1716 | 1,17188 | 1,18598 | 1,18534 | 1,16462 | 1,16472 | 1,1912 | 1,19171 | 1,19519 | 1,19491 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
29 | 22 | 35 | 48 | 30 | 3 | 33 | 2 | 23 | 25 |
4 | 11 | 2 | 6 | 2 | 61 | 1 | 38 | 1 | 29 |
そして、次は2021年春の時間切り替え前後の週末です。
EU(冬) | EU(冬) | EU(冬) | EU(冬) | EU(冬) | EU(冬) | EU(冬) | EU(夏) | EU(夏) | EU(夏) |
---|---|---|---|---|---|---|---|---|---|
US(冬) | US(冬) | US(冬) | US(夏) | US(夏) | US(夏) | US(夏) | US(夏) | US(夏) | US(夏) |
金 | 月 | 金 | 月 | 金 | 月 | 金 | 月 | 金 | 月 |
2021.03.05 | 2021.03.08 | 2021.03.12 | 2021.03.15 | 2021.03.19 | 2021.03.22 | 2021.03.26 | 2021.03.29 | 2021.04.02 | 2021.04.05 |
23:54 | 00:03 | 23:54 | 00:00 | 22:54 | 00:00 | 22:54 | 00:07 | 23:54 | 00:03 |
1,19119 | 1,19166 | 1,19516 | 1,19473 | 1,19039 | 1,18828 | 1,17924 | 1,17886 | 1,17607 | 1,17543 |
1,19124 | 1,19171 | 1,19521 | 1,19493 | 1,19055 | 1,18835 | 1,17936 | 1,17886 | 1,17608 | 1,17543 |
1,19115 | 1,19166 | 1,19514 | 1,19473 | 1,19038 | 1,18794 | 1,17922 | 1,17884 | 1,17607 | 1,17511 |
1,1912 | 1,19171 | 1,19519 | 1,19491 | 1,19044 | 1,18795 | 1,17933 | 1,17886 | 1,17608 | 1,17511 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
33 | 2 | 23 | 25 | 41 | 43 | 17 | 3 | 2 | 3 |
1 | 38 | 1 | 29 | 1 | 20 | 5 | 68 | 28 | 79 |
興味深いことに、週末前の最後の相場は23:00(22:54)頃に到着することがありますが、通常は24:00(23:54)に到着し、最初の相場は常に00:00に到着します。これにより、純粋に1時間ごとのビューで、1時間の「価格ホール」(23:00に閉まる、00:00に開く)が作成されることがありますが、外国為替市場は常に金曜日の17:00(NY時間)に閉まり、常に日曜日の17:00(NY時間)開きます。 切り替えの発生する週末を具体的に見て、私たちに関連する他のタイムゾーンのそれぞれの時間を計算してみましょう。
日 |
| 金曜の日付 |
|
|
| 日 |
|
|
|
|
| 最後のm1バー | 次のm1バー |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
US切り替え |
| NY時間 | NY-GMT | GMT | EU切り替え |
| CET-GMT | CET | EET-GMT | EET | (MQ) | (MQ) | |
| US(夏) | Fr, 16. Oct 20 | 17:00 | GMT + 4 | 21 |
| EU(夏) | GMT + 2 | 23 | GMT + 3 | 24 | 23:54 |
|
| US(夏) | So, 18. Oct 20 | 17:00 | GMT + 4 | 21 |
| EU(夏) | GMT + 2 | 23 | GMT + 3 | 24 |
| 00:05 |
| US(夏) | Fr, 23. Oct 20 | 17:00 | GMT + 4 | 21 | 25.10.20 | EU(夏) | GMT + 2 | 23 | GMT + 3 | 24 | 23:54 |
|
| US(夏) | So, 25. Oct 20 | 17:00 | GMT + 4 | 21 |
| EU(冬) | GMT + 1 | 22 | GMT + 2 | 23 |
| 00:05 |
01.11.20 | US(夏) | Fr, 30. Oct 20 | 17:00 | GMT + 4 | 21 |
| EU(冬) | GMT + 1 | 22 | GMT + 2 | 23 | 22:54 |
|
| US(冬) | So, 1. Nov 20 | 17:00 | GMT + 5 | 22 |
| EU(冬) | GMT + 1 | 23 | GMT + 2 | 24 |
| 00:02 |
| US(冬) | Fr, 6. Nov 20 | 17:00 | GMT + 5 | 22 |
| EU(冬) | GMT + 1 | 23 | GMT + 2 | 24 | 23:54 |
|
| US(冬) | So, 8. Nov 20 | 17:00 | GMT + 5 | 22 |
| EU(冬) | GMT + 1 | 23 | GMT + 2 | 24 |
| 00:03 |
14.03.21 | US(冬) | Fr, 12. Mrz 21 | 17:00 | GMT + 5 | 22 |
| EU(冬) | GMT + 1 | 23 | GMT + 2 | 24 | 23:54 |
|
| US(夏) | So, 14. Mrz 21 | 17:00 | GMT + 4 | 21 |
| EU(冬) | GMT + 1 | 22 | GMT + 2 | 23 |
| 00:00 |
| US(夏) | Fr, 26. Mrz 21 | 17:00 | GMT + 4 | 21 | 28.03.21 | EU(冬) | GMT + 1 | 22 | GMT + 2 | 23 | 22:54 |
|
| US(夏) | So, 28. Mrz 21 | 17:00 | GMT + 4 | 21 |
| EU(夏) | GMT + 2 | 23 | GMT + 3 | 24 |
| 00:07 |
| US(夏) | Fr, 2. Apr 21 | 17:00 | GMT + 4 | 21 |
| EU(夏) | GMT + 2 | 23 | GMT + 3 | 24 | 23:54 |
|
| US(夏) | So, 4. Apr 21 | 17:00 | GMT + 4 | 21 |
| EU(夏) | GMT + 2 | 23 | GMT + 3 | 24 |
| 00:03 |
EUと米国の時計がそれぞれ現地の夏時間または標準時間を示していない週に、ニューヨークの外国為替市場は日曜日の23:00 EETに始まり、金曜日の23:00EETに閉じます。 ただし、さまざまな証券会社やMQのデモ口座は、常に日曜日の24:00(または月曜日の00:00)に最初の相場を提供します。相場のタイムスタンプは最初の切り替えではなく常に2回目の切り替えに従うと考えることもできますが、金曜日の外国為替市場が終了する前の最後のコースは、24*5=120時間であるため、24:00の直前のタイムスタンプが必要になりますが、1時間が欠落しています。 これにより、時間が欠落しているのはいつかという疑問が生じます。週末の前の金曜日でしょうか、それとも週末の後の日曜日でしょうか。
週の終値は日曜日の最初の取引時間と比較してより重要なものであるため、金曜日の最終価格が23:00直前からであって次の価格は24:00(00:00)であると想定できます。この場合、外国為替市場の最初の1時間(日曜日の23:00-24:00)は欠落していますが、最後の1時間(金曜日の23:00-24:00)は欠落していません。ただし、最初の価格のタイムスタンプが日曜日23:00直後である場合、週末の前にすべてのポジションを決済するという慎重なストラテジーに従う場合に、時間の変化を認識するだけでなく、外国為替市場がいつ再び閉じるか(日曜日に開いた5d*24h=120h後)を知ることも非常に簡単です。簡単に言うと誰でもできます。
まず、どのような仮定を立てることができるかを検討します。ストラテジーテスターには、TimeCurrent()しかありません。これにより、GMTまたはUTCを決定し、他のタイムゾーンのすべての時間を簡単に計算できるようにします。米国の外国為替市場の開閉時間に影響を与える可能性のある休日またはその他の理由を条件として、次のことを前提とします。
- 外国為替市場は金曜日のニューヨーク時間17:00に終了する。
- 外国為替市場は日曜日のニューヨーク時間17:00に開く。
- 外国為替市場は通常120(=5*24)時間開いており、48(=2*24)時間閉じている。
- 金曜日午後5時と日曜日午後5時の間に欠落がある場合最後の相場を受け取った後の金曜日ではなく、最初の相場まで日曜日に相場をが欠落する。
- 受信される相場(タイムスタンプに関係なく)は常に最新である(たとえば、1時間前ではない)。
- 証券会社は時間変更のポリシーを変更しない。これは最後であり、過去の相場では以前のとおりである。
見通し
これで、後で使用する関数、より正確にはマクロ置換を定義し、次の記事「時間の処理パート2:関数」で開発する条件を明確にしました。与えられた任意の時間からGMTを計算する関数です。
添付されているのはDealingwithTimePart1.mqhで、ここで説明したコード部分が含まれています。これは、2番目の記事で説明される関数で拡張されます。
記事のコメントセクションに提案、コメント、ヒントを書いてください。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/9926
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索