İşlem seansları veya zamanın ne kadar önemli olduğu - sayfa 9

 

İşte zamanla çalışmak için bazı faydalı fonksiyonlar (herhangi bir tarihte yaz veya kış saatinin geçerli olup olmadığını belirleyebilirsiniz).

 #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 ) ;
}

PS Amerika'da, 2007'ye kadar, DST'ye geçiş ve geri dönüş zaman içinde Avrupa ile çakıştı. Arama yaparken EUR kullanın.

Birisi onu bir kütüphaneye dönüştürecekse, yardım etmeye hazırım (asya, avustralya).

Dosyalar:
 

Ayrıca Avrupa ve ABD için DST işlevlerini de yaptım, yaz saati için true, kış saati için false döndürüyorlar. Yalnızca 2007'den başlayarak ABD için sunucu zamanı ile çalışmak üzere tasarlanmıştır.

 //+------------------------------------------------------------------+
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 писал (а) >>

PS Amerika'da, 2007'ye kadar, DST'ye geçiş ve geri dönüş zaman içinde Avrupa ile çakıştı. Arama yaparken EUR kullanın.

Bu sadece yarı doğru, sadece son aynıydı.

 
kombat писал (а) >>

10:00 - Avrupa'da Başlarken

yoldaş, yanılıyorsun. Avrupa saat 09:00'da açılıyor MSK (yaz)

 
Piyasada olanlar için bir soru.. Oyunda özellikle şanslı aylarınız var mı? Tabii ki, ticaret taktiklerinize bağlı çünkü soru çok soyut. Ama yine de?
 

Söz verdiğim gibi, ticaret seansları ve yaz-kış saatine geçişler hakkında bulabildiğim her şeyi "sindirdim". Yaz / kış saatine geçişlerin takvimi ve seansların değişim saatlerine göre başlangıç ve bitiş zamanlarının hesaplanması ile bir excel dosyası yapılmıştır.

İlk sayfa sadece bir geçiş takvimi, formül yok. Bu takvim, ikinci sayfadaki oturumları hesaplamak için kullanılır. İkinci sayfada, yalnızca üç parametre ayarlayabilirsiniz: her şeyin hesaplanması gereken geçerli tarih ve iki saat dilimi: biri DC sunucusunun saat dilimi için, ikincisi yerel saatiniz için (sahip olduğunuz). kol saatinizde). Onlara dayanarak, borsaların yerel saatlerine sahip tablolar ve üzerlerinde - alım satım seanslarının başlangıç ve bitiş zamanları (minimum ve maksimum) hesaplanır.

Görünüşe göre her şey yolunda gitti, ama bir şekilde (alışkanlıktan) her şeyi hatasız yapmayı başardığıma inanamıyorum. Niye ya? Örneğin, Avustralya ve Okyanusya oturumu. Başka bir yarım küredeler ve kışın yaz saati uygulaması var ve aylarımız bu ZZZLLLZZZ gibi geçerse, o zaman okyanusya LLLZZZLLL'de. Buna göre, hesaplamalar için farklı formüller elde edilir: yazın bir isabet arıyoruz ve kışın bir isabet aramaları gerekiyor. Sonuçta, hatalar var :(

Bu nedenle dosyayı siteme yükledim ve foruma göndermedim - hatalar giderildiği için dosyayı güncelleyeceğim ve forumdan gelen link her zaman yeni ve doğru bir sürüm indirecek (bildireceğim) Bu konudaki güncellemeler). Dosya buradan indirilebilir: http://forextools.com.ua/uploads/files/DST.zip

Her şey şuna benziyor:


Yapıcı önerileri olan varsa - mektup yazın. Hızlı bir uygulama sözü vermiyorum (asıl işimdeki tam istihdam nedeniyle) ama zamanım olduğunda sağlıklı ve faydalı olan her şey mutlaka yapılacaktır ;)

 

ForexTools , iyi iş!

Tanımlarınızı bir türlü anlayamıyorum. Neyin "katkı maddesi" olduğunu (varsayımları ortadan kaldırmak için) daha ayrıntılı olarak açıklayın.

Peki ya TMZ sunucusu ve TMZ yerel anlamı nedir??? Yerel saat ile DC saati arasındaki Vsmysle farkı? her birinin altında sırasıyla 2 ve 3 sayılarınız var mı? Ne anlama geliyor?

 

Sadece kolaylık sağlamak için tamamen aynı iki zaman hesaplaması vardır - terminal saati bilgisayarın yerel saatiyle eşleşmiyorsa .

Ekleme - bu, ilgili değişimin UTC saatini seçilen saat diliminin yerel saatine dönüştürmek için UTC'deki saate (yaz veya kış saati dahil) kaç saat ekleneceğidir. Bu alan yalnızca Excel'de hesaplamaları kolaylaştırmak için gereklidir.

Ve hesaplama kuralları basittir: (Kural alanına bağlı olarak) ve verilen tarihi saatin kaç olduğunu belirleriz. Letn alanına hesaplanan tarihin karşısında yazılır. Ardından, takasın UTC'deki çalışma saatine TMZ saatlerinin sayısı (üst plakadan) eklenir ve buna Yaz saati değişikliği de eklenir (eğer yaz saati +1 ise) ve DC'nin +TMZ'si sunucu veya TMZ yerel. Sonuç, UTC saatinin ilgili TMZ'nin yerel saatine dönüştürülmesidir.

 
Erics писал (а) >>

Forex'in belirli bir zaman standardı vardır. Bu Orta Avrupa Saati, CET.

Bu GMT (veya UTC) +1'dir (yaz aylarında +2).

Teoride, günlük mumlar herhangi bir DC'de gece yarısı CET'de başlamalıdır.

Görünüşe göre durum böyle değil, ancak çoğu DC hala CET zamanını kullanıyor.

Biraz sonra Avrupa ve Amerika'da herhangi bir yılda GMT, yaz / kış, transfer tarihlerini belirleyen bir script yayınlayacağım (Amerika'da 2007'den beri, yani yeni kurallara göre).

Lütfen açıklığa kavuşturun: Yalnızca sunucu saatine (GMT+1) bakarsam, oturumların başlangıç/bitiş saatleri sabit mi olacak?

Programda Hour() komutu ile çalışma saatleri kısıtlamalarını kullanıyorum yani sunucunun o anki saatini kontrol edip giriyorum yada girmiyorum.


Sabah saat ikide bir geçiş varsa, diyelim ki geri, o zaman sabah birinin mumu çift hacim içermiyor mu?

 
Parabellum писал (а) >>

Sabah saat ikide bir geçiş varsa, diyelim ki, o zaman sabah birinin mumu çift hacim içermiyor mu?

Geçiş her zaman ticaret sunucularının (zaten MT sunucuları) "ticaret yapmadığı" ve bu nedenle tek veya çift hacim olmadığı Pazar günleri yapılır - bu sadece tarihte bir boşluktur.

 
ForexTools писал (а) >>

Geçiş her zaman ticaret sunucularının (zaten MT sunucuları) "ticaret yapmadığı" ve bu nedenle tek veya çift hacim olmadığı Pazar günleri yapılır - bu sadece tarihte bir boşluktur.

Anladım, teşekkürler.

Ve ilk soru? Yerel saati bilmeme gerek yok. Saatim bir ticaret sunucusu. Seansların açılış saatleri bu saatte sabit mi?

Programda bir kısıtlama var: if ( Hour()>t1 && Hout()<t2 ) , o zaman devam et, yoksa kapat / uyu; aşağı yukarı böyle. Herhangi bir değişiklik olmadan.