DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);
Wird dadurch nicht eine große Last erzeugt, wenn für jedes tick????? aufgerufen wird ?
Wäre es nicht logischer, sich in init mit der Datenbank zu verbinden und dann die Kennung für den Zugriff zu verwenden?
Wird dadurch nicht eine große Last erzeugt, wenn für jedes tick????? aufgerufen wird?
Wäre es nicht logischer, sich in init mit der Datenbank zu verbinden und dann den Bezeichner für den Zugriff zu verwenden?
Eugene, ich danke Ihnen für den Artikel. Interessantes Material über DBMS.
Ich habe ein solches Problem.
Ich habe MetaTrader5, x64, 975 build.
Wenn ich das Skript "MySQL-001" ausführe, erhalte ich einen Fehler:
RL 1 12:41:22.443 MySQL-001 'C:\Program Files\MetaTrader5\MQL5\libraries\MQLMySQL.dll' is not 64-bit version PG 1 12:41:22.474 MySQL-001 (AUDCAD.e,M1) Cannot load 'C:\Program Files\MetaTrader5\MQL5\libraries\MQLMySQL.dll' DK 2 12:41:23.677 MySQL-001 (AUDCAD.e,M1) Cannot call 'cMySqlVersion', '..\libraries\MQLMySQL.dll' is not loaded ID 2 12:41:23.677 MySQL-001 (AUDCAD.e,M1) unresolved import function call
Der Grund ist, wie ich verstehe, versucht das System, eine 64-Bit-Bibliothek zu laden...
Eugene, ich danke Ihnen für den Artikel. Interessantes Material über DBMS.
Ich habe ein solches Problem.
Ich habe MetaTrader5, x64, 975 build.
Wenn ich das Skript "MySQL-001" ausführe, erhalte ich einen Fehler:
Der Grund ist, wie ich verstehe, versucht das System, eine 64-Bit-Bibliothek zu laden...
Ja, das Projekt ist für x32 kompiliert, da ich hauptsächlich mit 32-Bit-Terminals arbeite. Ich verstehe das Problem, ich werde es in den nächsten Tagen kompilieren und unter MT5 x64 testen.
Vielen Dank für den Kommentar.
Version der Bibliothek für Metatrader 5 - x64
- Das Projekt MQLMySQL.DLL wurde für x64 neu kompiliert (die Quellen wurden nicht korrigiert).
- Die Standard LibMySQL.DLL stammt aus der letzten stabilen MySQL-Distribution v5.6.21 x64
Für diejenigen, die versucht haben, das Projekt unter MT5 x64 laufen zu lassen, können Sie nur den Inhalt des MQL5\Libraries-Verzeichnisses ersetzen. Der Quellcode der MQL-Programme muss nicht korrigiert oder neu kompiliert werden.
Nochmals vielen Dank an Denis (denkir) für seinen Hinweis, ich hatte die x64-Benutzer vergessen.
Ich habe es gelesen und geweint. Ich habe nichts gegen den Autor. Ich hoffe, er geht angemessen mit Kritik um. Wie auch immer:
1. Warum einen Wrapper in Form einer weiteren DLL schreiben, wenn alles auch ohne funktioniert? Die MQL-Sprache ist noch nicht so weit entwickelt, um solche Krücken zu schreiben, die sich oft in Harken verwandeln.
2. Warum wird als Ergebnis all dieser Arbeit nicht eine Klasse geschrieben, die alles Notwendige hat und die die Unzulänglichkeiten der Vorgänger, auf die sich der Autor bezieht, beseitigt?
3) Das möchte ich besonders hervorheben:
string SQL; SQL = "INSERT INTO EURUSD(Ask,Bid) VALUES (1.3601,1.3632);"; SQL = SQL + "INSERT INTO EURUSD(Ask,Bid) VALUES (1.3621,1.3643);"; SQL = SQL + "INSERT INTO EURUSD(Ask,Bid) VALUES (1.3605,1.3629);";
Eigentlich ist alles viel einfacher:
string SQL="INSERT INTO EURUSD(Ask,Bid) VALUES (1.3601,1.3632),(1.3621,1.3643),(1.3605,1.3629);";
Im Allgemeinen ist der Artikel im Stil von "Seht her, was ich kann!" geschrieben, anstatt von "Seht her und lernt, wie es gemacht werden sollte".
Ich habe es gelesen und geweint. Ich habe nichts gegen den Autor. Ich hoffe, er geht angemessen mit Kritik um. Wie auch immer:
1. Warum einen Wrapper in Form einer weiteren DLL schreiben, wenn alles auch ohne funktioniert? Die MQL-Sprache ist noch nicht so weit entwickelt, um solche Krücken zu schreiben, die sich oft in Harken verwandeln.
2. Warum wird als Ergebnis all dieser Arbeit nicht eine Klasse geschrieben, die alles Notwendige hat und die die Unzulänglichkeiten der Vorgänger, auf die sich der Autor bezieht, beseitigt?
3) Das möchte ich besonders hervorheben:
Eigentlich ist alles viel einfacher:
Im Allgemeinen ist der Artikel im Stil von "Seht her, was ich kann!" und nicht von "Seht her und lernt, wie es gemacht werden sollte" geschrieben.
Ich werde der Reihe nach antworten.
Ich muss sagen, dass das Projekt vor ziemlich langer Zeit begonnen wurde, als die MQL-Sprache noch nicht auf dem aktuellen Stand der Entwicklung war und MQL4 keine Klassen, keine Strukturen hatte.
Und die Softwarelösung musste sowohl für MQL4 als auch für MQL5 funktionieren, mit minimalen Kosten für den Übergang von MQL4 zu MQL5 (falls erforderlich). Das Projekt befand sich bis vor kurzem in der Abschlussphase.
Aus diesem Grund wurde das Projekt nicht als Klasse implementiert. Sie wollen eine Klasse? Kein Problem - schreiben Sie sie! Niemand verbietet es Ihnen.
Nun zu 3 INSERTs anstelle von einem. Ich habe es so geschrieben (und es ist urheberrechtlich geschützt), und zwar aus folgenden Gründen
- Es verstößt nicht gegen den allgemein akzeptierten Standard SQL'92, SQL'2000 (Ihre Variante - Besonderheiten der Syntax genau MySQL Bulk Insert);
- sie ist für einen unerfahrenen Programmierer in diesem Bereich leichter zu lesen und zu verstehen;
- Demonstration der Ausführung von genau 3 INSERT-Anweisungen, nicht nur einer.
Multi-Anweisungen können alle DML/DDL/DCL-Operationen umfassen, Ihr Beispiel beschränkt sich auf INSERT-Operationen in einer Tabelle.
P.S. Der Artikel wurde in einem "Take and use"-Stil geschrieben.
Danke! Ich werde Ihre Lösung in der Tiefe zu prüfen, kann es stabiler sein als auf MQL nur verlassen.
Nur FYI gibt es eine MQL4-only-Brücke, die ich vor einer Weile für MT4 Build 600+ geschrieben: https://www.mql5.com/de/code/11114
- Stimmen: 12
- 2014.02.10
- Sergey
- www.mql5.com
Danke! Ich werde Ihre Lösung in der Tiefe zu prüfen, kann es stabiler sein als auf MQL nur verlassen.
Nur zu Ihrer Information: Es gibt eine MQL4-Brücke, die ich vor einiger Zeit für MT4 Build 600+ geschrieben habe: https://www.mql5.com/de/code/11114
Danke, dass Sie sich die Zeit genommen haben, diesen Artikel zu lesen. Ich habe auch Ihre(https://www.mql5.com/de/code/11114) überprüft, ich habe eine solche Lösung vor langer Zeit gefunden (vor MT4 build 600) und ich mochte die Idee, MQL und MySQL freundlich zu machen. Aber nur eine Sache, die ich nicht verwenden möchte, ist Arrays, um die Daten aus der Datenbank zu erhalten. Das ist, warum ich diese Lösung für die Verwendung mit MT4 und MT5 gebaut habe.
Außerdem habe ich vergessen, das x64-basierte Projekt dem Artikel hinzuzufügen, also können Sie es hier herunterladen, in der Diskussion. An den Quellen wurde nichts geändert, nur die DLL wurde für x64 neu kompiliert.
Viel Glück!
Eugene
- Stimmen: 12
- 2014.02.10
- Sergey
- www.mql5.com
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Wie man auf die MySQL-Datenbank von MQL5 (MQL4) aus zugreift :
Dieser Beitrag beschreibt die Entwicklung einer Schnittstelle zwischen MQL und der MySQL-Datenbank, diskutiert bestehende praktische Lösungen und bietet eine bequemere Art der Implementierung einer Library zur Arbeit mit Datenbanken an. Zudem enthält er eine detaillierte Beschreibung der Funktionen, der Struktur der Schnittstelle, Beispiele und einige der spezifischen Merkmale der Arbeit mit MySQL. Was die Software-Lösungen angeht, finden sich im Anhang an diesen Beitrag die Dateien der dynamischen Libraries, Dokumentationen und Script-Beispiele für die MQL4 und MQL5 Sprachen.
Das Problem der Interaktion von MQL mit Datenbanken ist nicht neu, doch ist es immer noch ungelöst. Die Arbeit mit Datenbanken kann die Möglichkeiten von MetaTrader erheblich verbessern: Speicherung und Analyse der Kurshistorie, Kopieren von Handel von einer Handelsplattform auf eine andere, Lieferung von Notierungen/Handel in Echtzeit, aufwendige analytische Berechnungen auf Serverseite und/oder Verwendung eines Terminplans, Monitoring und remote Kontrolle von Konten mittels Web-Technologien.
Auf jeden Fall hat es viele Versuche gegeben, von der Kombination von MQL und MySQL zu profitieren. Einige dieser Lösungen sind in der CodeBase vorhanden.Jeder, der in seinen MQL-Projekten mit Datenbanken wird arbeiten müssen, hat daher zwei Optionen: entweder seine eigene Lösung zu entwickeln und jeden einzelnen Teil zu kennen oder irgendeine Lösung Dritter zu verwenden/anzupassen, sich mit ihrer Anwendung vertraut zu machen und alle Mängel selbst herauszufinden, die sein Projekt behindern würden.
Ich selbst war auch auf den Einsatz von Datenbanken angewiesen und habe die beiden Optionen bei der Entwicklung eines ziemlich komplexen Handelsroboters selbst erfahren müssen. Nachdem ich bestehende Projekte durchforstet und eine große Menge von Lösungen studiert habe, wurde mir klar, dass keine der gefundenen Implementierungen mir dabei helfen konnten, meinen Handelsroboter auf eine "professionelle Stufe" zu bringen.
Zudem bin ich auch auf absurde Lösungen gestoßen, wie z.B.: DML/DDL-Abläufe (Daten einfügen/aktualisieren/löschen, Objekte in einer Datenbank erzeugen/verwerfen) wurden mittels der Standard libmysql.dll-Datei ausgeführt, und die Datenauswahl (AUSWÄHLEN) war in der Tat als eine HTTP-Suchanfrage (mittels inet.dll) an ein PHP-Script implementiert, das sich auf dem Web-Server auf der MySQL-Serverseite befand. Die SQL-Suchanfragen waren in das PHP-Script geschrieben.
Mit anderen Worten: damit das Projekt laufen konnte, musste man die folgenden Komponenten verfügbar, konfiguriert und laufen haben: MySQL-Server, Apache/IIS Web-Server, PHP/ASP-Scripts auf Serverseite. Eine Kombination einer reichlich großen Zahl an Technologien. Das kann natürlich unter gewissen Umständen akzeptabel sein, doch wenn die einzige Aufgabe darin besteht, Daten aus der Datenbank auszuwählen - dann ist das Quatsch. Darüber hinaus ist die Unterstützung einer derart umständlichen Lösung auch noch zeitaufwendig.
Bei den meisten Lösungen gab es keine Probleme damit, Daten einzufügen, Objekte zu erzeugen und ähnlichem. Das Problem lag in der Datenauswahl, da die Daten an die sie aufrufende Umgebung geliefert werden sollten.
Die im Folgenden besprochene MQL <-> MySql-Schnittstelle beruht auf einem typischen Ansatz, der in Oracle PL/SQL, MS SQL T-SQL, AdoDB angewendet wird - der Arbeit mit Cursors. Die Schnittstelle wurde mit dem klaren Ziel vor Augen entwickelt, das Programmieren und die Pflege zu erleichtern und noch dazu mit möglichst wenig Komponenten arbeiten zu müssen. Sie ist implementiert als ein DLL-Wrapper für die Standard-Library libmysql.dll und als ein Set an Schnittstellenfunktionen als .mqh-Datei.
Autor: Eugeniy Lugovoy