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
1. Ich würde Folgendes sagen: Verwenden Sie den Code eines anderen mit großer Sorgfalt. Denn der Code von jemand anderem bedeutet auch die Fehler von jemand anderem.
2. Hier(https://www.mql5.com/ru/forum/6343/page64#comment_357008) habe ich vorgeschlagen, dass Sie versuchen sollten, Variablen vor ihrer Verwendung korrekt auf Null zu setzen. Aber Ihr Code hat diesen Vorschlag noch nicht umgesetzt. Außerdem enthält Ihr Code Konstrukte des folgenden Typs:
In diesem Konstrukt werden die Anfrage- und Ergebnisvariablen nicht vor, sondern nach ihrer Verwendung auf Null gesetzt. Wenn diese lokalen Variablen auf Null gesetzt werden, funktioniert die Funktion nicht mehr, d. h. die Nullsetzung selbst ist sinnlos. Mit anderen Worten: Eine solche Konstruktion ist ein gutes Beispiel dafür, dass die Variablen MqlTradeRequest und MqlTradeResult nicht auf Null gesetzt werden sollten. Wenn Sie also eifrig sind, versuchen Sie bitte, die Variablen korrekt zu löschen. Wenn etwas nicht funktioniert, beschreiben Sie bitte genau, was "nicht funktioniert".
3. Die Standardbibliothek verfügt über eine Handelsklasse"MQL5 Reference / Standard Library / Trade Classes / CTrade". Versuchen Sie herauszufinden, wie Sie es in der Praxis anwenden können. In der Anfangsphase des Eintauchens in die Sprache kann dieser Unterricht völlig ausreichend sein. Diese Klasse hat zum Beispiel die folgende Methode:"MQL5 Referenz / Standardbibliothek / Handelsklassen / 2CTrade/ PositionModify". Es wird wie folgt umgesetzt:
Die Zeile 'ClearStructures();' löscht die Variable m_request , bevor sie verwendet wird.
Yedelkin,
Herzlichen Dank :)
Ich habe es nachgeschlagen und meinen Fehler erkannt.
Ich kann es so machen:
Aber ich fand Ihre Vorschläge gut:
Die Ergebnisse sind jedoch dieselben.Nun ist die Stelle nicht gefunden, ich werde mich mit dieser Aufgabe überfordern.
Ich danke Ihnen.
Yedelkin,
Ich schreibe Ihnen, weil Sie mir angemessen antworten.
Ich habe zwei Soren - MT4 und MT5.
Warum funktioniert es nicht auf MT5, sie sind identisch.
Leider verstehe ich den MT4 überhaupt nicht. Ich werde mir das ansehen und Ihnen Bescheid geben, wenn ich etwas finde.
Nachtrag. Im Allgemeinen warten Sie die Markteröffnung ab und berichten, was genau hätte funktionieren sollen, aber nicht funktioniert hat.
Leider verstehe ich den MT4 überhaupt nicht. Ich werde mir das ansehen und Ihnen Bescheid geben, wenn ich etwas finde.
Nachtrag. Im Allgemeinen warten Sie, bis der Markt öffnet, und beschreiben, was hätte funktionieren sollen, aber nicht funktioniert hat.
Also tue ich es für mich selbst und für wen auch immer, wenn nötig.
Hier sind die Kommentare:
Wenn die Anzeige der Pips bolshego Null für Änderung für zwei yazikas (MT4 und MT5):
Wenn diese Pips (Bid - Pips) bolshe öffnen posishon:
Wenn Stop = 0 oder Bid - pipsi dal trailing >= von Open Posishon + pips Definition:Änderung:
Das war's.
Ich möchte eine separate Funktion für die Änderung erstellen.
Können Sie das genauer erläutern? Ihr Expert Advisor verwendet bereits den MFI-Indikator und soll nun den zweiten Indikator - den MA-Indikator - verwenden? Oder Ihr Expert Advisor verwendet überhaupt keine Indikatoren, aber Sie möchten, dass er den MA-Indikator verwendet?
Wenn der Expert Advisor MFI verwendet, muss sein Code eine Zeile enthalten, in der das Handle dieses Indikators abgerufen wird:"MQL5 Reference / Technical Indicators / iMFI". Daher wird der Umgang mit dem Indikator des gleitenden Durchschnitts hier beschrieben:"MQL5 Referenzhandbuch / Technische Indikatoren / iMA ".
Versuchen Sie auch, den Artikel"Indicator by Indicator in MQL5" zu lesen.
1. Leider haben Sie nicht angegeben, was "nicht funktioniert". Sie haben die Logik des Programms dargelegt (wie es funktionieren sollte), aber Sie haben nicht angegeben, wo die Logik gebrochen ist und wie sie gebrochen ist. Ohne eine detaillierte Beschreibung des Problems können Sie nur Kommentare zum Code abgeben.
2. Die Funktion bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit) enthält solche Zeilen:
Wenn Sie sich die Beschreibung der MqlTradeResult-Struktur ansehen, können Sie feststellen, dass das Feld "Deal" wie folgt beschrieben wird
Angebot
Abschlussticket, wenn ein Geschäft abgeschlossen wurde. Sie wird während eines Handelsvorgangs gemeldet TRADE_ACTION_DEAL
wird immer ausgelöst, auch wenn die Änderung erfolgreich war, und es wird gleichzeitig eine Fehlermeldung ausgegeben.
2. Sehen Sie sich die Zeilen aus dem vorherigen Punkt 2 an. Sie verwenden dort die Funktion GetLastError(), die den Code des letzten Fehlers zurückgeben soll. Aber Sie löschen die Variable, die den Fehlercode enthält, nicht, bevor Sie sie verwenden. Selbst wenn die Änderung erfolgreich ist, geben Sie einen Fehler aus, der lange vor der Anfrage zur Änderung der Position aufgetreten sein könnte. Sie sollte in etwa so aussehen:
3. Sehen Sie sich diese Zeilen an:
Nehmen wir an, dass beim nächsten Tick Ihre BedingungNormalizeDouble(Bid - MStop,4) == SL ausgelöst wird. Angenommen, SL==1,11110. Dann aber auch ModifyPosition(Symbol(),1.11110,TP). D.h. diese Änderung wird die zuvor eingestellten Werte festlegen.
Und was wird passieren, wenn die Gleichheit NormalizeDouble(Bid - MStop,4) == SL beim nächsten Tick wieder funktioniert?) Vor allem, wenn man bedenkt, dass (a) die Normalisierung auf vier Ziffern erfolgt, während es fünfstellige Notierungen geben kann, (b) Handelsanfragen auf dem Server mit einer gewissen Verzögerung ausgeführt werden können.
4. Es gibt auch eine solche Zeicheneigenschaft als SYMBOL_TRADE_STOPS_LEVEL. Aber diese Ebene wird in Ihrem Code nicht überprüft. Das heißt, wenn der Kandidat für einen neuen Stop Loss für eine Kaufposition als SL_new angegeben wird, wäre es sinnvoll, die Bedingung if(Bid-STOPS_LEVEL>SL_new) zu prüfen.
Versuchen Sie einmal, im Referenzhandbuch den Vergleich von reellen Zahlen nachzuschlagen. Soweit ich mich erinnere, wird dringend davon abgeraten, zwei reelle Zahlen wie folgt zu vergleichen: if(double_1 == double_2).
Yedelkin,
Vielen Dank, Reshetov hat mir auch gezeigt, wo der Fehler liegt.
Hier ist die Funktion selbst:
Und hier ist, wie ich die Funktion selbst hätte ausführen sollen:
Jetzt funktioniert alles einwandfrei.
Ich danke Ihnen.