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

 
Artyom Trishkin #:

Wenn in Ihrem Code eine Position geöffnet ist, wird eine andere Position nicht auf das entgegengesetzte Signal hin geöffnet. Das heißt, wenn das Signal eintrifft, müssen Sie zunächst prüfen, ob es eine gegnerische Position gibt und diese schließen.

Aber auch hier schränkt dies die Möglichkeiten zur Verbesserung der Strategien stark ein.

Es sollte vermieden werden, sich an das Vorhandensein/Fehlen von Aufträgen zu binden (insbesondere bei vier - ausstehenden Aufträgen (was richtig ist) und Positionen (was falsch ist)).

Nein, es ist richtig und notwendig, die Anzahl der Aufträge und Positionen nach ihrer Art zur Verfügung zu haben. Aber es ist falsch, sich nur auf das Fehlen von Aufträgen für die Signale zu verlassen.

Im Allgemeinen ist der richtige Weg, Funktionen zur Berechnung von Aufträgen und Positionen (eine Funktion, die die Struktur füllt, wenn sich die Anzahl der Aufträge und Positionen ändert), Funktionen zum Öffnen/Schließen von Positionen, Funktionen zum Setzen von Aufträgen und Alarmfunktionen zu haben. Außerdem können Sie die Positionsdaten (offen oder geschlossen) mit einigen Werten vergleichen.

Jede beliebige Strategie kann aus diesem Set aufgebaut werden.

Artem, die Strategie besteht darin, einen Auftrag auf dem Markt zu halten, bis er am TP oder SL schließt.
 
MakarFX #:

Ihr Code

(Eine Bar geöffnet und keine Bestellungen)

Überprüftes Signal - kein Signal

... Warten Sie auf den nächsten Takt.

Sie haben denselben Fehler wie beim letzten Mal wiederholt

P.S.

Es ist

muss nach der Eröffnung des Auftrags durchgeführt werden

Eigentlich war mein Code für etwas anderes gedacht. Für einen Roboter, der nur zu Eröffnungskursen handelt. Ich habe ihn einfach von mir genommen und ihn in den Code einesgesetzestreuen Bürgers eingefügt und entsprechend den Kommentaren geändert. Es können nicht alle Nuancen auf einmal berücksichtigt werden. Man sieht sie nur beim Testen des Roboters.

Aber es gibt eine Sache. Sie scheinen auch alles in Betracht gezogen zu haben. Ein Signal wurde empfangen und die Funktion bSignalSell oderbSignalBuy hat einen Befehl zur Eröffnung einer Order gesendet und true (den ersten Punkt) zurückgegeben. Der zweite Punkt ist, dass noch kein Auftrag eröffnet wurde (der Befehl wartet darauf, dass er im Terminal an der Reihe ist). Dann, wenn die Befehlswarteschlange ankommt, wird sie an den Server gesendet (das ist noch Zeit). Auf dem Server wird sie ausgeführt. Oder der Server verweigert die Ausführung aus einem von mehreren möglichen Gründen (Einzelheiten siehe Dokumentation). Oder es kommt nicht an (Störungen, schlechte Verbindung und andere Netzwerkfehler). Und Ihr Roboter denkt, dass er einen Auftrag eröffnet hat und aktualisiert die Öffnungszeit des Balkens. Das ist in Ordnung. Dieser Auftrag ist jedoch nicht in der Liste der offenen Aufträge aufgeführt. Stellen Sie sich also vor, dass Sie 0 Aufträge in der Liste haben und der Roboter "denkt": "Es ist OK, ich habe den Markt betreten. Infolgedessen gibtes ein Signal während eines ganzen Balkens nach einem erfolglosen Einstieg, aber der Expert Advisor "sieht" es nicht und unternimmt nichts. Ist eine solche Situation möglich? Das ist möglich! Ihr Code ist also nicht sehr gut. Sie sollten besser nachdenken. Oder lassen Sie den gesetzestreuen Bürger denken. Leider kann ich das im Moment nicht. Ich arbeite gerade an einem sehr interessanten Projekt. Und die Erstellung eines richtigen, voll funktionsfähigen EA mit all seinen Mechanismen ist nur für ein gutes, profitables Handelssystem sinnvoll. Der Roboter kann einfach im Strategietester ausgeführt werden, um zu sehen, ob es sich um eine andere meiner Versionen oder um die von Ihnen entwickelte handelt. Es macht keinen Unterschied.

 
законопослушный гражданин #:

Ich habe es erst jetzt bemerkt.

bool bSignalBuy()
  {
   if(dMA > Open[1] && dMA < Close[1])  //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
      return(true);

   return(false);
  }
Open[1] и Close[1]

Index 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0);

Sie hingegen haben den MA mit einem Index von 0! Das heißt, sie geht durch die gesamte Bar und kann über das Öffnen und Schließen hinausgehen. Daher ist es besser, MA um 1 zu indexieren.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 1);

Dann werden alle Signale ausnahmsweise auf dem gebildeten Balken genommen und der Roboter wird vollständig mit dem Handelssystem mit Signalen auf den offenen Preisen übereinstimmen. Daher muss der Roboter nur die Öffnung des Balkens verfolgen (ich habe diesen Code bereits hinzugefügt) und bei dem neu gebildeten Balken einsteigen. Sie wird zuverlässiger sein. Und es ist nicht nötig, sich zu verrenken, wie es Makar wegen des ursprünglich falschen Eingabealgorithmus tun musste.

 
Mihail Matkovskij #:

Ich habe es erst jetzt bemerkt.

Index 1.

Sie hingegen haben den MA mit einem Index von 0! Das heißt, sie geht durch die gesamte Bar und kann über das Öffnen und Schließen hinausgehen. Daher ist es besser, MA um 1 zu indexieren.

Dann werden alle Signale ausnahmsweise auf dem gebildeten Balken genommen und der Roboter wird vollständig mit dem Handelssystem mit Signalen auf den offenen Preisen übereinstimmen.

Dies ist der Kern des Signals.

Der aktuelle MA geht in den Körper der vorherigen Kerze und gibt je nach Kerze (UP/DN) das gleiche Signal.

 
MakarFX #:

Dies ist der Kern des Signals.

Der aktuelle MA geht in den Körper einer vorangegangenen Kerze und je nach Kerze (UP/DN) handelt es sich um dasselbe Signal.

In diesem Fall sollte der MA mit dem Index 1 im unteren Zeitrahmen gezeichnet werden. Dann müssen keine Änderungen vorgenommen werden. Innerhalb der Eröffnungs- und Schlusszeiten des höheren Zeitrahmens gibt es mehrere (oder viele) Balken im niedrigeren Zeitrahmen. Sie wissen, warum Zeitrahmen erfunden wurden, nicht wahr? Wenn nicht, dann beginnen Sie mit dem Studium dieser Frage aus der Geschichte der japanischen Kerzenständer. Kurzum, es geht darum, die technische Analyse zu vereinfachen. Und mit dem Aufkommen des digitalen Zeitalters wurde auch die Diskretisierung der Handelssysteme vereinfacht.

 
Mihail Matkovskij #:

In diesem Fall sollte der MA mit Index 1 auf dem unteren Zeitrahmen genommen werden. Dann gibt es keinen Grund mehr, sich zu verrenken. Es gibt mehrere (oder viele) Balken innerhalb von Open und Close des höheren Zeitrahmens auf dem niedrigeren. Sie wissen, warum Zeitrahmen erfunden wurden, nicht wahr? Wenn nicht, dann beginnen Sie mit dem Studium dieser Frage aus der Geschichte der japanischen Kerzenständer. Kurzum, es geht darum, die technische Analyse zu vereinfachen. Und mit dem Aufkommen des digitalen Zeitalters vereinfacht es auch die Diskretisierung von Handelssystemen.

Ich verstehe nicht, warum du wütend auf mich bist. Der Mann schreibt seine Strategie so, wie er sie sieht, und dieser Mann bin nicht ich.

Ich habe nur auf seine Frage geantwortet: "Wie vermeide ich mehrere Eröffnungen auf derselben Bar?"

Was ich lerne, weiß ich selbst, und wenn ich es nicht weiß, frage ich. Im Moment habe ich noch niemanden etwas gefragt.

 
MakarFX #:

Ich verstehe nicht, warum du das an mir auslässt. Der Mann schreibt seine Strategie so, wie er sie sieht, und dieser Mann bin nicht ich.

Ich habe nur auf seine Frage geantwortet: "Wie vermeidet man mehrere Eröffnungen auf derselben Stange?"

Was ich lerne, weiß ich selbst, und wenn ich es nicht weiß, frage ich. Jetzt habe ich niemanden etwas gefragt.

Seltsam. Ich versuche, einem Problem auf den Grund zu gehen, und Sie sprechen von einer Art Beziehungsklärung. Ich kommuniziere ausschließlich über das Thema Programmierung. Wenn Sie sich über etwas beleidigt fühlen, seien Sie nicht beleidigt. Ich schreibe schon seit 15 Jahren Software. Sie sagen, mein Code funktioniere Ihrer Meinung nachnicht richtig. Ich nehme Ihnen das nicht übel, sondern versuche Ihnen zu erklären, wie automatisierte Handelssysteme in der Realität funktionieren. Es ist ein rein technisches Gespräch. Und Sie sprechen mir gegenüber von einer Art Beleidigung... :)

 
Mihail Matkovskij #:

Das ist seltsam. Ich versuche, einem Problem auf den Grund zu gehen, und Sie sprechen von einer Art Beziehung. Ich kommuniziere ausschließlich über das Thema Programmierung. Wenn Sie sich durch etwas beleidigt fühlen, lassen Sie es sein. Ich schreibe schon seit 15 Jahren Software. Sie sagen, mein Code funktioniere Ihrer Meinung nachnicht richtig. Ich nehme Ihnen das nicht übel, sondern versuche Ihnen zu erklären, wie automatisierte Handelssysteme in der Realität funktionieren. Es ist ein rein technisches Gespräch. Und Sie sprechen mir gegenüber von einer Art Beleidigung... :)

Also habe ich Ihnen auch erklärt, was Ihr Code falsch ist (in diesem Fall), und Sie sagen, Sie müssen die EA neu zu machen)
 
Mihail Matkovskij #:

Ich schreibe schon seit 15 Jahren Programme.

Ich habe einen Vorschlag. Geben Sie mir Ihr Telegramm unter vier Augen.

 
MakarFX #:
Also habe ich Ihnen auch erklärt, was Ihr Code falsch ist (in diesem Fall), und Sie sagen, Sie müssen die EA neu zu machen)

In diesem Fall muss er nachgearbeitet werden, damit er nicht verdreht wird. Denn der Code, den ich hinzugefügt habe, ist für einen Roboter mit Eröffnungskurs-Signalen gedacht, wie ich bereits sagte. Ich dachte: Das ist seltsam. Und dann habe ich den Grund gefunden. Wenn Sie es von Anfang an richtig machen, werden Sie in Zukunft keine Probleme mehr haben. Man sollte also immer nach der Ursache suchen und nicht die Folge bekämpfen.