[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 276
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Bei der Verwendung (Aufruf) von Funktionen aus diesen Dateien (bereits in mt4 implementiert), im Falle einer fehlerhaften Arbeit des EA können wir im Log die Nummer des Fehlers von uns in den Code gemacht sehen.
Zum Beispiel rufen wir die Funktion GetLastError() auf:
In diesem Fall, wenn wir einen Fehler im Code gemacht haben oder falsche externe Parameter gesetzt haben, werden wir die Nummer dieses Fehlers im Protokoll sehen.
Zum Beispiel, 130.
Und die Entschlüsselung der Nummer finden Sie auf der Seite -https://book.mql4.com/ru/appendix/errors
Und wir müssen nicht den ganzen Code durchsuchen, weil wir durch diese Nummer bereits wissen, wo genau der Fehler gemacht wurde!
Lassen Sie mich ein wenig korrigieren: die Funktion GetLastError kann ohne die Header-Datei aufgerufen werden, aber um die Fehlerbeschreibung zu erhalten, ohne die Seiten zu navigieren, sollten Sie die Bibliothek verlinken:
Sie haben die Funktion nicht korrekt aufgerufen.
Ihre Funktion wird folgendermaßen aufgerufen: if (NumberOfPositions(NULL,Magic)> 1)
Sie sollte folgendermaßen aussehen:
Fühlen Sie den Unterschied (Sie haben die "-1" übersehen) und ändern Sie Ihren Code.
Um dies zu kontrollieren, können Sie einen Kommentar auf das Diagramm drucken. Zum Beispiel so (am Anfang der Funktion START).
Was Ihre zweite Bedingung betrifft, würde ich ("ohne klug zu denken") einen anderen Magier und eine separate Funktion Open_Buy_2() einstellen, um Positionen durch die zweite Bedingung zu öffnen!Der Code der zweiten Bedingung würde wie folgt aussehen
los,
Ich verstehe auch, warum die zweite Bedingung nicht funktioniert, vielleicht habe ich das Problem falsch erklärt:
Ich möchte, dass mein EA in der Lage ist, zu überprüfen, ob die Aufträge von ihm geöffnet wurden oder nicht, auch wenn sie vor langer Zeit geschlossen wurden. NumberOfPositions funktioniert, aber es zählt nur die Anzahl der offenen Positionen. (deshalb funktioniert es nicht)
Im Code meines EA gibt es ein Skript, das jede nächste Position unter Berücksichtigung der Daten der vorherigen Position eröffnet. Wenn es keine vorherige Position gab, sollte die erste Order ohne diese Bedingung eröffnet werden (andernfalls wird der EA nicht starten). Daher sollte es eine Funktion geben, die erkennt, ob mindestens ein Auftrag dieses EAs geöffnet wurde oder nicht (auch wenn der Auftrag dann geschlossen wurde). Wenn noch keine Aufträge vorliegen (Arbeitsbeginn), wird der erste Auftrag ohne Berücksichtigung der zweiten Bedingung eröffnet, und alle nachfolgenden Aufträge werden unter Berücksichtigung der zweiten Bedingung eröffnet, d. h. unter Verwendung der Daten der vorherigen Aufträge.
Ist es möglich, die Funktion auf diese Weise zu ändern?
Bitte sagen Sie mir, was die iTime-Funktion anzeigt.
Was ist das für ein Kauderwelsch mit 10 Ziffern? Sekunden?
Wie würde es in Jahr-Monat-Tag-Stunde-Minute übersetzt?
Ich verstehe. Um festzustellen, ob es Positionen in der Historie gab, können Sie wie folgt vorgehen:
Aber dann funktioniert Ihr Code nur im Testprogramm. Denn sonst müssen Sie die Magie jedes Mal ändern, wenn Sie den EA online einschalten.
Offensichtlich müssen Sie den Zeitraum festlegen, für den der Kontoverlauf erfasst wird.
D.h. wann wurde der letzte Handel mit der gegebenen Magie eröffnet/geschlossen? War es vor sechs Monaten oder vor 24 Stunden?
Es gibt Funktionen, die die Taktnummer (vom aktuellen Takt bis zum Ende der Historie) des letzten eröffneten oder geschlossenen Handels zurückgeben.
Um Ihnen ein Beispiel zu geben. Ich habe diese Funktionen in meinem Code wie folgt verwendet:
Oder so:
Hmm.kämpft mit dem gleichen einfachen Problem...öffnet ein Meer von Positionen, aber braucht nur 1 höchstens und wenn kaufen schließt und ein Signal kommt zu öffnen verkaufen... Große Anfrage Hinweis und korrigieren, was falsch ist.im Code unten... Wo muss ich eine Magie verschreiben? Wenn es Ihnen nichts ausmacht, machen Sie ein dummes Beispiel, wenn kaufen Kreuz nach oben (nicht mehr als 1 Auftrag) und verkaufen nach unten auch nicht mehr als 1. Ich denke, das wird die Fragen vieler Neulinge sofort beantworten. Ich danke Ihnen im Voraus.
Noch eine dumme Frage:
- Wie deklariert man ein Array, dessen Anzahl der Elemente durch eine externe Variable gegeben ist?
Es ist folgendermaßen.
Noch eine dumme Frage:
- Wie deklariert man ein Array, dessen Anzahl der Elemente durch eine externe Variable gegeben ist?
https://docs.mql4.com/ru/array/ArrayResize
Hmm.kämpft mit dem gleichen einfachen Problem...öffnet ein Meer von Positionen, aber braucht nur 1 höchstens und wenn kaufen schließt und ein Signal zu öffnen verkaufen kommt... Große Anfrage Hinweis und korrigieren, was falsch ist.im Code unten... Wo muss ich eine Magie verschreiben? Wenn es Ihnen nichts ausmacht, machen Sie ein dummes Beispiel, wenn der Kauf nach oben kreuzt (nicht mehr als 1 Auftrag) und der Verkauf nach unten auch nicht mehr als 1. Ich denke, das wird die Fragen vieler Neulinge sofort beantworten. Vielen Dank im Voraus.
Versuchen Sie es so:
(Sie müssen bei NumberOfPositions() aufmerksamer sein, es steht nicht ohne Grund in der Kopfzeile:
/| Beschreibung : | Beschreibung : Gibt die Anzahl der Positionen zurück.
//| Parameter : |
//| sy - Instrumentenname ("" oder NULL - aktuelles Symbol) |
|| op - Operation ( -1 - beliebige Position) |
//| mn - MagicNumber ( -1 - beliebige magische Zahl) |
//+----------------------------------------------------------------------------+