Mein Ansatz. Der Kern ist der Motor. - Seite 126
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
Wenn es MT4 ist, dann ja.
Es scheint, dass Sie OpenCL verwenden müssen, um die Last zu verringern. Aber MT4 hat sie nicht. Oder Sie können sich einfach damit abfinden.
Eine andere Variante besteht darin, dem Benutzer die Möglichkeit zu geben, die Geschwindigkeit des Neuaufbaus der Animation einzustellen. In diesem Fall kann er die Belastung des Prozessors bei Bedarf verringern und bei Bedarf wieder erhöhen.
Es sieht so aus, als müssten Sie OpenCL verwenden, um die Last zu verringern. Aber MT4 hat sie nicht. Oder sich einfach damit abfinden.
Eine weitere Möglichkeit besteht darin, dem Benutzer die Möglichkeit zu geben, die Geschwindigkeit des Neuaufbaus der Animation einzustellen. In diesem Fall kann er die Belastung des Prozessors bei Bedarf verringern und bei Bedarf wieder erhöhen.
Es ist interessant, in MT5 die Arbeit von zwei EAs zu testen, die auf verschiedenen Fenstern installiert sind, aber nur mit den Ressourcen eines Fensters arbeiten. Denn jeder EA hat seinen eigenen Thread und wie Sie wissen, können Sie nicht mehr als einen Expert Advisor in einem Fenster platzieren.
In MT4 hat jeder EA auch seinen eigenen Thread. Wenn ich mich nicht täusche...
Das Gewinde ist unterschiedlich, aber der Prozessor ist für alle derselbe...
Ich denke, das ist der Grund für die Erstellung eines Diagramms.
Es gibt noch eine weitere Nuance.
Wenn die Animation zyklisch ist (wie ein Gif), müssen Sie das Pixel-Array nicht ständig neu initialisieren. Sie können einen Zyklus des Zeichnens der Animation durchlaufen und jedes Bild in einer Ressource speichern. Als Nächstes schalten Sie einfach das Bild um. Teilweise habe ich dies umgesetzt und dadurch mehrere Animationsgeschwindigkeiten erreicht (am Anfang war die Animationsgeschwindigkeit schrecklich, weil ich jedes Mal das Originalbild neu gezeichnet habe und dann ein neues Bild darauf gezeichnet habe).
In MT4 hat jeder EA auch seinen eigenen Thread. Wenn ich mich nicht täusche...
Das Gewinde ist unterschiedlich, aber der Prozessor ist für alle derselbe...
Ich glaube, deshalb haben sie eine grafische Karte erstellt.
Um den Unterschied zwischen MT4 und MT5 zu verdeutlichen, lassen Sie diesen Code auf beiden Plattformen laufen (der Code funktioniert dort und dort) und Sie werden sehen, dass er auf MT4 viel langsamer läuft:
Um den Unterschied zwischen MT4 und MT5 zu verdeutlichen, führen Sie diesen Code auf beiden Plattformen aus (der Code funktioniert dort und dort) und Sie werden sehen, dass er im MT4 um eine Größenordnung langsamer ist:
Ja, legen Sie sie dort und dort ab. Der Unterschied beträgt etwa den Faktor 10. Genau, denn in MT5 werden die Arrays 10 Mal oder schneller initialisiert. Ich habe es überprüft.
Aber auch auf MT4 sollte alles viel schneller gehen. Schließlich wird das Bild nur neu gezeichnet. Anders verhält es sich, wenn Sie die Daten wiederholt in einem Array verarbeiten.
Ich weiß nicht, warum es auf MT4 so langsam ist.
Vielleicht liegt es aber auch daran, dass Sie JEDES Pixel im gesamten Canvas-Bereich in der Größe des Diagramms neu initialisieren.
In meiner Animation werden nur einzelne Bereiche gezeichnet, und der Hauptteil des Bildes wird vollständig aus der Ressource übernommen. Der Hauptteil entfällt, und das Bild wird vollständig erstellt. Daher verlangsamt sie sich.
Das liegt an der Größe der Zeichnung.
Vielleicht geht es aber auch darum, dass Sie JEDES Pixel im gesamten Canvas-Bereich in der Größe des Diagramms neu initialisieren.
In meiner Animation werden nur einzelne Bereiche gezeichnet, und der Hauptteil des Bildes wird vollständig aus der Ressource übernommen. Der Hauptteil entfällt, und das Bild wird vollständig erstellt. Deshalb verlangsamt sie sich.
Das liegt an der Größe der Zeichnung.
Was für ein Unterschied. Dies ist ein absichtlich extremes Beispiel, das die Vorteile von mt5 bei der Geschwindigkeit des Kanvas deutlich macht. Und dieses Thema ist in Ihrem Kopf archiviert. Deshalb sage ich schon seit langem: Gehen Sie zu MQL5.
Die Nachteile von MT4, sind das, was in der Entwicklung benötigt wird. Sie müssen nicht vor ihnen weglaufen. Sie zwingen Sie zum Nachdenken und zur Verbesserung Ihrer Lösungen.
Auf MT5 müssen Sie sich auch nicht besonders anstrengen. Alles funktioniert auch so schon schnell genug. Daher ist die Umstellung auf MT5 in der letzten Phase geplant.
Schließlich ist die dynamische Tabelle fertig. Ich muss sagen, dass es nicht einfach war. Es stellt sich heraus, dass es eine Menge Nuancen gibt.
Außerdem ist diese Tabelle "bedingt" dynamisch. Das heißt, die maximale Anzahl von Zeilen ist vorgegeben. Es war noch nicht möglich, "absolut" dynamisch zu sein.
Diese Tabelle hat 20 mögliche Zeilen. Es können also 20 offene Positionen angezeigt werden. Wir könnten noch mehr machen, aber das ist erst einmal nur eine Demonstration.
Klicken Sie zur Ansicht.
Hier sind die Verbindungsdateien (in der Aufnahme), die Engine (im Indikatorenordner) und die test.EA (im Expertenordner):
Peter, es tut mir leid, aber Ihre Arbeit wird nicht akzeptiert, da das, was Sie geschickt haben, ein seltener Hackjob ist. Es tut mir leid, aber es scheint, dass ich der Einzige bin, der das, was Sie geschickt haben, überprüft hat, und außer mir wird es niemand überprüfen.
Die Aufgabenstellung lautete also der Reihe nach wie folgt:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Mein Ansatz. Kern - Motor.
Vasiliy Sokolov, 2018.12.26 13:29
Peter, hier ist die Aufgabe. Erstellen Sie ein Panel, das die aktuellen Auftragseröffnungen im MT4 anzeigt. Es ist nicht nötig, eine vollständige Kopie des Systempanels zu erstellen, sondern es wird nur eine einfache Tabelle mit den grundlegenden Eigenschaften der offenen Aufträge angezeigt: Eröffnungskurs, Richtung, Gewinn. Der Rest ist Ihnen überlassen. Das Wichtigste ist, dass mit dem Abschluss eines Auftrags auch dessen Anzeige in Ihrer Tabelle verschwindet. Umgekehrt würde sie in dieser Tabelle erscheinen, wenn ein neuer Auftrag eröffnet wird.
Was ich stattdessen sehe:
Erstens können Geschäfte in Ihrem Panel nur durch Klicken auf die Schaltfläche Kaufen/Verkaufen eröffnet werden. Wenn eine Position über das Standardfenster eröffnet wird, wird der Handel nicht angezeigt.
Zweitens werden einige Aufträge mit leeren Werten angezeigt. Sie sind in der Tabelle vorhanden, aber die Zeilen sind leer.
Drittens (und das ist wirklich gruselig), wenn wir einen Auftrag über den Standarddialog schließen, verschwindet er nicht aus der Tabelle. Aber das Traurigste ist, dass, wenn Sie das Panel neu laden, die geschlossenen Aufträge wieder als angeblich offen angezeigt werden! Was ist das? Warum speichern Sie irrelevante Informationen irgendwo und versuchen dann, sie zu laden?
Viertens: Was zum Teufel sind 20 Aufträge? Ich habe kein Wort über diese Einschränkung in meinem Auftrag! Das wurde absichtlich so gemacht, um zu testen, ob Ihr Motor mit einer dynamischen und bisher unbekannten Umgebung arbeiten kann. Der Auftrag wurde nicht willkürlich ausgewählt, sondern Sie haben meine Anforderungen so geändert, dass er alle "scharfen Ecken" Ihres Motors verdeckt. Aber die Aufgabe wurde gestellt, um diese Winkel zu zeigen.
Fünftens brauchen Sie das nicht zu tun, wenn Sie einen Stop-Loss oder Take-Profit setzen. Lassen Sie diese Felder leer.
Und ja, die Schaltfläche zum Schließen der Position (Kreuz) in Ihrem Panel funktioniert auch nicht.
Kurz gesagt, Peter. Es tut mir leid, aber was Sie mir geschickt haben, ist ein totaler Reinfall. Reparieren Sie es bitte gemäß der Spezifikation.
Ich werde die Aufgabe noch einmal erläutern, damit es keine Fragen gibt:
- Die Tabelle ist dynamisch und zeigt die gleichen Aufträge wie auf der Registerkarte Handel. Wenn keine Bestellungen auf der Registerkarte vorhanden sind, werden sie auch nicht in der Tabelle angezeigt.
- Die Anzahl der angezeigten Aufträge in Ihrer Tabelle sollte alles sein. Es gibt keine Einschränkungen von oben.
- Wenn Sie einen Auftrag über das Standarddialogfenster öffnen, sollte der Auftrag in Ihrer Tabelle erscheinen. Das Abschließen des Auftrags mit den üblichen Mitteln sollte dazu führen, dass der Auftrag in Ihrer Tabelle verschwindet.
- Ein nicht konsistenter Zustand ist nicht akzeptabel! Wenn Ihre Tabelle etwas anzeigt und die Registerkarte "Handel" etwas anderes, ist dies ein Fehler.
Bislang ein fettes No-Go. Ich warte auf Ihre Verfeinerungen. Und keine 3D-Renderings, bis Sie es herausgefunden haben!