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

 
AlexeyVik:

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

Können Sie also erklären, was an diesen Werten verwirrend ist?

Es gibt nichts Verwirrendes an diesen Werten, alles ist richtig, aber darum geht es hier nicht.

Das Problem mit dem Freitag ist insbesondere dann nicht relevant, wenn Ihre Ortszeit X Stunden länger ist als die Zeit des Brokers.

Aber stellen Sie sich vor, dass es auf Ihrem lokalen Computer nicht +1, sondern -1 Stunde Unterschied zum Broker gibt.

Und es gibt diese einfache Bedingung:

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
   Print("Настала пятница и время больше чем 21:30");

In diesem Fall:

1. der Broker hat den ersten Tick des Freitags, z.B. den heutigen Tick, der eine Zeit von 2014.11.07 00:00 hat

2. die Anzahl der Sekunden, die vom01.01.1970 00:00 Uhr bis zum fraglichen Tick verstrichen sind, d. h.2014.11.07 00:00 Uhr

3. wir nehmen die Anzahl der Sekunden, die vom 01.01. 1970 00:00 bis zum06.11.2014 21:30 verstrichen sind(es handelt sich um das gestrige Datum, weil wir die Zeit des lokalen PCs nehmen, der zum Zeitpunkt des Tickens nicht Freitag, sondern Donnerstag ist, was der 6. Tag ist, oder um genauer zu sein, 2014.11.06 23:00, die Differenz von 1 Stunde)

Voila, die Anzahl der Sekunden in Punkt 2 ist größer als in Punkt 3.

Das bedeutet, dass der erste Freitags-Tick den im Code angegebenen Druck ausführt, obwohl, wenn dieStringToTime()-Funktion das Datum vom Server des Brokers übernimmt, alles wie geplant funktionieren würde, der Druck würde am Freitag erst erscheinen, wenn die Zeit über21:30 Uhr geht

 
Leonid123456:

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.

Und können Sie die hervorgehobene Zeichenfolge in unsere menschliche Sprache übersetzen? Was es sein sollte und was Sie erhalten, wenn Sie diese Zeile ausführen...
 
AlexeyVik:
Können Sie die hervorgehobene Zeile in unsere Sprache übersetzen? Was sein sollte und was man bekommt, wenn man diese Zeile ausführt...

// wenn die Anzahl derKaufaufträge um 1 gestiegen ist, dann...

{

Funktion z.B. öffnet oder schließt andere Aufträge...

}

Es muss nicht so seinif (Mas_Tip[0]+1) können wir tunif (Mas_Tip[0] >Mas_Tip[1]) // wenn es mehr Kaufaufträge als Zellen gibt. Eröffnen Sie zum Beispiel ein schwebendes Verfahren.

Der Punkt ist, dass beim nächsten Tick diese Daten wieder zutreffen.

 
Leonid123456:

// wenn die Anzahl derKaufaufträge um 1 gestiegen ist, dann...

{

Funktion z.B. öffnet oder schließt andere Aufträge...

}

wenn (Mas_Tip[0]+1)

In den Klammern von if sollte ein bool stehen, d. h. true oder false.

Hier ist es offensichtlich int. Das ist eine ganze Zahl.

Natürlich ist wahr gleich 1 und falsch gleich 0 (wenn ich mich nicht irre). Aber trotzdem ist es nicht richtig. Was gibtMas_Tip[0] zurück?

 
ikatsko:

wenn (Mas_Tip[0]+1)

in den Klammern von if sollte ein bool sein, d.h. true oder false.

Aber hier ist es offensichtlich int. Das ist eine ganze Zahl.

Natürlich ist wahr gleich 1 und falsch gleich 0 (wenn ich mich nicht irre). Aber trotzdem ist es nicht richtig. Was gibtMas_Tip[0] zurück?

Anzahl der offenen Kaufaufträge.

 
Leonid123456:

// wenn die Anzahl derKaufaufträge um 1 gestiegen ist, dann...

{

Funktion z.B. öffnet oder schließt andere Aufträge...

}

Nein, das ist es, was Sie wollen. Eigentlich ist es das nicht. Es gibt einen Wert im Array Mas_Tip[0], und wenn er größer als Null ist, wird die Bedingung if(Mas_Tip[0]) wahr sein. Und wenn wir 1 zu diesem Wert addieren, wird er immer wahr sein, da die Anzahl der offenen Aufträge nicht gleich -1 sein kann.

 
AlexeyVik:

Nein, so wollen Sie es haben. In Wirklichkeit ist das nicht der Fall. Es gibt einen Wert im Array Mas_Tip[0], und wenn dieser größer als Null ist, ist die Bedingung if(Mas_Tip[0]) bereits erfüllt. Und wenn wir 1 zu diesem Wert addieren, wird er immer wahr sein, da die Anzahl der offenen Aufträge nicht gleich -1 sein kann.


Ich habe versucht, es auf diese Weise zu tun

   bool  Fact_1 = false;                    // Глобальная перемен.
       bool  Fact_2 = false;                    // Глобальная перемен.
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
                          // Локальная перемен.
   if (Fact_2==true)                            //Если сообщение уже..
      return;                                   //..было, то выходим
 
   if (Mas_Tip[0]+1)
      Fact_1 = true;                            // Произошло событие 1
 
   
 
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
                               // Пользовательс. ф-ия
  {
             // Сообщение
   Fact_2 = true;                               // Произошло событие 2
   return;                                      // Выход из польз.ф-ии

}

Es stellt sich heraus, dass es sich um ein einmaliges Ereignis handelt.

 
ikatsko:

wenn (Mas_Tip[0]+1)

in den Klammern von if sollte ein bool sein, d.h. true oder false.

Aber hier ist es offensichtlich int. Das ist eine ganze Zahl.

Natürlich ist wahr gleich 1 und falsch gleich 0 (wenn ich mich nicht irre). Aber trotzdem ist es nicht richtig. Was gibtMas_Tip[0] zurück?

false ist 0 und true, wenn es nicht 0 ist.

Versuchen Sie diese Zeile

bool b;
b = 7.40;
if(b) Print("b = ", b);
Der Compiler warnt zwar vor einem möglichen Präzisionsverlust, aber es wird funktionieren.
 

können SieMas_Tip[0] ablegen

Wie man ein Ereignis bekommt. Ein Kauf ist eröffnet.

 
Leonid123456:

können SieMas_Tip[0] ablegen

Wie man ein Ereignis bekommt. Ein Kauf ist eröffnet.

Speichern Sie die alte Anzahl der Käufe in einer Variablen und vergleichen Sie sie mit dem aktuellen Wert, der von der Funktion "Käufe zählen" zurückgegeben wird, wie sonst?