交易时段或时间有多重要 - 页 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);
}

P.S. 2007年之前的美国,切换到夏令时的时间和欧洲是一样的。打电话时使用欧元。

如果有人愿意将此转换为图书馆,愿意帮助(亚洲,澳大利亚)。

附加的文件:
 

我也为欧洲和美国做了DST函数,它们在夏季时返回真,在冬季时返回假。它们被设计为与服务器时间一起工作,仅适用于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 писал (а)>>

P.S. 在2007年之前的美国,夏令时的转换和欧洲是一样的。呼叫时使用欧元。

这只有一半是真的,只有结局符合。

 
kombat писал (а)>>

10:00 - 欧洲启动

康博,你错了。欧洲在09:00 MSK(夏季时间)开放。

 
给经验丰富的市场的一个问题...你在游戏中是否有特别幸运的月份,反之亦然?当然这取决于你的交易策略,所以这个问题太抽象了。但是,一种方式或另一种方式?
 

正如承诺的那样,我 "消化 "了所有关于交易时段和夏令时的内容。我做了一个EXCEL文件,里面有夏令时的日历和会议开始和结束时间的计算

第一张表只是一个过渡日历,没有公式。这个日历用于计算第二张纸上的会议。在第二张表上,你可以只设置三个参数:你想计算一切的当前日期,以及两个时区:一个是DC服务器的时区,另一个是你的本地时间(你手表上的时间)。通过这些你可以计算出当地的交易时间的表格,并通过它们--交易时段的开始和结束(最小和最大)的时间。

它似乎起作用了,但我(出于习惯)不能相信一切都没有错误地完成。为什么?嗯,比如说澳大利亚和海洋会议。他们在另一个半球,他们的夏令时是在冬天,所以如果我们的月份是这样的LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL。相应地,我们得到了不同的计算公式:这里我们要寻找夏令时,而他们要寻找夏令时。一般来说,有一些困难:(

由于这个原因,我把文件放在我的网站上,而不是贴在论坛上--随着错误的消除,我将更新文件,从论坛上的链接将总是下载新鲜和正确的版本(我将在这个主题中发布更新)。你可以在这里下载该文件 http://forextools.com.ua/uploads/files/DST.zip

它看起来像这样。


如果任何人有任何建设性的建议--写封信。我不能保证快速实施(由于主要工作是全职的),但当我有时间时--所有合理和有用的事情都会完成;)

 

ForexTools,好样的!

但我搞不清楚你说的是什么意思。更具体地解释一下 "添加剂 "的含义(只是为了确定)。

那么TMZ服务器和TMZ本地的情况呢?当地时间和直流电的时间有什么区别? 你在每个数字下都有2和3?它是什么意思?

 

只是有两个完全相同的时间计算,只是为了方便--如果终端时间与本地计算机时间 不一致。

加法是指在UTC时间上增加多少个小时(考虑到夏季或冬季时间),以便将各交易所的UTC时间转换为选定时区的当地时间。这个字段只是为了方便在Excel中进行计算。

这些规则非常简单:我们定义(取决于规则字段)和指定的时间日期。它被输入到计算日期对面的Letn字段中。然后根据UTC的交易所工作时间,加上TMZ的小时数(来自顶表),再加上校正Letn(如果是夏时制--那么+1)和+TMZ的经纪公司服务器或TMZ本地。因此,UTC时间被转换为各TMZ的当地时间。

 
Erics писал (а)>>

在外汇中,有一个特定的时间标准。这是欧洲中部时间,即CET。

这是GMT(或UTC)+1(夏季为+2)。

从理论上讲,任何一家券商的每日蜡烛都应该在欧洲中部时间的午夜开始。

这可能不是事实,但大多数经纪公司都使用CET时间。

稍后我将向你发送一个脚本,它可以定义GMT、夏/冬令时、欧洲和美国任何一年的翻译日期(在美国从2007年开始,即根据新的规则)。

澄清一下:如果我只看服务器时钟(GMT+1),会话的开始/结束时间会不会是恒定的?

在程序中,我使用Hour()命令的小时限制,即检查当前的服务器小时,并进入或退出。


如果在两点钟方向有一个过渡,比如说向后,那么小时的蜡烛就不包含双倍体积?

 
Parabellum писал (а)>>

如果在凌晨两点有一个过渡,比如说,向后,一点钟的蜡烛是否包含双倍体积?

过渡期总是在周日,此时交易服务器(无论如何是MT服务器)"不交易",因此没有单量或双量--历史上只有一个洞。

 
ForexTools писал (а)>>

过渡期总是在周日,此时交易服务器(无论如何是MT的)"不交易",因此那里没有单量或双量--只有历史上的一个洞。

>> 我明白了,谢谢你。

第一个问题呢?我不需要知道当地时间。我的时钟是交易服务器。此时 的会议开放时间是否不变?

该程序有一个限制:如果( Hour()>t1 && Hout()<t2 ),则继续进行,否则关闭/睡眠;大致如此。没有任何修正。