거래 세션 또는 시간이 얼마나 중요한지 - 페이지 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\n 20.03.2008 0:00, летнее время в Европе  = " + getDST ( EUR , MTtime ( DateSerial ( 2008 , 3 , 20 ))) +
             " \n 20.03.2008 0:00, летнее время в Америке = " + getDST ( USA , MTtime ( DateSerial ( 2008 , 3 , 20 ))) +
             " \n\n 1.04.2008 0:00, летнее время в Европе  = " + getDST ( EUR , MTtime ( DateSerial ( 2008 , 4 , 1 ))) +
             " \n 1.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년까지 미국에서는 DST로의 전환이 유럽과 시간적으로 일치했습니다. 통화 시 EUR를 사용하십시오.

누군가가 그것을 도서관으로 리메이크한다면 나는 도울 준비가 되어 있습니다(아시아, 호주).

파일:
 

나는 또한 유럽과 미국에 대한 DST 기능을 수행했는데 여름에는 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년까지 미국에서는 DST로의 전환이 유럽과 시간적으로 일치했습니다. 통화 시 EUR를 사용하십시오.

이것은 절반만 사실이고 결말만 같았습니다.

 
kombat писал (а) >>

10:00 - 유럽에서 시작하기

동지, 당신은 틀렸습니다. 유럽은 09:00 MSK에서 열립니다(하계)

 
시장에 있었던 사람들을 위한 질문.. 게임에서 특히 운이 좋았던 달이 있습니까? 아니면 그 반대인가요? 물론 질문이 너무 추상적이기 때문에 거래 전략에 따라 다릅니다. 하지만 어쨌든?
 

글쎄, 약속한 대로 나는 거래 세션과 여름-겨울 시간으로의 전환에 대해 내가 할 수 있는 모든 것을 "소화"했습니다. 하절기/동절기 전환 달력과 교환 시간에 따른 세션 시작 및 종료 시간을 계산하여 엑셀 파일로 만들었습니다.

첫 번째 시트는 공식이 아닌 전환의 달력일 뿐입니다. 이 달력은 두 번째 시트의 세션을 계산하는 데 사용됩니다. 두 번째 시트에서는 세 가지 매개변수만 설정할 수 있습니다. 모든 것이 계산되어야 하는 현재 날짜와 두 개의 표준 시간대: 하나는 DC 서버의 표준 시간대이고 다른 하나는 현지 시간(귀하가 가지고 있는 손목시계에서). 이를 기반으로 거래소의 현지 시간이 포함된 테이블이 계산되고 이에 따라 거래 세션의 시작 및 종료 시간(최소 및 최대)이 계산됩니다.

모든 것이 잘 된 것 같지만 어떻게 든 나는 (습관적으로) 오류없이 모든 것을 할 수 있었다는 것을 믿을 수 없습니다. 왜요? 예를 들어 호주와 오세아니아 세션이 있습니다. 그들은 다른 반구에 있고 겨울에는 일광 절약 시간제를 사용합니다. 우리 달이 ZZZLLLZZZ와 같으면 오세아니아 LLLZZZLLL에 있습니다. 따라서 다른 계산 공식이 얻어집니다. 우리는 여름에 히트를 찾고 있고 겨울에는 히트를 찾아야 합니다. 버그가 있습니다 :(

이러한 이유로 파일을 내 사이트에 업로드하고 포럼에 게시하지 않았습니다. 오류가 제거되면 파일을 업데이트하고 포럼의 링크는 항상 최신 버전의 올바른 버전을 다운로드합니다(보고하겠습니다. 이 스레드의 업데이트). 파일은 여기에서 다운로드할 수 있습니다: http://forextools.com.ua/uploads/files/DST.zip

모든 것이 다음과 같습니다.


건설적인 제안이 있는 사람이 있으면 편지를 쓰십시오. 빠른 구현을 약속하지는 않지만(본업이 정규직이기 때문에) 시간이 되면 건강하고 유용한 모든 것이 확실히 완료될 것입니다.)

 

ForexTools , 잘했습니다!

나는 당신의 정의를 이해하지 못하는 것 같습니다. (가정을 없애기 위해) "가산"이 무엇인지 더 자세히 설명하십시오.

그리고 TMZ 서버와 TMZ 로컬은 무엇을 의미합니까??? 현지 시간과 DC 시간의 Vsmysle 차이는 무엇입니까? 거기에 각각 숫자 2와 3이 더 있습니까? 이것은 무엇을 의미 하는가?

 

터미널 시간이 컴퓨터의 현지 시간 과 일치하지 않는 경우 편의를 위해 두 가지 절대적으로 동일한 시간 계산이 있습니다.

더하기 - 해당 거래소의 UTC 시간을 선택한 시간대의 현지 시간으로 변환하기 위해 UTC 시간에 몇 시간(여름 또는 겨울 시간 포함)을 추가할지입니다. 이 필드는 Excel에서 계산을 용이하게 하는 데만 필요합니다.

그리고 계산 규칙은 간단합니다. 우리는 (규칙 필드에 따라) 주어진 날짜와 시간을 결정합니다. 계산된 날짜의 반대쪽 Letn 필드에 입력됩니다. 그런 다음 UTC로 거래소가 운영되는 시간에 TMZ 시간(상판부터)이 추가되고 서머 타임 수정도 여기에 추가됩니다(썸머 시간이 +1인 경우) 및 DC의 +TMZ 서버 또는 TMZ 로컬. 결과는 UTC 시간을 해당 TMZ의 현지 시간으로 변환한 것입니다.

 
Erics писал (а) >> 를 썼습니다.

Forex에는 특정 시간 표준이 있습니다. 중부 유럽 표준시(CET)입니다.

GMT(또는 UTC) +1(여름에는 +2)입니다.

이론적으로 일일 양초는 모든 DC에서 CET 자정에 시작해야 합니다.

이것은 분명히 사실이 아니지만 대부분의 DC는 여전히 CET 시간을 사용합니다.

조금 후에 저는 GMT, 여름/겨울, 유럽과 미국의 이적 날짜를 결정하는 스크립트를 게시할 것입니다(미국에서는 2007년 이후, 즉 새 규칙에 따라).

명확히 하십시오: 서버 시계(GMT+1)만 보면 세션의 시작/종료 시간이 일정합니까?

프로그램에서 Hour() 명령어로 운영시간 제한을 사용하는데, 즉 서버의 현재시간을 확인하고 들어가거나 안들어갑니다.


아침 2시에 전환이 있는 경우, 예를 들어 뒤로, 아침에 1개의 양초에 이중 볼륨이 포함되지 않습니까?

 
Parabellum писал (а) >> 를 썼습니다.

아침 2시에 전환이 있는 경우, 예를 들어 뒤로, 아침에 1개의 양초에 이중 볼륨이 포함되지 않습니까?

거래 서버(어쨌든 MT 서버)가 "거래하지 않는" 일요일에 전환이 항상 이루어지므로 단일 또는 이중 볼륨이 없습니다. 이는 단지 역사의 구멍일 뿐입니다.

 
ForexTools писал (а) >>

거래 서버(MT-shny 어쨌든)가 "거래하지 않는" 일요일에 전환이 항상 이루어지므로 단일 또는 이중 볼륨이 없습니다. 이는 역사의 구멍일 뿐입니다.

이해합니다. 감사합니다.

그리고 첫 번째 질문은? 현지 시간을 알 필요가 없습니다. 내 시계는 거래 서버입니다. 시간에 따라 세션의 개방 시간은 일정합니까?

프로그램에 제한이 있습니다. if ( Hour()>t1 && Hout()<t2 ) , 계속 진행하고, 그렇지 않으면 닫기/잠자기; 다소 이렇습니다. 수정 없이.

사유: