Diskussion zum Artikel "Einen Expert Advisor mit Hilfe des MQL5 Objekt-orientierten Programmieransatzes schreiben"
Im Allgemeinen ist es nicht schlecht, aber es ist ein bisschen lahm in der Befolgung der OOP-Slogan im Namen verwendet. Warum sind zum Beispiel Stoploss, Take und Price außerhalb der Klasse platziert? STP und TKP sollten Mitglieder sein, wir brauchen die setSLTP Methode; latest_price und levels sollten innerhalb von openBuy/openSell berücksichtigt werden. Sie selbst sind sehr irrational geschrieben - es ist wünschenswert, nur ein if mit MarginOK-Aufruf zu lassen und darin die erste Zeile der Prüfung if(Chk_Margin == 0) return(true) hinzuzufügen;
Und noch eine Kleinigkeit. Warum ist Chk_Margin als int- deklariert, obwohl es nur als bool verwendet wird? Es wäre besser, es durch einen minimal ausreichenden Typ zu beschreiben, sonst gibt es beim Lesen des Quellcodes Fragen, was passiert, wenn Chk_Margin == 2, 3, etc.
Mit dem angegebenen Paar, dem angegebenen Zeitraum und den Standard-Eingabeparametern können Sie kein so schönes Gleichgewichtschart erhalten. Hatte der Autor andere Zitate? Könnten Sie die Eingabeparameter beifügen, mit denen ein solches Diagramm erhalten wurde?
Wie unterschiedlich sollten die Quotierungen zwischen Ihnen und dem Autor sein, damit die Ergebnisse sehr unterschiedlich sind))))))) Ich habe fast das Gleiche erhalten, und das Endergebnis ist sogar noch ein wenig besser:
das Design ist rätselhaft
if(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4) { return(true); } else { return(false); }
das Design ist rätselhaft
Was genau missfällt Ihnen daran so sehr? Natürlich habe ich es nicht im Zusammenhang mit dem Code gesehen.....
Schreibt man das in solchen Fällen nicht normalerweise so?
return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
Schreibt man das in solchen Fällen nicht normalerweise so?
Ich verstehe den folgenden Teil des Codes nicht:
// Kopieren Sie den Schlusskurs des vorherigen Balkens (Balken 1) in die entsprechende Expert Advisor-Variable Cexpert.setCloseprice(mrate[1].close); // Schlusskurs von Takt 1 //--- Prüfen, ob eine Kaufposition vorhanden ist if (Cexpert.checkBuy()==true) { if (Buy_opened) { Alert("Wir haben bereits eine Position zu kaufen!!!"); return; // Die Long-Position nicht aufstocken } double aprice = NormalizeDouble(latest_price.ask,_Digits); double stl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); double tkp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); int mdev = 100; // die Bestellung aufgeben Cexpert.openBuy(ORDER_TYPE_BUY,Lot,aprice,stl,tkp,mdev); }Wenn wir eine Kaufposition eröffnen wollen, sollten wir uns auf den latest_price.ask Preis konzentrieren, aber wenn wir einen Stop Loss und Take Profit für eine solche Position setzen - auf den latest_price.bid Preis. Ist dies richtig? Warum werden dann Stop Loss und Take Profit auf der Grundlage des Briefkurses im Codetext gesetzt? Handelt es sich um einen Druckfehler oder um eine Besonderheit einer bestimmten Strategie (der Code hat eine ähnliche Konstruktion für die Eröffnung einer Verkaufsposition )?
Ich verstehe den folgenden Teil des Codes nicht:
Wenn wir eine Kaufposition eröffnen wollen, sollten wir uns auf den latest_price.ask Preis konzentrieren, aber wenn wir einen Stop Loss und Take Profit für eine solche Position setzen - auf den latest_price.bid Preis. Ist dies korrekt? Warum werden Stop Loss und Take Profit auf der Grundlage des Briefkurses im Codetext gesetzt? Handelt es sich um einen Druckfehler oder um eine Besonderheit einer bestimmten Strategie (der Code hat eine ähnliche Konstruktion für die Eröffnung einer Verkaufsposition)?Hier ist die Logik (wahrscheinlich, ich verwende sie auch):
1. Der Eröffnungskurs für Buy wird als Ask angesehen (und das ist korrekt);
Sagen wir, wir eröffnen bei 1,27 für EURUSD.
2. Wenn wir eine Position eröffnen, erhalten wir die Differenz, die dem Spread entspricht, für Buy ist es Ask-Bid (potenzieller Verlust, wenn wir zum aktuellen Kurs schließen);
Nehmen wir an, dass der Spread 5 Pips beträgt. Somit wird Bid bei der Eröffnung bei 1,2695 liegen (richtig?).
3. Longs werden zum Bid-Kurs geschlossen (und das ist ganz logisch).
Wenn Bid also auf 1,27 steigt, erhalten wir einen BU für die Position (richtig?).
4. Aber wir müssen auch einen Gewinn erzielen (100 Pips im Standardkurs).
Das heißt, der TP sollte um 100 Pips höher sein als der Open. In unserem Fall ist es 1,28 (richtig?).
Gleichzeitig wird TP ausgelöst, wenn Bid (nicht Ask) diese 1,28 erreicht....
5. Auch der SL muss festgelegt werden (sagen wir, er beträgt 50 Pips). In unserem Beispiel liegt er also bei 1,2650 (50 Pips unter Open).
Unter welchen Bedingungen wird SL funktionieren?
Logischerweise sollte es funktionieren, wenn der Preis genau diese 50 Pips gegen uns überschreitet (d.h. Ask in den abschließenden Münzen auf SL sollte logischerweise bei genau diesen 1,2650 liegen).
Wo sollte Bid in diesem Fall sein? Und zu diesem Zeitpunkt wird es bei 1,2645 (weil Spred durch die Bedingung haben wir 5 Pips).
Denken Sie daran, dass Longs fixiert sind.
6. Schauen wir uns nun an, was tatsächlich passiert (nehmen wir die Markteröffnung eines Longs in MQL4 als Beispiel).
//Взято из справки по OrderSend ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-25*Point,Ask+25*Point);
Was wir hier sehen
Der Eröffnungskurs gilt als Ask, SL gilt als Bid und TP gilt als Ask.
In unserem Fall werden wir dieses Muster erhalten.
OrderSend(Symbol(),OP_BUY,1,Open = Ask,3,SL = Bid-50*Point,TP Ask+100*Point);
Lassen Sie uns unsere Daten hier ersetzen:
OrderSend(Symbol(),OP_BUY,1,1.2700,3,1.2695-50*Point,TP 1.2700+100*Point);
Was wir am Ende erhalten - Open = 1,2700 SL= 1,2645 TP 1,28
PS
Vergleichen wir mit den ursprünglichen Daten:
Auftrag - Open = 1,2700 SL= 1,2645 TP 1,28
Modell - Eröffnet = 1,2700 SL= 1,2645 TP 1,28
Es gibt hier diese Logik (wahrscheinlich neige ich auch dazu, sie anzuwenden):
1. Der Eröffnungskurs für Buy gilt als Ask (und er ist korrekt);
Sagen wir, wir eröffnen bei 1,27 für EURUSD
2. Wenn wir eine Position eröffnen, erhalten wir die Differenz, die dem Spread entspricht, für Buy ist es Ask-Bid (potenzieller Verlust, wenn wir zum aktuellen Kurs schließen);
Nehmen wir an, dass der Spread 5 Pips beträgt. Somit wird Bid bei der Eröffnung bei 1,2695 liegen (richtig?).
5. SL sollte auch gesetzt werden (sagen wir, es ist 50 Pips). In unserem Beispiel wird es also bei 1,2650 (50 Pips unter Open) liegen.
Unter welchen Bedingungen wird der SL ausgelöst?
Logischerweise sollte es funktionieren, wenn der Preis diese 50 Pips gegen uns überschreitet (d.h. Ask in closing coins on SL sollte logischerweise bei genau diesen 1.2650 liegen).
Wo sollte Bid in diesem Fall sein? Und zu diesem Zeitpunkt wird es bei 1,2645 (weil Spred durch die Bedingung haben wir 5 Pips).
Denken Sie daran, dass Longs fixiert sind.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.

Neuer Artikel Einen Expert Advisor mit Hilfe des MQL5 Objekt-orientierten Programmieransatzes schreiben :
Dieser Beitrag beschäftigt sich mit dem Objekt-orientierten Ansatz, um das zu machen, was wir bereits im Artikel "Schrittweiser Leitfaden zum Schreiben eines Expert Advisors in MQL5 für Anfänger" getan haben - einen einfachen Expert Advisor erstellen. Die meisten Menschen glauben, das sei schwer, doch ich darf Ihnen versichern: wenn Sie diesen Beitrag gelesen haben, dann können Sie Ihren eigenen Objekt-orientierten Expert Advisor schreiben.
Im ersten Beitrag haben wir uns mit den Grundlagen zur Erzeugung, Fehlersuche und Tests eines Expert Advisors in MQL5 beschäftigt.
Jeder einzelne Schritt war sehr einfach und interessant, doch die neue MQL5-Programmiersprache hat noch eine Menge auf Lager. In diesem Beitrag soll es um den Objekt-orientierten Ansatz gehen, mit dessen Hilfe wir genau das tun, was im ersten Artikel bereits beschrieben wurde. Die meisten Menschen glauben, das sei schwer, doch ich darf Ihnen versichern: wenn Sie diesen Beitrag gelesen haben, dann können Sie Ihren eigenen Objekt-orientierten Expert Advisor schreiben.
Wir werden uns nicht mehr mit Punkten aufhalten, die wir bereits im ersten Beitrag besprochen haben, daher schlage ich vor, dass Sie sich zunächst den gesamten ersten Beitrag durchlesen, falls Sie das nicht sowieso schon getan haben.
Autor: Samuel Olowoyo