Handelssitzungen oder wie wichtig Zeit ist - Seite 9

 

Hier sind einige nützliche Funktionen für den Umgang mit der Zeit (Sie können feststellen, ob für ein beliebiges Datum Sommer- oder Winterzeit gilt).

#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. In Amerika war vor 2007 die Umstellung auf und von der Sommerzeit die gleiche Zeit wie in Europa. Verwenden Sie bei Anrufen EUR.

Wenn jemand dies in eine Bibliothek umwandeln würde, bin ich bereit zu helfen (Asien, Australien).

Dateien:
 

Ich habe auch DST-Funktionen für Europa und die USA erstellt, die für die Sommerzeit true und für die Winterzeit false liefern. Sie sind so konzipiert, dass sie mit der Serverzeit arbeiten, für die USA erst ab 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. In Amerika war die Umstellung auf und von der Sommerzeit vor 2007 dieselbe wie in Europa. Verwenden Sie EUR, wenn Sie aufgerufen werden.

Das stimmt nur zur Hälfte, nur das Ende stimmt überein.

 
kombat писал (а) >>

10:00 - Europäischer Start

kombat, du irrst dich. Europa öffnet um 09:00 MSK (Sommerzeit)

 
Eine Frage an den erfahrenen Markt... Hatten Sie besonders glückliche Monate im Spiel und umgekehrt? Das hängt natürlich von Ihrer Handelstaktik ab, so dass die Frage zu abstrakt ist. Aber auf die eine oder andere Weise?
 

Wie versprochen, habe ich alles, was ich über Handelssitzungen und Sommerzeit herausfinden konnte, "verdaut". Ich habe eine Excel-Datei mit einem Kalender für die Sommerzeit und die Berechnung der Start- und Endzeit der Sitzung erstellt.

Das erste Blatt ist nur ein Übergangskalender, ohne Formeln. Dieser Kalender wird für die Berechnung der Sitzungen auf dem zweiten Blatt verwendet. Auf dem zweiten Blatt können Sie nur drei Parameter einstellen: das aktuelle Datum, für das Sie alles berechnen wollen, und zwei Zeitzonen: eine für die Zeitzone des DC-Servers und die andere für Ihre Ortszeit (die Sie auf Ihrer Armbanduhr haben). Damit berechnen Sie Tabellen mit lokalen Börsenzeiten und damit die Zeiten des Beginns und des Endes (Minimum und Maximum) der Handelssitzungen.

Es scheint zu funktionieren, aber ich (aus Gewohnheit) kann nicht glauben, dass alles ohne Fehler gemacht wurde. Und warum? Nun, zum Beispiel Australien und die Ocean Session. Sie befinden sich auf der anderen Hemisphäre und ihre Sommerzeit ist im Winter, wenn unsere Monate also so sind LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL. Dementsprechend erhalten wir unterschiedliche Formeln für die Berechnungen: hier suchen wir nach der Sommerzeit, während sie nach der Sommerzeit suchen müssen. Im Allgemeinen gibt es einige Schwierigkeiten :(

Aus diesem Grund habe ich die Datei auf meine Seite gelegt und nicht im Forum gepostet - sobald Fehler beseitigt sind, werde ich die Datei aktualisieren und der Link vom Forum wird immer frisch und korrekt heruntergeladen werden (ich werde Updates in diesem Thread posten). Sie können die Datei hier herunterladen: http: //forextools.com.ua/uploads/files/DST.zip

Es sieht so aus:


Wenn jemand konstruktive Vorschläge hat - schreiben Sie einen Brief. Eine schnelle Umsetzung kann ich nicht versprechen (da ich hauptberuflich tätig bin), aber wenn ich Zeit habe, wird alles Sinnvolle und Nützliche umgesetzt ;)

 

ForexTools, gute Arbeit!

Aber ich kann nicht herausfinden, was Sie damit meinen. Erklären Sie genauer, was "additiv" bedeutet (nur um sicherzugehen).

Und was ist mit TMZ Server und TMZ Local? Was ist der Unterschied zwischen der Ortszeit und der Zeit des Gleichstroms? Sie haben jeweils die Nummern 2 und 3 darunter? Was bedeutet das?

 

Es gibt einfach zwei exakt gleiche Zeitberechnungen, nur der Einfachheit halber - wenn die Terminalzeit nicht mit der lokalen Computerzeit übereinstimmt.

Die Addition gibt an, wie viele Stunden (unter Berücksichtigung der Sommer- oder Winterzeit) zur UTC-Zeit addiert werden, um die UTC-Zeit der jeweiligen Börse in die Ortszeit der gewählten Zeitzone umzurechnen. Dieses Feld wird nur benötigt, um die Berechnungen in Excel zu erleichtern.

Die Regeln sind sehr einfach: wir definieren (je nach Regelfeld) und das angegebene Datum der Zeit. Es wird in das Feld Letn gegenüber dem berechneten Datum eingetragen. Dann addieren Sie zur Börsenarbeitszeit nach UTC die Anzahl der TMZ-Stunden (aus der oberen Tabelle) und fügen dazu die Korrektur Letn (wenn es Sommerzeit ist - dann +1) und +TMZ des Maklerservers oder TMZ local. Daher wird die UTC-Zeit in die Ortszeit der jeweiligen TMZ umgerechnet.

 
Erics писал (а) >>

Im Devisenhandel gibt es einen bestimmten Zeitstandard. Dies ist mitteleuropäische Zeit (MEZ).

Dies ist GMT (oder UTC) +1 (+2 im Sommer).

Theoretisch sollten die Tageskerzen in jedem Maklerhaus um Mitternacht MEZ beginnen.

Dies ist wahrscheinlich nicht der Fall, aber die meisten Maklerunternehmen nutzen die MEZ.

Später werde ich Ihnen ein Skript schicken, das GMT, Sommer-/Winterzeit, Umrechnungsdaten in Europa und Amerika in jedem Jahr definiert (in Amerika seit 2007, d.h. nach neuen Regeln).

Zur Klarstellung: Wenn ich nur auf die Serveruhr (GMT+1) schaue, bleibt dann die Start-/Endzeit der Sitzungen konstant?

Im Programm verwende ich die Stundenbeschränkungen mit dem Befehl Hour(), d. h. ich prüfe die aktuelle Serverstunde und die Ein- oder Ausgänge.


Wenn es einen Übergang bei zwei Uhr gibt, zum Beispiel nach hinten, dann enthält die Stundenkerze kein doppeltes Volumen?

 
Parabellum писал (а) >>

Enthält die Ein-Uhr-Kerze ein doppeltes Volumen, wenn es einen Übergang um zwei Uhr morgens gibt, z. B. nach hinten?

Der Übergang ist immer am Sonntag, wenn die Handelsserver (MT-Server sowieso) "nicht handeln" und es daher keine einzelnen oder doppelten Volumina gibt - es gibt nur ein Loch in der Geschichte.

 
ForexTools писал (а) >>

Der Übergang findet immer am Sonntag statt, wenn die Handelsserver (jedenfalls die von MT) "handelsfrei" sind, so dass es dort keine einfachen oder doppelten Volumina gibt - es gibt nur ein Loch in der Geschichte.

>> Ich verstehe, danke.

Und die erste Frage? Ich muss die Ortszeit nicht kennen. Meine Uhr ist der Handelsserver. Sind die Öffnungszeiten der Sitzungen zu dieser Zeit konstant?

Das Programm hat eine Einschränkung: wenn ( Hour()>t1 && Hout()<t2 ), dann mach weiter, sonst close / sleep; ungefähr. Ohne jegliche Korrekturen.

Grund der Beschwerde: