#propertycopyright"Erics"#propertylink"erics.fx@tut.by"#defineEUR0#defineUSA1//+------------------------------------------------------------------+//| скрипт, демонстрирующий использование некоторых функций времени |//+------------------------------------------------------------------+voidstart(){inttl = TimeLocal();
MessageBox("Сейчас: " + TimeToStr(tl) + ", летнее время = " + getDST(EUR, tl) +
"\n\n20.03.2008 0:00, летнее время в Европе = " + getDST(EUR, MTtime(DateSerial(2008,3,20))) +
"\n20.03.2008 0:00, летнее время в Америке = " + getDST(USA, MTtime(DateSerial(2008,3,20))) +
"\n\n1.04.2008 0:00, летнее время в Европе = " + getDST(EUR, MTtime(DateSerial(2008,4,1))) +
"\n1.04.2008 0:00, летнее время в Америке = " + getDST(USA, MTtime(DateSerial(2008,4,1))));
}intMTtime(doubleserialTime){// переводит дату/время, заданную в днях от 1900 года (Windows)// в дату, заданную в секундах от 1970 года (Unix)return(86400.*(serialTime - 25569.));
}intDateSerial(intyyyy, intmm, intdd){// возвращает дату в формате Windows (от 1.01.1900 г.)yyyy -= 1900; mm++;
if(mm < 4){mm += 12; yyyy--; }intres = MathFloor(365.25*yyyy) + MathFloor(30.6*mm) + dd - 62;
return(res);
}intgetDST(intcountry, inttime){// Daylight Saving Time - возвращает 1, если на время time действует летнее время и 0 - если поясное (зимнее) времяintDSTstarts, DSTends, y, yr = TimeYear(time);
switch(country){caseEUR:
// летнее время в Европе и России начинается в последнее восресенье марта, в 2 часа ночиy = MathFloor(1.25 * yr + 4.);
DSTstarts = MTtime(DateSerial(yr, 3, 31 - y % 7) + 2./24.);
// летнее время в Европе и России заканчивается в последнее восресенье октября, в 3 часа ночиy = MathFloor(1.25 * yr + 1.);
DSTends = MTtime(DateSerial(yr,10, 31 - y % 7) + 3./24.);
break;
caseUSA:
// летнее время в США и Канаде с 2007 г. начинается во второе восресенье марта, в 3 часа ночиy = MathFloor(1.25 * yr + 1.);
DSTstarts = MTtime(DateSerial(yr, 3, 14 - y % 7) + 3./24.);
// летнее время в США и Канаде с 2007 г. заканчивается в первое восресенье ноября, в 3 часа ночиDSTends = MTtime(DateSerial(yr,11, 7 - y % 7) + 3./24.);
break;
}if(time>=DSTstarts && time<=DSTends)return(1); elsereturn(0);
}
ここでは、時間を扱うための便利な関数を紹介します(任意の日付で夏時間か冬時間かを判断できます)。
追伸:2007年以前のアメリカでは、サマータイムへの切り替えはヨーロッパと同じ時間でした。通話にはEURを使用します。
もし誰かがこれをライブラリに変換してくれるなら、喜んでお手伝いします(アジア、オーストラリア)。
欧米でもサマータイム関数を作りましたが、夏時間はtrue、冬時間はfalseを返します。2007年以降の米国向けサーバータイムで動作するように設計されています。
追伸:2007年以前のアメリカでは、夏時間への切り替えはヨーロッパと同じでした。呼び出されたらEURを使う。
これは半分だけで、エンディングだけは一致した。
10:00 - ヨーロッパでの打ち上げ
kombatさん、あなたは勘違いしています。欧州は09:00 MSK(夏時間)より受付開始
約束通り、取引時間やサマータイムについて、できる限りのことを「消化」してきた。サマータイムのカレンダーとセッション開始・終了時刻の計算をエクセルファイルで作成 しました。
最初のシートは単なる移行カレンダーで、計算式はありません。このカレンダーは、2枚目のシートのセッションを計算するために使用されます。1つはDCサーバーのタイムゾーン、もう1つはあなたのローカルタイム(腕時計に表示されているもの)です。これによって、取引時間のローカルタイムとテーブルを計算し、それによって取引セッションの開始と終了(最小と最大)の時刻を計算します。
うまくいったようですが、私は(習慣的に)すべてがエラーなしで行われたことを信じることができません。なぜ?まあ、例えばオーストラリアとか、海のセッションとかね。向こうは半球で、サマータイムは冬なので、私たちの月がこのようにLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL。そのため、こちらではサマータイムを、あちらではサマータイムを探さなければならないなど、異なる計算式が得られます。一般的に、いくつかの困難があります :(
このため、私は私のサイトに敷設し、フォーラムに投稿されていないファイル - エラーが排除されると、私はファイルを更新し、フォーラムからのリンクは、常に新鮮で正しいバージョンをダウンロードされます(私はこのスレッドでアップデートを投稿します)。こちらからダウンロードできます: http://forextools.com.ua/uploads/files/DST.zip
こんな感じです。
どなたか建設的なご意見をお持ちの方は、手紙を書きましょう。私は(本業に専念しているため)迅速な実装を約束することはできませんが、時間があるときに - すべての賢明かつ有用なことが行われるでしょう;)
ForexTools、グッジョブ!
でも、どういうことなのかがわからない。添加物」の意味をもっと具体的に説明してください(念のため)。
また、TMZサーバーとTMZローカルはどうでしょうか?現地時間とDCの時間の違いは何ですか? それぞれ2番と3番がありますよね?どういう意味ですか?
端末の時刻とローカルコンピュータの時刻が 一致しない場合、便宜上、全く同じ時刻の計算が2つ存在するだけです。
加算は、各取引所のUTC時刻を選択したタイムゾーンの現地時刻に変換するために、UTC時刻に何時間(夏時間または冬時間を考慮)加算するかということです。このフィールドは、エクセルでの計算を容易にするためにのみ必要です。
ルールは非常にシンプルで、(ルールフィールドによって)指定された日付と時間を定義します。計算された日付の反対側のフィールドLetnに入力されます。次に、UTCによると、交換作業時間に、TMZの時間数を追加します(トップテーブルから)、それに補正Letn(それは夏時間であれば - +1)と証券会社のサーバーまたはTMZローカルの+TMZを追加します。その結果、UTC時刻はそれぞれのTMZのローカルタイムに変換される。
FXには、特定の時間の基準があります。これは中央ヨーロッパ時間(CET)です。
GMT(またはUTC)+1(夏期は+2)です。
理論的には、どの証券会社でも毎日のローソク足は中央ヨーロッパ時間の午前0時に始まるはずです。
これはおそらく、ほとんどの証券会社がCETタイムを使用しているのだと思います。
後ほど、GMT、夏時間/冬時間、ヨーロッパとアメリカでの任意の年の翻訳日(アメリカでは2007年から、つまり新しい規則に従って)を定義したスクリプトをお送りします。
サーバーの時計(GMT+1)だけを見た場合、セッションの開始/終了時刻は一定になるのでしょうか?
プラグラムでは、Hour()コマンドによる時間制限を使用しています。つまり、現在のサーバーの 時間をチェックし、inかoutかを判断しています。
2時の位置に遷移がある場合、例えば後ろ向きであれば、アワーキャンドルはダブルボリュームを含まないのですか?
朝2時に遷移があった場合、例えば後ろ向きだと、1時のろうそくは2倍のボリュームを含んでいるのでしょうか?
移行はいつも日曜日で、取引サーバー(とにかくMTサーバー)は「取引していない」ので、一巻も二巻もなく、ただ履歴に穴が開いているだけです。
移行はいつも日曜日で、取引サーバー(とにかくMTの)は「取引していない」ので、そこには一巻も二巻もなく、ただ履歴に穴があいているだけなのです。
>> なるほど、ありがとうございます。
最初の質問は?現地時間を知る必要はない。私の時計は取引サーバーです。セッションの開場時間は、現時点で 一定なのでしょうか?
プログラムには、( Hour()>t1 && Hout()<t2 ) ならば先に進み、そうでなければclose / sleep; という制限がざらにある。修正なし。