Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 273

 
Lowech:
   int nomber = OrdersHistoryTotal();
   int tip=OrderType();
   if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY))  
Guten Tag. Ich brauche etwas Hilfe. Wenn es eine geschlossene Verkaufsorder gibt, kann die nächste Order nur für den Kauf geöffnet werden. Was ist im Code falsch? Bitte geben Sie einen Rat.

Sie haben bereits erfahren, dass die zweite Zeile dieses Fragments einen Fehler enthält: Bevor die Funktion OrderType() aufgerufen wird, muss die Bestellung mit der Funktion OrderSelect() ausgewählt werden.

Es gibt einen Fehler in Zeile 3: Aber gibt es einen Auftrag mit der Nummer 1? Wenn die Mindestanzahl 1 wäre, d.h. das Konto beginnt mit 1, dann wäre die Höchstanzahl gleich der Nummer (es gäbe insgesamt 5 Aufträge: Auftragsnummern 1, 2, 3, 4, 5). Aber die Aufträge sind von 0 an nummeriert - setzen Sie den Cursor auf OrdersHistoryTotal und drücken Sie F1, um ein Beispiel zu sehen. Wie hoch ist also die maximale Bestellmenge?

 
Aleksey Vyazmikin:

Sie haben vorhin vorgeschlagen, das Datum des Monats durch 7 zu teilen und zu runden, was in der zweiten Tabelle auch geschieht.

Ich verstehe Ihren Algorithmus nicht.

Nun, ich denke Folgendes:

1 Bestimmen Sie den Wochentag des ersten Tages des Monats.

2. Finde heraus, wie viele Tage bis zum Ende der Woche noch übrig sind (war Mittwoch (3) bis Montag 7-3 = 4).

3. Der 5. Tag - der Beginn der zweiten Woche

4. In der Schleife suchen wir dann nach einer Woche, wenn die Zahl in den Bereich von 5 + 7 * x bis 5 + 7 * (x +1) fällt, wobei x - Zahl der Woche minus eins, dann haben wir die Woche gefunden.

Aber das ist kompliziert, vielleicht gibt es einen einfacheren Weg?

Alexey, wir sprechen über unterschiedliche Dinge. Das Problem bestand nicht darin, festzustellen, welche Woche des Monats die Nummer des Monats ist, sondern der erste Tag der Woche mit diesem Namen im Monat. Es handelt sich um unterschiedliche Aufgaben und folglich auch um unterschiedliche Lösungen.

Seit 63 Jahren kann ich immer noch nicht herausfinden, wie man die Anzahl der Wochen im Monat berechnet. In Russland zum Beispiel gilt der Montag als erster Tag der Woche. Wenn der Monat am Sonntag beginnt, wie zählt man dann den Montag? Hat die zweite Woche begonnen? Oder was??? Die Frage ist rhetorisch, es gibt keinen Grund, eine Polemik darüber anzufangen.

 
Alexey Viktorov:

Alexej, wir sprechen über unterschiedliche Dinge. Das Problem bestand nicht darin, festzustellen, in welcher Woche des Monats die Nummer des Monats liegt, sondern ob es sich um den ersten Tag der Woche mit diesem Namen in diesem Monat handelt. Es handelt sich um unterschiedliche Aufgaben und folglich auch um unterschiedliche Lösungen.

Seit 63 Jahren verstehe ich immer noch nicht, wie man die Zahl der Woche im Monat zählt. Nehmen wir an, dass in Russland der erste Tag der Woche der Montag ist. Wenn der Monat am Sonntag beginnt, wie wird dann der Montag gezählt? Hat die zweite Woche begonnen? Oder was??? Die Frage ist rhetorisch, es gibt keinen Grund, eine Polemik darüber anzufangen.


Ich verstehe. Für mich ist das eine eindeutige Frage...

 
Alexey Viktorov:

Alexej, wir sprechen über unterschiedliche Dinge. Das Problem bestand nicht darin, festzustellen, in welcher Woche des Monats die Nummer des Monats liegt, sondern ob es sich um den ersten Tag der Woche mit diesem Namen in diesem Monat handelt. Es handelt sich um unterschiedliche Aufgaben und folglich auch um unterschiedliche Lösungen.

Seit 63 Jahren kann ich immer noch nicht herausfinden, wie man die Anzahl der Wochen im Monat berechnet. In Russland zum Beispiel gilt der Montag als erster Tag der Woche. Wenn der Monat am Sonntag beginnt, wie zählt man dann den Montag? Hat die zweite Woche begonnen? Oder was??? Die Frage ist rhetorisch, es gibt keinen Grund, eine Polemik darüber anzufangen.

Ich habe die Antwort auf Yandex nachgeschlagen - 4 Möglichkeiten. Mir gefällt der vierte Weg: "Crosscutting". Am 1. Januar beginnt die erste Woche des Jahres, sieben Tage später, am 8. Januar, die zweite Woche des Jahres und so weiter bis zum Ende des Jahres. Monat für Monat ist es dasselbe
Онлайн калькулятор: Определение номера недели по дате
  • Timur пользователь planetcalc
  • planetcalc.ru
Калькулятор ниже определяет порядковый номер недели в году. Как выяснилось, это не совсем тривиальный вопрос, и есть целых четыре разных способа подсчитать номер недели. Первый способ: Стандарт ISO 8601 и соответствующий ему ГОСТ ИСО 8601-2001 «ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ» — официальный способ расчета номера недели в Российской Федерации. По...
 
Darirunu Es kommt sehr kompliziert daher. Es muss eine einfachere Möglichkeit geben. Kann jemand etwas dazu sagen?
//+-------------------------------------------------------+
//| Проверка дней недели                       PRVERKA.mq4|
//+-------------------------------------------------------+

#property strict
string Дни[7]={"Вс","Понедельник","Вторник","Среда","Четверг","Пятница","Сб"};
void OnStart()
{
  int День=Day(), ДеньН=DayOfWeek();
  Alert("----------------------");
  Alert("Сейчас на компьютере: ", TimeToStr(TimeLocal(),TIME_DATE));
  Alert("Последний тик с сервера: ", TimeToStr(TimeCurrent(),TIME_DATE), " Число ", День, " ", Дни[ДеньН]);

  int ДеньНачалаМесяца = (ДеньН-День+36) % 7;
  Alert("ДеньНеделиПервогоЧисла = ", Дни[ДеньНачалаМесяца]);

  int ЧислоПервойПятницы = ДеньНачалаМесяца==6?7:6-ДеньНачалаМесяца;
  int ЧислоВторогоПонедл = (ДеньНачалаМесяца<2?9:16)-ДеньНачалаМесяца;

  Alert("ЧислоПервойПятницы = ", ЧислоПервойПятницы, "  ЧислоВторогоПонедл = ", ЧислоВторогоПонедл);

  if(ЧислоВторогоПонедл>День)
  {
    Alert("Надо подождать числа ", ЧислоВторогоПонедл+1);
    return;
  }

  // Смотрим свечи, бары, бычьи, медвежьи
}
Hier ist der Algorithmus von unten nach oben gelesen
 
STARIJ:

Sie haben bereits erfahren, dass die zweite Zeile dieses Fragments einen Fehler enthält: Bevor die Funktion OrderType() aufgerufen wird, muss die Bestellung mit der Funktion OrderSelect() ausgewählt werden.

Es gibt einen Fehler in Zeile 3: Aber gibt es einen Auftrag mit der Nummer 1? Wenn die Mindestanzahl 1 wäre, d.h. das Konto beginnt mit 1, dann wäre die Höchstanzahl gleich der Nummer (es gäbe insgesamt 5 Aufträge: Auftragsnummern 1, 2, 3, 4, 5). Aber die Aufträge sind von 0 an nummeriert - setzen Sie den Cursor auf OrdersHistoryTotal und drücken Sie F1, um ein Beispiel zu sehen. Wie hoch ist also die maximale Bestellmenge?

int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
   int tip=OrderType();
   

Ist sie jetzt korrekt?

 
Lowech:
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))   - так какой наибольший номер ордера?
   int tip=OrderType();

und ist es jetzt richtig?

ein Skript schreiben und nach jeder Anweisung die Informationen anzeigen + GetLastError() mit Alert() - siehe Beispielskript gerade oben
 
STARIJ:
ein Skript schreiben und nach jedem Operator die Informationen ausgeben + GetLastError() mit Alert() - siehe das Beispielskript oben

aber man sollte besser den Fehlercode aus der _LastError-Variable nehmen, um ihn zu drucken, sonst kann man die Logik mit einem leichten "Debug-Print" zerstören

GetLastError() tut gleichzeitig etwas für GetXXX() Unverständliches - es ändert seinen internen Zustand und setzt den Fehlercode auf 0 zurück.

 
Maxim Kuznetsov:

nur für das Drucken ist es besser, den Fehlercode aus der _LastError-Variable zu übernehmen, da es sonst möglich ist, die Logik durch einen leichten "Debug-Druck" zu zerstören

GetLastError() tut gleichzeitig etwas für GetXXX() Unverständliches - es ändert den internen Zustand und setzt den Fehlercode auf 0 zurück.

Nun, das ist Geschmackssache - entweder speichern Sie den Fehlercode in einer Variablen und setzen den Fehler zurück oder Sie speichern ihn in _LastError zur späteren Verwendung

 
STARIJ:
hier ist der Algorithmus von unten nach oben zu lesen
Das ging schnell. Wie werden Sie nach Bars suchen? In einer Schleife oder unter Verwendung der Zeitstruktur?