トレーディングセッション、あるいは時間がいかに重要であるか - ページ 9

 

ここでは、時間を扱うための便利な関数を紹介します(任意の日付で夏時間か冬時間かを判断できます)。

#property copyright "Erics"
#property link      "erics.fx@tut.by"

#define EUR 0
#define USA 1

//+------------------------------------------------------------------+
//| скрипт, демонстрирующий использование некоторых функций времени  |
//+------------------------------------------------------------------+

void start()
{
  int tl = 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))));
}

int MTtime(double serialTime)
{ // переводит дату/время, заданную в днях от 1900 года (Windows)
  // в дату, заданную в секундах от 1970 года (Unix)
  return(86400.*(serialTime - 25569.));
}

int DateSerial(int yyyy, int mm, int dd)
{ // возвращает дату в формате Windows (от 1.01.1900 г.)
  yyyy -= 1900; mm++;
  if (mm < 4) { mm += 12; yyyy--; }
  int res = MathFloor(365.25*yyyy) + MathFloor(30.6*mm) + dd - 62;
  return(res);
}

int getDST(int country, int time)
{ // Daylight Saving Time - возвращает 1, если на время time действует летнее время и 0 - если поясное (зимнее) время
  int DSTstarts, DSTends, y, yr = TimeYear(time);

  switch(country)
  {
    case EUR:
      // летнее время в Европе и России начинается в последнее восресенье марта, в 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;

    case USA:
      // летнее время в США и Канаде с 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); else return(0);
}

追伸:2007年以前のアメリカでは、サマータイムへの切り替えはヨーロッパと同じ時間でした。通話にはEURを使用します。

もし誰かがこれをライブラリに変換してくれるなら、喜んでお手伝いします(アジア、オーストラリア)。

ファイル:
 

欧米でもサマータイム関数を作りましたが、夏時間はtrue、冬時間はfalseを返します。2007年以降の米国向けサーバータイムで動作するように設計されています。

//+------------------------------------------------------------------+
bool DST_EU(int CurrentTime) {
  int CurMonth = TimeMonth(CurrentTime);
  int CurDayOfWeek; 
  int CurDay; 
  if (CurMonth > 3  &&  CurMonth < 10) return(true);
  else { 
    if (CurMonth < 3  ||  CurMonth > 10) return(false);
    else {
      CurDayOfWeek = TimeDayOfWeek(CurrentTime); 
      CurDay = TimeDay(CurrentTime); 
      switch (CurMonth) {
        case  3: if (CurDay-CurDayOfWeek > 24) return(true);
                 else return(false);
                 break;
        case 10: if (CurDay-CurDayOfWeek < 25) return(true);
                 else return(false);
                 break;
      }
    }
  }
}
//+------------------------------------------------------------------+
bool DST_US(int CurrentTime) {
  int CurMonth = TimeMonth(CurrentTime);
  int CurDayOfWeek; 
  int CurDay; 
  if (CurMonth > 3  &&  CurMonth < 11) return(true);
  else { 
    if (CurMonth < 3  ||  CurMonth > 11) return(false);
    else {
      CurDayOfWeek = TimeDayOfWeek(CurrentTime); 
      CurDay = TimeDay(CurrentTime); 
      switch (CurMonth) {
        case  3: if (CurDay-CurDayOfWeek > 7) return(true);
                 else return(false); 
                 break;
        case 11: if (CurDay-CurDayOfWeek < 1) return(true);
                 else return(false); 
                 break;
      }
    }
  }
}


Erics писал (а)>>

追伸:2007年以前のアメリカでは、夏時間への切り替えはヨーロッパと同じでした。呼び出されたらEURを使う。

これは半分だけで、エンディングだけは一致した。

 
kombat писал (а)>>

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のローカルタイムに変換される。

 
Erics писал (а)>>

FXには、特定の時間の基準があります。これは中央ヨーロッパ時間(CET)です。

GMT(またはUTC)+1(夏期は+2)です。

理論的には、どの証券会社でも毎日のローソク足は中央ヨーロッパ時間の午前0時に始まるはずです。

これはおそらく、ほとんどの証券会社がCETタイムを使用しているのだと思います。

後ほど、GMT、夏時間/冬時間、ヨーロッパとアメリカでの任意の年の翻訳日(アメリカでは2007年から、つまり新しい規則に従って)を定義したスクリプトをお送りします。

サーバーの時計(GMT+1)だけを見た場合、セッションの開始/終了時刻は一定になるのでしょうか?

プラグラムでは、Hour()コマンドによる時間制限を使用しています。つまり、現在のサーバーの 時間をチェックし、inかoutかを判断しています。


2時の位置に遷移がある場合、例えば後ろ向きであれば、アワーキャンドルはダブルボリュームを含まないのですか?

 
Parabellum писал (а)>>

朝2時に遷移があった場合、例えば後ろ向きだと、1時のろうそくは2倍のボリュームを含んでいるのでしょうか?

移行はいつも日曜日で、取引サーバー(とにかくMTサーバー)は「取引していない」ので、一巻も二巻もなく、ただ履歴に穴が開いているだけです。

 
ForexTools писал (а)>>

移行はいつも日曜日で、取引サーバー(とにかくMTの)は「取引していない」ので、そこには一巻も二巻もなく、ただ履歴に穴があいているだけなのです。

>> なるほど、ありがとうございます。

最初の質問は?現地時間を知る必要はない。私の時計は取引サーバーです。セッションの開場時間は、現時点で 一定なのでしょうか?

プログラムには、( Hour()>t1 && Hout()<t2 ) ならば先に進み、そうでなければclose / sleep; という制限がざらにある。修正なし。