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
Die Idee, MT5 und Quick zu verknüpfen, habe ich komplett verworfen, ich habe mich auf Quick (DEE-Server + trans2quik.dll) beschränkt.
Ich erwäge, dieses Programm zu realisieren.
Selector1 holt ständig Daten vom DDE-Server ab und "speichert" sie im Storage und ruft die OnTick-Funktion im entsprechenden Child auf.
Beim Aufruf von GetStorageData sollte der DDE-Server angehalten werden und die Daten sollten in Storage gespeichert werden.
Wenn Selector2 den Callback aufruft, sollten der DDE-Server und die Speicheraufzeichnung ausgesetzt und der GetStorageData-Aufruf deaktiviert werden.
D.h. Selektor2 hat hohe Priorität, GetStorageData normale und Selektor1 niedrige.
Fragen:
Wie kann ich Selector1, Selector2 und GetStorageData zuverlässig synchronisieren?
Vielleicht gibt es konkrete Beispiele für eine solche Synchronisation (ich habe so etwas nie implementiert)?
Die Idee, MT5 und Quick zu verbinden, wurde aufgegeben und nur Quick verwendet (DEE-Server + trans2quik.dll)
Ich erwäge, dieses Programm zu realisieren.
1. die sehr richtige Entscheidung, nur Quick zu verlassen.
2. Die Verbindung über DEE ist eine sehr umstrittene Lösung. Viele Leute sagen, dass DDE instabil ist, aber ich weiß es nicht.
Eine bessere und vielseitigere Lösung ist meiner Meinung nach eine Lua-DLL-Anwendung. Ich verwende diese Option. Das ist natürlich Sache des Eigentümers.
1. Die Entscheidung, nur den Quick zu behalten, war richtig.
2. Die Kommunikation über die DDE ist eine sehr umstrittene Entscheidung. Viele Leute sagen, dass DDE instabil ist, aber ich weiß es nicht.
Eine bessere und vielseitigere Lösung ist meiner Meinung nach eine Lua-DLL-Anwendung. Ich verwende diese Option. Das hängt natürlich vom Gastgeber ab.
Ich schrieb vor langer Zeit einen DDE-Server für Quick - funktioniert reibungslos und schnell genug (nicht langsamer als Lua - DLL),
und es ist überhaupt nicht notwendig, zusätzlichen Code für Lua und DDL-Datenempfänger zu schreiben.
Hinzugefügt
Tatsächlich habe ich das im Diagramm gezeigte Programm bereits geschrieben (und es funktioniert), bin aber auf ein Synchronisierungsproblem gestoßen.
Ich schrieb vor langer Zeit einen DDE-Server für Quick - funktioniert reibungslos und schnell genug (nicht langsamer als Lua - DLL),
und es ist überhaupt nicht nötig, zusätzlichen Code in Lua zu schreiben.
Da ich noch nie mit DDE gearbeitet habe, stellt sich die Frage: Wie wird DDE hergestellt? Ich denke, es ist notwendig, eine Tabelle mit Daten zu erstellen und sie dann über DDE laufen zu lassen.
Es gibt eine Verwechslung mit Ereignissen. Etwas hat sich geändert, und es sieht so aus, als ob die gesamte Tabelle an DDE übergeben wird. Oder liege ich da falsch?
Nehmen wir an, ich liege falsch. Wie kann man dann das Ereignis auf der Empfangsseite identifizieren?
Tatsächlich habe ich das im Diagramm gezeigte Programm bereits geschrieben (und es funktioniert), aber ich bin auf ein Synchronisierungsproblem gestoßen.
Was mit was synchronisieren?
Mit Lua wird dieses Problem durch Rückrufe von der DLL auf beliebige Daten gelöst.
Da ich mich nicht mit der DDE beschäftigt habe, stellt sich die Frage, wie die DDE hergestellt wird. Es scheint, dass Sie eine Tabelle mit Daten erstellen und diese dann über DDE laufen lassen müssen.
Es gibt eine Verwechslung mit Ereignissen. Etwas hat sich geändert, und es sieht so aus, als ob die gesamte Tabelle an DDE übergeben wird. Oder liege ich da falsch?
Nehmen wir an, ich liege falsch. Wie kann man dann das Ereignis auf der Empfangsseite identifizieren?
In Quick wird die gewünschte Tabelle für die Ausgabe erzeugt.
Schließlich starten wir unsere eigene Anwendung mit dem DDE-Server und geben diese Tabelle über DDE aus.
Bei der ersten Ausgabe von Quick wird die gesamte Tabelle an DEE gesendet, dann nur die Zeile aus der Tabelle
in denen Änderungen aufgetreten sind.
In der Tabelle selbst (sie wird vollständig übertragen) gibt es (in meinem Fall) einen Werkzeugnamen - das ist der Bezeichner
Der DDE-Server selbst besteht aus ein paar Zeilen (ich habe ihn in Pascal, aber es gibt viele Beispiele im Internet in anderen Sprachen)
Ein untergeordnetes Fenster wird durch den Werkzeugnamen erstellt (wie in MT 5)
Womit?
Ich habe das Problem im Thema Diagramm beschrieben
Ich habe das Problem in dem Diagrammthema beschrieben
Entschuldigung, das habe ich nicht bemerkt. Wenn ich es richtig verstanden habe:
Imho besteht die Lösung darin, ein DBMS alsSpeicher zu verwenden, beispielsweise MS SQL Server. Dies könnte eine Teillösung sein.
Die zweite Möglichkeit ist die Verwendung von Zwischenpuffern, wie z. B. "last in, first out". Nun, und die Trennung der Fäden.
Dann muss nichts mehr angehalten werden, alles wird einfach in Puffer geschrieben. Nun, und DBMS hat einen Mehrbenutzerzugang.
Ich wende all dies an, aber ich bin seit 6 Jahren nicht mehr mit Pascal befreundet.
PS Es heißt, man könne NET-Bibliotheken von Pascal aus verwenden. Für die Verwendung alsSpeicher könnte es sinnvoll sein,System.Data,System.Data.DataSet undSystem.Data.DataTable. Wenn ich mich recht erinnere, gab es kein Problem mit dem Mehrbenutzerzugriff inDataTable.
ZZY2 Jetzt versuche ich, SQLite als Datenbank zu verwenden, habe aber noch keine definitiven Ergebnisse. Und es ist sicherlich kein DBMS, aber in einer abgespeckten Form ist der Mehrbenutzerzugriff möglich, und es ist möglich, eine Datenbank im Speicher zu erstellen.
Nein, ich muss nur 3 Threads synchronisieren (im Grunde einen Synchronizer schreiben), aber
Ich weiß nicht, wie das geht.