Ich bin völlig verloren

 

Ich möchte einen "EA", wie Sie es nennen, erstellen. Es ist zwar lustig, dass Sie das immer wieder als Akronym verwenden, aber für mich steht es für "evolutionärer Algorithmus", was genau das ist, was meine Methode eigentlich ist. Wenn sie funktioniert. Was sie tut, wenn die Streuung gering genug ist. Das steht auf Messers Schneide.

Wie auch immer, ich habe Programmiererfahrung. Und von dem, was ich davon gesehen habe, sieht MQL4 ziemlich genau so aus wie C++. Aber mir fehlen einige entscheidende Details. Ich weiß bereits über Variablen und Konstanten und viele andere Dinge Bescheid, aber ich brauche eine Art grundlegende Vorlage, mit der ich arbeiten kann, und mir fehlen ein paar konzeptionelle Dinge. Kann jemand eine Art lausiges Beispielprogramm für einen Handelsroboter posten, das einfach ist, aber alle Elemente enthält, die ich brauche, und erklären, was jeder Teil davon tut, und dann kann ich sagen: "Aha, so mache ich das, was ich tun muss".

Grundsätzlich möchte ich, dass mein Programm in der Lage ist, die folgenden Daten in den Arbeitsspeicher meines Computers herunterzuladen (Herunterladen von Daten auf meinen Computer über die Devisenhandelsplattform):

Höchst-, Tiefst-, Eröffnungs- und Schlussdaten für Kauf- UND Verkaufskurse (da der Wert des Spreads variieren kann) für ein bestimmtes Zeitintervall, das ich im Programm festlege (falls dies möglich ist), einschließlich des letzten Kurses, sobald er abgeschlossen ist (also jede Minute oder alle 5 Minuten oder alle 10 Minuten usw.), was auch immer das Zeitintervall ist) oder möglicherweise bei jedem Tick - jedes Mal, wenn sich der Preis ändert - was auch immer von diesen getan werden kann, würde ich auch gerne in der Lage sein, eine Variable, die die Zeit, die seit dem letzten abgeschlossen ist (so, wenn es alle 10 Minuten, gäbe es eine Variable, die mit jedem Tick, die bis zu 10 Minuten von 0 zählt aktualisiert wird, und wenn es zu 10 Minuten, gibt es eine weitere Aktualisierung der Daten), Ich möchte auch den Gesamtwert des Kontos bei der Auflösung herunterladen, die Gesamtzahl der Positionen und die Größe der Positionen und die Art der Positionen (z.B. USD/JPY ist 10000 oder 100000 DOLLARS im Wert von Yen, aber EUR/USD ist 10000 oder 100000 EUROS im Wert von Dollar, aber mein Kontowert wird in Dollar sein, also muss es in der Lage sein, die variable Losgröße einer Position zu bestimmen). Von den aktuellen Kauf- und Verkaufspreisen könnte das Programm natürlich einfach den einen vom anderen subtrahieren, um den aktuellen Wert des Spreads zu erhalten.

DANN möchte ich, dass das Programm in der Lage ist, die folgenden Aktionen auszuführen (Hochladen von Daten von meinem Computer über die Devisenhandelsplattform)

Kauf oder Verkauf über Marktaufträge oder Limitaufträge. Bitte sagen Sie mir auch, ob ich, wenn ich eine Limit-Order eingebe, den Preis, wenn er durchgeht, erwarten kann, dass ich den von mir eingegebenen Limit-Preis erhalte, oder ob es besser sein kann? Angenommen, der EUR/USD-Kurs für den Kauf liegt bei 1,3500 und ich habe eine Limit-Order zum Kauf bei 1,3501, werde ich dann 1,3501 oder 1,3500 zahlen? Sollte ich erwarten, dass mich der Broker hier betrügt? Oder ist es funktional identisch mit der Aufgabe einer Marktorder, mit der Ausnahme, dass der Auftrag nicht ausgeführt wird, wenn der Kurs bei 1,3502 oder mehr liegt, wenn die Order ins System gelangt?

ENDLICH möchte ich, dass das Beispielprogramm einen Funktionsaufruf zu einer anderen Funktion enthält. Wenn sowohl Wertübergabe als auch Referenzübergabe möglich sind, wie es in MQL4 der Fall ist, dann fügen Sie bitte ein Beispiel für jede Funktion (kommentiert, um zu zeigen, was Sie tun) in das Beispielprogramm ein.

Sagen Sie mir bitte auch, ob es sich im Allgemeinen um mehr als eine Datei (mit der Erweiterung mql4?) handelt, wie es in C++ der Fall sein kann, oder ob es sich im Allgemeinen um eine einzige mql4-Datei handelt, und wird sie von der Handelsplattform kompiliert, oder benötige ich einen Compiler dafür, und verwendet die Handelsplattform dann den Maschinencode oder was auch immer vom Compiler erzeugt wird?

Wenn jemand dies tun würde, nur um ein Dummy-Programm zu erstellen, das all diese Elemente enthält, wäre es nicht nur für mich sehr nützlich, sondern auch für andere, denke ich. Vielen Dank im Voraus für jeden, der dies tut.

 
Noch besser wäre es, wenn die Variable, die bei 0 beginnt und bis zu 10 Minuten zählt (oder welche Zeit Sie auch immer verwenden), normalisiert - durch die Zeiteinheit geteilt - würde, so dass sie ein Double ist, das zwischen 0 und 1 schwankt. Das sage ich nur für den Fall, dass es ein Problem mit einem Skalierungsfaktor gibt. Auf diese Weise könnte es vielleicht auf ein 5-Minuten-Diagramm, ein 10-Minuten-Diagramm oder ein 1-Minuten-Diagramm angewendet werden, aber unabhängig von der Zeiteinheit liegt diese Variable immer zwischen 0 und 1.
 
Es gibt kein solches Programm, das Ihnen alles, was Sie über mql4 wissen müssen, in einer Instanz vermitteln kann. Ich empfehle Ihnen, sich die Code-Basis anzuschauen, da Sie bereits einige Programmierkenntnisse haben. Wenn du nicht gerne durch das Anschauen von Codes lernst, sondern lieber eine Erklärung der Sprache suchst, dann schau dir das mql4_book an. Außerdem gibt es die Dokumentationen zum einfachen Nachschlagen.
 
Ich habe gefragt, ob jemand einen schreiben würde. Wenn Sie das grundlegende Format der Sprache kennen, sollte es etwa 5 Minuten dauern, etwa so lange wie es dauerte, meinen Beitrag zu lesen. Schreiben Sie einfach das Programm, geben Sie ein Beispiel für jedes dieser Dinge ein und stellen Sie es ein. Ich habe mir das mql4-Buch angesehen, es geht direkt von der Erklärung, was eine Variable ist, zu den Annahmen über mein Wissen über Funktionen über, und ich werde müde, wenn ich versuche, den Übergangspunkt zu finden, an dem es von viel einfacher als das, was ich brauche, zu mehr übergeht, als ich bereit bin zu verstehen. Ich verlange ja nicht, dass jemand einen "Wirtschaftsberater" für mich schreibt, sondern einfach ein dummes Ding, das alle Anweisungen enthält, die ich vielleicht verwenden möchte. Etwas, das alle Informationen, die ich verwenden möchte, in Variablen auf meinem Computer herunterlädt, und jede Anweisung, die ich eingeben möchte - und jetzt, wo ich darüber nachdenke, möchte ich nicht nur Kauf- und Verkaufs-Limit- und Marktaufträge, sondern auch etwas, das bestehende Aufträge storniert, denn ich möchte nicht, dass irgendwelche Nachzügler-Limit-Aufträge herumliegen, falls sie nicht ausgeführt werden, ich möchte nicht, dass das Programm sie vergisst.
 
zortharg: Ich habe gefragt, ob jemand einen Code schreiben würde. Wenn du das Grundformat der Sprache kennst, sollte es etwa 5 Minuten dauern, etwa so lange wie es dauerte, meinen Beitrag zu lesen. Schreiben Sie einfach das Programm, tippen Sie ein Beispiel für jedes dieser Dinge und stellen Sie es online. Ich habe mir das mql4-Buch angesehen, es geht direkt von der Erklärung, was eine Variable ist, zu den Annahmen über mein Wissen über Funktionen über, und ich werde müde, wenn ich versuche, den Übergangspunkt zu finden, an dem es von viel einfacher als das, was ich brauche, zu mehr übergeht, als ich bereit bin zu verstehen. Ich verlange ja nicht, dass jemand einen "Wirtschaftsberater" für mich schreibt, sondern einfach ein dummes Ding, das alle Anweisungen enthält, die ich vielleicht verwenden möchte. Etwas, das alle Informationen, die ich verwenden möchte, in Variablen auf meinem Computer herunterlädt, und jede Anweisung, die ich eingeben möchte - und jetzt, wo ich darüber nachdenke, möchte ich nicht nur Kauf- und Verkaufs-Limit- und Marktaufträge, sondern auch etwas, das bestehende Aufträge storniert, denn ich möchte nicht, dass irgendwelche Nachzügler-Limitaufträge herumliegen, falls sie nicht ausgeführt werden, und ich möchte nicht, dass das Programm sie vergisst.

Ich glaube, Sie sind hier an der falschen Adresse.

Wir schreiben in diesem Forum keine Codes für andere Leute.

Wir erwarten von Ihnen, dass Sie Ihren eigenen Code schreiben.

Wenn du nicht weiterkommst, zeigen wir dir die richtige Richtung.

Wenn Sie möchten, dass jemand für Sie Codes schreibt, dann gehen Sie hierhin.

Sie machen mql4 und mql5.

 
zortharg:

[...]

Nun, das ist mal eine Abwechslung zur Diskussion über das große Update von MT4, das in ein paar Tagen ansteht.


Ich möchte einen "EA" erstellen, wie Sie es nennen. Obwohl es lustig ist, dass Sie das immer wieder als Akronym verwenden.

Das hängt von Ihrem Hintergrund ab. Im Guten wie im Schlechten haben MT4 und MQL4 derzeit fast ein Monopol auf dem weltweiten Devisenmarkt für Privatkunden, und der Begriff "EA" hat zumindest für Hunderttausende von Menschen eine Bedeutung.


Und von dem, was ich davon gesehen habe, sieht MQL4 ziemlich genau so aus wie C++

Es gibt praktisch zwei Versionen der MQL4-Sprache. Diejenige, die seit 9 Jahren existiert, hat keine Klassen oder Objekte und ähnelt daher eher C als C++. Andererseits hat sie keine Zeiger oder explizite Speicherzuweisung.

Die neue Version von MT4 und MQL4 - die am kommenden Montag veröffentlicht werden soll - fügt Klassen hinzu, aber wiederum ohne explizite Speicherzuweisung und -verwaltung. Es ist fraglich, ob das mehr wie C++ oder mehr wie Javascript ist, aber ohne Duck-Typing und Lambda-Funktionen usw.


Im Grunde möchte ich, dass mein Programm in der Lage ist, in den Arbeitsspeicher meines Computers die folgenden [...]

Um die Dinge etwas zu vereinfachen, macht die Plattform dies automatisch für Sie, und Sie haben keine einfache Möglichkeit, ihr Standardverhalten außer Kraft zu setzen. Externe Preisdaten herunterzuladen und sie dann innerhalb von MQL4 zu manipulieren - insbesondere mit dem traditionellen MQL4 und nicht mit der neuen erweiterten Version - ist nicht schön.

Sie können aktuelle Preise abrufen und historische Preise für alle Zeitrahmen, die die Plattform unterstützt, leicht manipulieren: M1, M5, M15 usw., aber nicht M3, H2 usw.


Hoch-, Tief-, Eröffnungs- und Schlussdaten für Kauf- UND Verkaufskurse (da der Wert des Spreads variieren kann)

Der Spread kann in der Tat variieren, aber eine der charmanten Eigenheiten der MT4-Plattform ist, dass sie nur historische Geldkurse liefert. (Aktuelle Preise und die aktuelle Spanne sind natürlich verfügbar.)


Ich möchte auch den Gesamtwert des Kontos bei Auflösung herunterladen [...] die Gesamtzahl der Positionen und die Größe [...], aber mein Kontowert wird in Dollar sein.

Diese Daten werden von der Plattform ständig gestreamt. Es gibt kein explizites "Herunterladen" dieser Daten. Zum Beispiel hat der MQL4-Code über die Funktion AccountEquity() ständig Zugriff auf das aktuelle Eigenkapital des Kontos. Offene Positionen werden automatisch in Ihrer Depotwährung gemeldet.


Angenommen, der EUR/USD-Kurs für den Kauf liegt bei 1,3500 und ich habe eine Limit-Order zum Kauf bei 1,3501, werde ich dann 1,3501 oder 1,3500 zahlen?

Das hängt vom Makler ab, aber im Großen und Ganzen akzeptiert die Plattform/der Makler einfach keine Limit-Order zum oder über dem aktuellen BBO. Mir fällt auf Anhieb keine Ausnahme dazu ein.


ob es sich im Allgemeinen um mehr als eine Datei (mit der Erweiterung mql4?) handelt, wie es in C++ der Fall sein kann, oder ob es sich im Allgemeinen nur um eine einzige mql4-Datei handelt

Generell kann ein Projekt nur aus einer .mq4-Datei bestehen, aber es kann mehrere #included .mqh-Dateien geben. Daher können Sie gemeinsame Code-Bibliotheken haben und diese zwischen Projekten wiederverwenden. Was nicht geht, sind mehrere .mq4-Dateien, die pari passu existieren, d.h. die zusammen als Teil desselben Projekts kompiliert werden. Trotz der Ursprünge von MQL4 in C ist die Struktur eines typischen Großprojekts anders: eine .mq4-Datei, plus eine oder mehrere Bibliotheken verschiedener Art (vorkompiliert oder #included).


Dann verwendet die Handelsplattform den Maschinencode oder was auch immer vom Compiler erzeugt wird.

Der Compiler erzeugt eine Art Byte-Code/p-Code/wie auch immer Sie es nennen wollen, und keinen Maschinencode. Sie können .mq4-Dateien explizit kompilieren, oder Sie können sie in den entsprechenden Ordner der Software legen und sie werden automatisch kompiliert und beim nächsten Start zur Verfügung gestellt.


Wenn jemand dies tun würde, nur um ein Dummy-Programm zu erstellen, das all diese Elemente enthält, wäre es nicht nur für mich sehr nützlich, sondern auch für andere, könnte ich mir vorstellen.

Das ist kein guter Zeitpunkt. Jeder in diesem Forum ist viel zu sehr damit beschäftigt, sich über das erste wirklich bedeutende Update von MQL4 seit 9 Jahren zu streiten.

 
zortharg: Ich habe gefragt, ob jemand eine schreiben würde.
Sie haben nur drei Möglichkeiten: Suchen Sie danach,lernen Sie zu programmieren, oder bezahlen Sie jemanden. Wir werden es nicht FÜR Sie programmieren. Wir sind bereit, Ihnen zu helfen, wenn Sie Ihren Versuch (unter Verwendung von SRC) und die Art Ihres Problems mitteilen.
 

Ich habe niemanden gebeten, etwas von kommerziellem Wert für mich zu produzieren. Ich verlange nicht, dass jemand "meine Methode FÜR mich programmiert", WHRoeder. Ich brauche nur einen Ansatzpunkt. Vielleicht kann ich aus dem Link, den Sie unter "Suche" angegeben haben, etwas herausfinden, aber ich hätte wirklich gerne ein einfaches "das ist es, was benötigt wird". Ich weiß nicht, wie das Programm eigentlich aussehen sollte. Ich weiß nicht, was unbedingt notwendig ist, um es zu erstellen. Wenn ich versuche, es selbst zu machen, ohne einen Anhaltspunkt zu haben, werde ich nur Compilerfehler bekommen, weil ich nicht einmal weiß, was fehlt. Und wenn ich etwas mache, das funktionieren sollte, werde ich es falsch initialisieren und nicht einmal wissen, ob ich es richtig gemacht habe. Ok, wie wäre es damit. Ein einfaches Beispiel. Etwas, bei dem Sie Ihr Geld verlieren würden, wenn Sie es im wirklichen Leben täten: ein Expert Advisor, der eine Position hält, die Wage*(Ihr Kontowert)*(die Differenz zwischen dem aktuellen Preis und dem Preis vor einer Zeiteinheit)/X ist, und X beginnt bei 1, aber jede Zeiteinheit wird X aktualisiert, um X=.9*X+.1*(aktueller Preis - Preis vor einer Zeiteinheit)^2 zu sein, und Wage ist ein benutzerdefinierter Parameter. Um die Anzahl der zu kaufenden oder zu verkaufenden Aktien zu bestimmen, muss das Programm auch feststellen, wie viele Positionen es bereits besitzt. Es ist also nur ein dummes Programm, aber es enthält so ziemlich alle Elemente, mit denen ich als Ausgangspunkt arbeiten müsste.

gchrmt4 Danke. Sie haben eine Menge meiner Fragen beantwortet. Aber wenn Sie sagen, dass man historische Kurse für alle Zeitrahmen, die die Plattform anbietet, leicht manipulieren kann, wie mache ich das? Gibt es eine Funktion ähnlich wie AccountEquity(), die einen Preis zu einem bestimmten Zeitpunkt zurückgibt, und Sie geben ihr die Zeiteinheiten vor und ob Sie Open Low High Close wollen und welche Art von Zeiteinheiten sie verwendet? Wird die Art der Zeiteinheiten durch die Art des Diagramms bestimmt, auf das Sie die Funktion anwenden? Das heißt, wenn Sie es auf einen 1-Minuten-Chart anwenden, bezieht sich "vor 1 Minute" auf "vor 1 Minute", aber wenn Sie es auf einen 5-Minuten-Chart anwenden, bezieht sich "vor 1 Minute" auf "vor 5 Minuten", oder ist der Zeitschritt im Programm selbst fest kodiert, anstatt dass er auf einen Chart angewendet wird? Und der aktuelle Spread, wie kann ich darauf zugreifen? Sie sagen, dass diese Dinge "streamen" und leicht zugänglich sind, aber wie wird darauf zugegriffen?

Ich danke Ihnen für jede Hilfe, die Sie mir geben können.

 
zortharg:
Gibt es eine Funktion ähnlich wie AccountEquity(), die einen Preis zu einem bestimmten Zeitpunkt zurückgibt, und Sie geben ihr die Zeiteinheiten vor und ob Sie open low high close wollen und welche Art von Zeiteinheiten sie verwendet? Wird die Art der Zeiteinheiten durch die Art des Diagramms bestimmt, auf das Sie die Funktion anwenden? Das heißt, wenn Sie es auf einen 1-Minuten-Chart anwenden, bezieht sich "vor 1 Minute" auf "vor 1 Minute", aber wenn Sie es auf einen 5-Minuten-Chart anwenden, bezieht sich "vor 1 Minute" auf "vor 5 Minuten", oder ist der Zeitschritt im Programm selbst fest kodiert, anstatt dass er auf einen Chart angewendet wird? Und der aktuelle Spread, wie kann ich darauf zugreifen? Sie sagen, diese Dinge sind "streaming" und leicht zugänglich, aber wie wird darauf zugegriffen?

Ich danke Ihnen für jede Hilfe, die Sie mir zukommen lassen.

Es gibt eine ganze Familie von Zeitreihenfunktionen. Zum Beispiel liefert iHigh("USDJPY", PERIOD_H1, 2) den Höchststand des USDJPY H1-Balkens, der 2 Balken zurückliegt (wobei der aktuell laufende Balken #0 ist). Es gibt Funktionen zur Umwandlung von Zeiten in Balkenindizes.

Der aktuelle Spread ist auf verschiedene Weise verfügbar. Die einfachste ist Ask - Bid (die Ihnen den Spread für das Symbol liefert, auf dessen Chart Ihr Code läuft). Der Spread für ein anderes Symbol als das aktuelle Diagramm ist über verschiedene Wege verfügbar und wird in verschiedenen Begriffen ausgedrückt, z. B. MarketInfo("Symbol", MODE_ASK) - MarketInfo("Symbol", MODE_BID) oder MarketInfo("Symbol", MODE_SPREAD)

 

@zortharg

Es gibt so etwas wie Dokumentation hier (teilweise veraltet): docs.mql4.com/

und hier (demnächst, teilweise nicht anwendbar): mql5.com/de/docs


Dort finden Sie alles, was Sie schon immer wissen wollten; außerdem gibt es Beispiele im Terminal selbst. Beispiele für Skripte, Expert Advisors und Indikatoren. Und Sie können auch DLLs importieren, um Dinge zu tun, die über MQL hinausgehen.

Wenn Sie es von dort bekommen können, sind Sie bereit, und wenn nicht, nun...


 

Ich verstehe Ihr Anliegen, ein Arbeitsbeispiel für den Anfang ist sehr nützlich

https://www.mql5.com/en/code

Wenn Sie googeln, können Sie auch kostenlose Quellen für Expertenberater finden, von denen Sie lernen können.

Suchen Sie nach Code für einfache Aufgaben, gruppieren Sie diese in Funktionen und versuchen Sie, Ihren Code einfach und lesbar zu halten

start() {

   SearchOrders();
   DetectEnvironment();      
   UpdateIndicators();
   RiskAssessment();
   CalcVolume();
   if( EnterSignal() ) OpenOrder();
   if ( ExitSignal() ) CloseOrder();
   TrailingStop();
   DisplayInfos();

}
Grund der Beschwerde: