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

 
Valeriy Yastremskiy:

Ich verstehe das, aber mql5 ist leider schwer zu verstehen. Ich stimme fxsaber zu, ich denke, es ist einfacher, 4 zu verwenden und für die Optimierung und andere Dinge sollten wir 5 verwenden. Generell würde ich gerne wissen, ob es jemanden gibt, der mql5 ohne OOP-Praxis gemeistert hat? Natürlich ist die Zeit nach C++ 4 nicht relevant, auch wenn ich vielleicht falsch liege.

Die beiden Sprachen sind absolut identisch. Weder mehr noch weniger. Und OOP (von dem alle eingeschüchtert sind) ist in beiden genau dasselbe. Sie wussten es nicht? Haben Sie im Internet Horrorgeschichten gelesen und auf YouTube Blogger beobachtet, die "gut, weise und ewig säen"? Die klugerweise Unsinn reden und die Leute absichtlich von MQL5 abschrecken.

Ich muss Sie leider enttäuschen - beide Sprachen sind genau gleich. Sowohl in Bezug auf die Verständlichkeit als auch auf die Funktionen und das Vorhandensein von OOP.
Aber MQL5 hat mehr Möglichkeiten.

 
Alexey Viktorov:

Ich habe den Spanier zu Ihnen geschickt, um ihn zu erschrecken. Machen Sie ihm ein Zeichen - ich habe keine Zeit. Es ist auf Englisch. Ich erkläre es Ihnen, wenn es etwas gibt. Aber... du wirst es herausfinden.

 
Alexey Viktorov:

Ich erinnere mich nicht mehr an die Antwort von Artem und werde auch nicht danach suchen. Alle Codes in seinen Artikeln sind entweder mehrterminal oder zwei Versionen, für mql5 und mql4. Ich habe diese Versionen auf mql4 überprüft und alles funktioniert einwandfrei.

Ja, diese Artikel sind schwer zu verstehen, aber es lohnt sich, wenn man nicht älter ist als ich. Und ich bin für einen Programmierer obszön alt.

Die andere Variante ist einfacher, aber auch viel langsamer. Schreiben Sie das Auftragsticket in ein Array, und wählen Sie anhand dieses Arrays den Auftrag aus und überprüfen Sie den Zeitpunkt des Auftragsabschlusses. Ist der Wert größer als Null, bedeutet dies, dass der Auftrag abgeschlossen ist. Wenn der Kommentar eines geschlossenen Auftrags die Buchstaben "sl" enthält, bedeutet dies, dass der Auftrag mit einem Stop geschlossen wurde. Wenn der Auftrag abgeschlossen ist, wird er aus dem Array gelöscht. Oder es wird, nachdem die Reihe abgeschlossen ist, mit den verbleibenden offenen Aufträgen aufgefüllt. Die Vorstellungskraft fliegt im Allgemeinen.

Welche Option Sie wählen, bleibt Ihnen überlassen. Und lesen Sie einige meiner Beiträge zu Kovalevs Lehrbuch. Das Lehrbuch schlägt vor, int start() zu schreiben, während das neuere mql4 void OnTick() verlangt.

Indikatoren und Skripte entnehmen Sie bitte der Dokumentation. Übrigens ist es viel einfacher, Indikatoren in aktualisiertem mql4 zu schreiben, als es war, als Sergey dieses Tutorial schrieb.

Ich danke Ihnen vielmals. Ihre Informationen waren für mich sehr wertvoll. Insbesondere über die Funktion start().

 
Alexey Viktorov:

Ich erinnere mich nicht an die Antwort von Artem, und ich werde sie auch nicht suchen, aber ich kann mir denken, was er geantwortet haben könnte. ...

Hier ist meine Antwort. Mit einem klaren Hinweis darauf, was zu tun ist:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes

Artyom Trishkin, 2020.04.28 08:22

Die Erklärung ist einfach: Sie müssen die Anzahl der Aufträge und Positionen überwachen und sie mit dem vorherigen Stand vergleichen. Wenn wir beim vorherigen Tick 12 Positionen und beim aktuellen Tick 8 Positionen haben, haben wir eine Veränderung von 4 Positionen. Daher sollten wir die letzten vier Positionen (zum Zeitpunkt des Börsenschlusses) betrachten, um zu verstehen, was mit ihnen geschehen ist.

Aber nach dem beigefügten Code zu urteilen, in dem "Wunder" geschrieben stehen, brauchen Sie wirklich keine Erklärung in Worten. Aber sie ist da, um zu helfen, nicht um für sie zu schreiben.


 
ANDREY:

Ich danke Ihnen vielmals. Ihre Informationen waren für mich sehr wertvoll. Insbesondere über die Funktion start()

Die gute Sache ist, im Editor zu erstellen, was wir brauchen, EA, Skript, Indikator und der Editor wird eine Vorlage mit den richtigen Feldern erstellen.
 
Artyom Trishkin:

Und was macht Ihr Code, außer dass er zwei Verkaufspositionen eröffnet, jede zu einer genau festgelegten Zeit, und den Zeitpunkt der Eröffnung der letzten Position ausgibt, wenn dies erlaubt ist? Alles. Mit uninitialized Variablen, die zu "Wunder" in der Code-Verhalten führen kann, und sehr, sehr alt start() Handler, die aus einem verstaubten Regal mit Jahren von Spinnweben gezogen wurde, und auf dem Markt (eines Tages wollen Sie etwas zu verkaufen) mit alten Handler wird nie verpassen Validator - es wird sagen, dass das falsche Programm Typ.

Danke für den Beitrag. Beim Paar GBP/USD habe ich beim Testen ein Muster im Preisverhalten gefunden. Dieses Muster mit kleinen Korrekturen, wie auch mit kleinen Drawdowns, führt Balance Chart seit 2008 und bis zum aktuellen Moment stetig nach oben. Wie ich schon sagte, sind die Korrekturen und Rückgänge im Gleichgewichtschart nicht groß, aber sie können mehrere Monate andauern.
Ich begann, verschiedene Varianten dieses Musters zu testen und griff zu diesem Zweck auf die Optimierung zurück. Es stellte sich jedoch heraus, dass die Optimierung mit mehreren Parametern auf einmal sehr viel Zeit in Anspruch nimmt. In meinem Fall hat es etwa ein Jahr gedauert. Ein genetischer Algorithmus ist nichts für mich.
Dann kam ich auf die Idee, dass Tests und Optimierungen mit Hilfe von richtig formuliertem Code, der Funktion Pront() und einer Excel-Tabelle schneller durchgeführt werden können.

Der folgende Code ist nur ein Versuch, einen solchen Code zu schreiben. Ich werde diesen Code weiter verbessern. Aber ich stieß auf ein Problem, für dessen Lösung mir das Wissen fehlte.
Bitte beurteilen Sie mich und meinen Code nicht sehr streng.... Ich bin ein Anfänger, der gerade erst begonnen hat, die Grundlagen des Programmierens zu verstehen und wenig mehr. Aber ich nehme Kritik gelassen hin und nehme vor allem an konstruktiver Kritik keinen Anstoß......

Ich danke Ihnen für Ihre Hilfe.

int s1,Mn,a,CH;
double Hay,Lou=Bid,Nm_PL[700]={0},PrS,DL=0.0030,X;
int start()
{
int ot = OrdersTotal();                                         
int Ht = OrdersHistoryTotal();
////******************************************************************
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                             
if (X!=OrderTicket( ))
{
Mn=OrderMagicNumber();CH=TimeHour(OrderOpenTime());PrS=OrderProfit( );Nm_PL[CH+Mn*24]=Nm_PL[CH+Mn*24]+PrS;
Print("----------------- ПРОФИТ-----------------------=",CH,"    Ном орд.(1-26)   ",Mn," ТП    ",PrS," ФИН.РЕЗУЛЬТ.   ",Nm_PL[CH+Mn*24]," НОМ. ИНДЕКСА   ",Mn*24);X=OrderTicket();
}
////******************************************************************
if (Bid < Lou)
{
Lou=Bid;
}
//=======================
if (Bid > Hay)
{
Hay=Bid;
}
////=======================
if (Bid - Lou > DL&& Lou!=0)
{
for(int c=0; c<=500;c+=20) 
{
a++;
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+0.0030+c*Point,Ask-0.0010-c*Point,"300",a );
}
Lou=Bid;
Hay=Bid;
a=0;
s1=0;
}
return(0);
}

Wenn zwei oder mehr Orders durch Stop oder Take auf demselben Tick geschlossen werden, druckt das Programm Print() erst nach der letzten Order, die auf diesem Tick geschlossen wurde. Ich brauche Print(), nachdem jede Bestellung abgeschlossen ist. Ich weiß nicht, wie ich das erreichen kann. Aber wenn ich den erforderlichen Code sehe, verstehe ich ihn sofort und kann ihn mir merken.

Nachstehend finden Sie ein Beispiel für mein Problem.


Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • www.mql5.com
Введение Генетический алгоритм (ГА) относится к эвристическим алгоритмам (ЭА), который даёт приемлемое решение задачи в большинстве практически значимых случаев, однако при этом правильность решения математически не доказана и применяют чаще всего для задач, аналитическое решение которых весьма затруднительно или вовсе невозможно. Классическим...
 
Valeriy Yastremskiy:
Das Gute ist, dass wir im Editor erstellen können, was wir brauchen, einen EA, ein Skript, einen Indikator und der Editor wird eine Vorlage mit den richtigen Feldern erstellen.

Ja, ich habe diese korrekten Felder bemerkt, d.h. neue Funktionen anstelle von START. Aber ich habe ihnen nicht viel Aufmerksamkeit geschenkt und START wie bisher zum Testen verwendet.
Ich weiß nicht, wo ich mehr Details über die letzten Updates von MQL4 lesen kann. Das Buch von Kovalev gefällt mir sehr gut, weil alle Informationen logisch aufgebaut und leicht verständlich sind. Und sie ist ausführlich genug, um alle notwendigen Details zu verstehen. Ich frage mich, warum er nicht das gleiche Lehrbuch für MQL5 geschrieben hat.

 
Artyom Trishkin:

Zwei absolut identische Sprachen. Weder mehr noch weniger. Und OOP (von dem alle eingeschüchtert sind) ist in beiden genau dasselbe. Sie wussten es nicht? Haben Sie im Internet Horrorgeschichten gelesen und auf YouTube Blogger beobachtet, die "gut, weise und ewig säen"? Die klugerweise Unsinn reden und die Leute absichtlich von MQL5 abschrecken.

Ich muss Sie leider enttäuschen - beide Sprachen sind genau gleich. Sowohl in Bezug auf die Verständlichkeit als auch auf die Funktionen und das Vorhandensein von OOP.
Aber MQL5 hat mehr Möglichkeiten.

Ja im Allgemeinen stimme ich zu, und OOP in 4ka froh))), aber in den Zugang von Anfängern in meiner Erfahrung Lehrbücher Kovalev, Zhdan auf 4ka und unverständlich Mishin auf 5ka und OOP. Ich weiß nicht, wie ich das verstehen soll. Egal, wie oft Sie die Verkapselung wiederholen, das Verständnis für Polyformismus wird nicht kommen. Und Sie wissen nicht, welche Artikel Sie zuerst lesen sollen. Und wo man nach was sucht. Deshalb ist bisher in der Codobase in ontik der Ausgang aus der Startfunktion zu finden )))))
 
ANDREY:

Ja, ich habe die richtigen Felder bemerkt, d. h. neue Funktionen anstelle von START. Aber ich habe ihnen nicht viel Aufmerksamkeit geschenkt, also habe ich START wie bisher zum Testen verwendet.
Ich weiß nicht, wo ich mehr Details über die letzten Updates von MQL4 lesen kann. Das Buch von Kovalev gefällt mir sehr gut, weil alle Informationen logisch aufgebaut und leicht verständlich sind. Und sie ist ausführlich genug, um alle notwendigen Details zu verstehen. Ich frage mich, warum er nicht das gleiche Lehrbuch für MQL5 geschrieben hat.

WieAlexey Viktorov sagte:Verstehen Sie die einfache Wahrheit, mql5 unterscheidet sich von mql4 nur in OrderSend() und einigen anderen Funktionen, an die ich mich nicht erinnere. Ein weiterer wichtiger Unterschied ist die Richtung der Indizierungvon Indikatorpuffern. Das Problem kann jedoch sehr schnell gelöst werden, aber man sollte sich an die neuen Funktionen gewöhnen. Das Erhalten der Indikatorwerte bleibt jedoch gleich.
OOP-Artikel für Anfänger haben geholfen. Und die Hilfe des Herausgebers.
 
ANDREY:

Wir danken Ihnen für Ihre Teilnahme.

...

Der folgende Code ist nur ein Versuch, einen solchen Code zu schreiben. Ich werde diesen Code in Zukunft verfeinern. Aber ich stieß auf ein Problem, für dessen Lösung mir das Wissen fehlte.
Bitte beurteilen Sie mich und meinen Code nicht sehr streng.... Ich bin ein Anfänger, der gerade erst begonnen hat, die Grundlagen des Programmierens zu verstehen und wenig mehr. Aber ich nehme Kritik gelassen hin und nehme vor allem an konstruktiver Kritik keinen Anstoß......

Ich danke Ihnen für Ihre Hilfe.

Wenn zwei oder mehr Orders durch Stop oder Take auf demselben Tick geschlossen werden, druckt das Programm Print() erst, nachdem die letzte Order auf diesem Tick geschlossen wurde. Ich brauche Print(), nachdem jede Bestellung abgeschlossen ist. Ich weiß nicht, wie ich das erreichen kann. Aber wenn ich den erforderlichen Code sehe, verstehe ich ihn sofort und kann ihn mir merken.

Nachstehend finden Sie ein Beispiel für mein Problem.


Ich habe Ihnen bereits geantwortet:

Die Erklärung in Worten: Sie müssen die Anzahl der Aufträge und Positionen überwachen und sie mit dem vorherigen Stand vergleichen. Wenn wir beim vorherigen Tick 12 Positionen hatten und beim aktuellen Tick 8, haben wir eine Veränderung von 4 Positionen. Dementsprechend sollten wir die letzten vier (zum Zeitpunkt der Schließung) Positionen betrachten, um zu sehen, was mit ihnen geschehen ist.

Sie nehmen den letzten Auftrag in der Liste:

int Ht = OrdersHistoryTotal();
////******************************************************************
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))

Und Sie müssen zunächst herausfinden, wie sehr sich der Stand der Auftragsliste geändert hat. Früher hatten Sie 12, jetzt haben Sie 8 - das ist eine Veränderung um 4 Aufträge. Dementsprechend müssen Sie alle vier Aufträge ausdrucken. Und Sie drucken immer nur den letzten Auftrag in der Liste.

Wie kann ich wissen, wie viel sich verändert hat? Wir müssen die Anzahl der Aufträge in eine Variable schreiben, zum Beispiel int last_total, wenn wir den EA ausführen. Vergleichen Sie dann bei jedem Tick OrdersTotal() mit last_total. Wenn sie NICHT gleich sind, ist das eine Veränderung. Schreiben Sie die Differenz zwischen OrdersTotal() und last_total in eine Variable, z. B. num_changes, und speichern Sie den neuen Stand von OrdersTotal() in last_total.
Hier kann es einige Feinheiten geben, zum Beispiel, wenn ein schwebender Auftrag ausgelöst wird. Aber im Moment sollten Sie erst einmal das tun, was Sie tun müssen.
Wenn Sie die Anzahl der ausstehenden Aufträge kennen, können Sie diese in der Historie nachsehen. Sie können jedoch auch die Überwachung von Aufträgen in der Liste der historischen Aufträge einschränken - führen Sie alle oben genannten Schritte für die Liste der historischen Aufträge und nicht für die Liste der Marktaufträge durch. Der Unterschied zwischen dem, was war, und dem, was geworden ist - das ist die Menge der Aufträge, die Sie analysieren müssen. Sie analysieren immer nur den letzten Auftrag in der Liste.

Dies kann jedoch nicht garantieren, dass der letzte Auftrag in der Historienliste auch der letzte abgeschlossene Auftrag ist. Auch dies ist eine Nuance, die berücksichtigt werden muss. Aber dann.

Grund der Beschwerde: