Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 767

 
tuner:

Ich habe die Antwort nicht sofort bemerkt. Nun, um ehrlich zu sein, habe ich nicht ganz verstanden, was Sie damit meinen, dass es keine Verwirrung gibt.

Was meinen Sie mit "unabhängig von der Zeitzählt StringToTime() die verstrichenen Sekunden"?

Die Funktion nimmt im Wesentlichen ein linksdrehendes Datum(ich glaube, das lokale PC-Datum ist linksdrehend) und vergleicht die aktuelle Zeit des Servers des Brokers damit, warum sollte es keine Rolle spielen?

Aus dem obigen Screenshot geht hervor, dass die Zeit auf Ihrem lokalen PC der Zeit des Brokers um 1 Stunde voraus ist, d. h. die GMT-Verschiebung ist größer. Wenn es X Stunden weniger wären, wäre es kritisch, wie in dem Fall, über den ich am Freitag geschrieben habe.

Was das Ende der Handelszeit betrifft. Ich schätze, für die FunktionStringToTime() sollte eskeine Rolle spielen, wann der Broker den Handelstag oder die Woche beendet...

Ich habe keine andere Erklärung.

Wenn es in Moskau jetzt 11:40 Uhr ist, dann sind vom 01.01.1970 bis zur aktuellen Zeit XXX Sekunden vergangen.

Wenn es in London zum Beispiel 11:40 Uhr ist, ist die Anzahl der Sekunden die gleiche wie in Moskau... Das liegt nur daran, dass der 01.01.1970 in London viel später war als die heutige Zeit. Es handelt sich nicht um die eingegebene Zeit, sondern nur um die Anzahl der Sekunden.

Versuchen Sie, selbst eine Formel zu schreiben, um die Anzahl der Sekunden seit dem 01.01.1970 00:00:00 zu berechnen.

Für einen kurzen Zeitraum können Sie diese Formel verwenden. Vom Beginn des aktuellen Monats an vergehen 6*24*60*60 + 11*60*60 + 59*60 + aktueller Sekundenwert auf der Uhr, auf die Sie schauen.

 

Natürlich basiert der Vergleich auf der Anzahl der Sekunden, die seit dem Jahr 70 verstrichen sind, aber diese Anzahl von Sekunden berücksichtigt alles - Datum und Zeit.

Ich möchte Ihnen nur ein Beispiel geben, das im Wesentlichen eine Vereinfachung eines Problems ist, das mir kürzlich begegnet ist.

Aufgabe: Berechnung der Uhrzeit (Datum) des Handelsschlusses am Freitag unter Berücksichtigung der String-Variablen "21:30".

Ursprünglich hatte ich eine solche Lösung:

datetime EndTrading;

if(TimeDayOfWeek(TimeCurrent())==5)     // если сейчас пятница, например возьмем сегодняшний день, первый тик 2014.11.07 00:00
  EndTrading=StringToTime("21:30");     // подразумевается что тут должно быть время пятницы...

if(TimeDayOfWeek(TimeCurrent())==5)     // если настала пятница
  if(TimeCurrent()>EndTrading)          // и время удовлетворяет условию
    Print("Настала пятница и текущее время больше чем 21:30");

Und nun der Clou: Der im Code angegebene Ausdruck erscheint am Freitag, aber nicht nach 21:30 Uhr, sondern um 00:00 Uhr beim ersten Tick.

Denn als auf dem Server meines Brokers Freitag war, war auf meinem lokalen PC noch Donnerstag, die Zeitverschiebung ist anders.

Im Tester ist alles in Ordnung, und der Druck wird wie vorgesehen am Freitag nach 21:30 Uhr freigegeben. Ist das nicht verwirrend?

 
tuner:

Natürlich basiert der Vergleich auf der Anzahl der Sekunden, die seit dem Jahr 70 verstrichen sind, aber diese Anzahl von Sekunden berücksichtigt alles - Datum und Zeit.

Ich möchte Ihnen ein Beispiel geben, das im Grunde eine Vereinfachung eines Problems darstellt, das ich kürzlich hatte.

Aufgabe: Berechnung der Uhrzeit (Datum) des Handelsendes am Freitag unter Berücksichtigung der String-Variablen "21:30".

Ursprünglich hatte ich eine solche Lösung:

Und nun der Clou: Der im Code angegebene Ausdruck erscheint am Freitag, aber nicht nach 21:30 Uhr, sondern um 00:00 Uhr beim ersten Tick.

Denn als auf dem Server meines Brokers Freitag war, war auf meinem lokalen PC noch Donnerstag, die Zeitverschiebung ist anders.

Im Tester ist alles in Ordnung, und der Druck wird wie vorgesehen am Freitag nach 21:30 Uhr freigegeben. Ist das nicht verwirrend?

Natürlich ist das verwirrend. Das ist nur ein Durcheinander in deinem Kopf. TimeToString("21:30") gibt das aktuelle Datum von 21:30:00 bis 21:29:59 des nächsten Tages an. Ich werde die Kommentare in Ihrem Code korrigieren.

datetime EndTrading;

if(TimeDayOfWeek(TimeCurrent())==5)     // если сейчас пятница, от текущего времени. Наступит когда по времени сервера будет 00:00
  EndTrading=StringToTime("21:30");     // А тут в 00:00 устанавливается четверг 21:30 потому, что это время пятницы ещё далеко.

if(TimeDayOfWeek(TimeCurrent())==5)     // если настала пятница
  if(TimeCurrent()>EndTrading)          // А тут условие если(текущее время больше чем четверг 21:30)
   {
    Print("EndTrading = ", TimeToString(EndTrading)); // Посмотри что будет напечатано.
   }


Und dieser Code wird korrekt funktionieren

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
Print("Настала пятница и текущее время больше чем 21:30");
 
ikatsko:
Es gibt zwei MT4-Terminals auf demselben Laptop: eines mit 4 Dezimalstellen und eines mit 5 Dezimalstellen. In der gleichen Zeit beträgt der Verkehr auf dem ersten 105/0 kb, auf dem zweiten 3450/0 kb. Die erste ist um 6 % CPU-intensiv, die zweite um 39 %. Was ist das Problem? Ist das überhaupt eine Norm?
Ja.
 

AlexeyVik

Ich habe das Datum auf meinem Computer auf 2000 geändert.

dieses Skript ausgeführt:

input string time="21:30";

Comment("TimeCurrent() = ",TimeCurrent(),"\n",
"TimeLocal() = ",TimeLocal(),"\n",
"StringToTime(",time,") = ",StringToTime(time));

und erhielt dies:

daher übernimmt StringToTime() das Datum vom lokalen Computer

 
tuner:

AlexeyVik

Ich habe das Datum auf meinem Computer auf 2000 geändert.

dieses Skript ausgeführt:

und erhielt dies:

StringToTime() übernimmt also das Datum vom lokalen Computer

Na und? Lassen Sie es vom Mond nehmen, solange Sie "von und bis" Zeit XXX Sekunden vergangen und diese ganze Zahl vergleichen wir mit Anzahl der Sekunden von 01.01.1970 der benötigten Zeit vergangen.

Sie sollten diese Zeile überprüfen

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))

wo Sie das Problem hatten. Heute ist Freitag.

 
AlexeyVik:

Überprüfen Sie besser diese Zeile

wo Sie das Problem hatten. Heute ist Freitag.

Ich habe überprüft, ob der lokale Computer ein niedrigeres Datum als das des Brokers hat, dann sind die Drucker da,

aber wenn der lokale Computer ein höheres Datum hat als der des Brokers, gibt es keine Drucker.

d.h. die Zeit ist vergangen, z.B. "11:30".

im ersten Fall wird TimeCurrent() mit 2014.11.06 11:30 verglichen , im zweiten Fallmit 2014.11.0811:30

PS korrigiert die hervorgehobene

if(TimeDayOfWeek(TimeCurrent())==5)      // если сейчас пятница, от текущего времени. Наступит когда по времени сервера будет 00:00
   EndTrading=StringToTime("21:30");     // А тут в 00:00 устанавливается четверг 21:30 потому, что это время пятницы ещё далеко.

Die erste Zeile ist klar, der Kommentar in der zweiten Zeile nicht.

Warum ist der Freitag noch weit weg, wenn er doch schon da ist? Die zweite Zeile wird nämlich nur ausgeführt, wenn es Freitag ist.

 
tuner:

Ich habe geprüft, ob der lokale Computer ein niedrigeres Datum als das des Brokers hat, dann sind die Drucker da,

und wenn das Datum auf dem lokalen Computer höher ist als das Datum des Brokers, dann gibt es keine Drucker.

d. h. die Zeit ist vergangen, z. B. "11:30".

im ersten Fall wird TimeCurrent() mit 2014.11.06 11:30 verglichen , im zweiten Fallmit 2014.11.0811:30

PS korrigiert die hervorgehobene


Nun, hier ist die Ortszeit um 1 Stunde länger als die Serverzeit.

Dieses Skript

   datetime time_begin;
    time_begin = StringToTime("21:30");
    Comment("Текущее локальное время ", TimeLocal(), " ", TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS), "\n"
          , "Текущее время сервера    ", TimeCurrent(), " ", TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS), "\n"
          , "Сегодня 21:30 по TimeLocal будет через    ", time_begin-TimeLocal(), " секунд или ", 
           TimeToString(time_begin-TimeLocal(), TIME_MINUTES|TIME_SECONDS), "\n"
          , "Сегодня 21:30 по TimeCurrent будет через ", time_begin-TimeCurrent(), " секунд или ", 
           TimeToString(time_begin-TimeCurrent(), TIME_MINUTES|TIME_SECONDS), "\n"
          );


Gibt die folgenden Werte aus.

Zunächst die Anzahl der Sekunden, die vom 01.01.1970 bis zum angegebenen Zeitpunkt vergangen sind, und dann die Uhrzeit in der gewohnten Form.


Erklären Sie auf dieser Grundlage, was Sie an diesen Werten verwirrt?


Ja, in meinem zweiten Kommentar habe ich an etwas anderes gedacht.

 
TheXpe
TheXpert:
да.
Ich danke Ihnen. Die Kürze ist die Schwester des Talents!
 

Hallo.

Es gibt eine Aufgabe wie diese. (kann nicht mit einem Häkchen versehen werden)

Wenn ein schwebender Auftrag ausgelöst wird {dann...}.

In meinem EA verwende ich Terminal.mqh, um Aufträge zu berechnen.

Terminal // Mas_Tip[0] offen Kaufen

// wenn die Anzahl der Kaufaufträgeum 1 gestiegen ist

wenn (Mas_Tip[0]+1)

{

Funktion

}

Alles funktioniert. Aber es wird bei jedem nächsten Tick ausgelöst.

Wie kann man dieses Gehäuse an einer Zecke befestigen? Anschließend wird der Wert des vorherigen Ticks mit dem des aktuellen Ticks verglichen.