Sunday 17 September 2017

Mysql Handelssystem


Sie haben sich umgesehen. Problem ist schon seit einer ganzen Weile. Keine guten Lösungen gefunden. Was wäre schön ist MQL4 Quelle für ANSI2UNICODE und UNICODE2ANSI. Ich möchte wirklich nicht verwenden, um Wrapper, die zu sein scheint die Lösung vorgeschlagen, dass ich eine Bibliothek für meine MySQL-Funktionen und ich möchte, dass es für MQL5 und MQL4 (Compiler-Richtlinien akzeptiert) und es hat diese Funktionen in MQL5 Kann ich Schlagen Sie vor, innerhalb des Zitats nicht zu antworten. Es ist sehr nervig. Vielen Dank. Sorry, dass die Lösung gefunden. Der Urheber der ANSI2UNICODE und UNICODE2ANSI hatte ein Update auf den ursprünglichen Code aus 2010 Schauen Sie in Kommentare Sehr einfach mit Compiler-Direktiven zu ändern, so dass der Code funktioniert sowohl in MQL4 und MQL5 Getestet OK, Fall geschlossen Viele vor vielen Jahren, als wir waren Kinder, in den Anfangsjahren der verrückten 90er Jahre, waren zwei Sprachen im Kampf in der Entwicklerwelt. Pascal, mit einer bodenständigen, leicht verständlichen Syntax, gut geeignet für eine hohe Sprache und C, mit einer kryptischen, aber schneller zu verwenden Syntax, gut geeignet für seine mittlere Ebene. C gewann die Schlacht, und. Deutsche Boerse erwirbt Devisenhandel Die Deutsche Börse erklärte am Sonntag, dass sie sicherlich das Deutschland-basierte Devisenhandelssystem 360T für 725 Millionen Euro (796 Millionen) erwerben wird. 360T ist eine Handvoll von Multi-Bank, Multi-User-Systeme, die tatsächlich geändert haben Devisenhandel in den vergangenen Jahren. Deutsche Börse besiegte US-Vermögenswerte sowie Geldwechsel-Treiber CME Group (CME. O) in der öffentlichen Versteigerung, nach Ressourcen mit dem Angebot vertraut. JANUAR 30 21:30 Buck Falls als Produktionsstätte Bloombergs Skala der Papiergeld versus 10 Peers gleiten nach seiner idealen zweitägigen Gewinn in 3 Wochen inmitten der Aufzeichnungen zeigen die Produktion sank um die meisten in mehr als einem Jahr im März sowie kommerzielle Fertigung fallen gelassen. Kunden Selbstvertrauen plötzlich sank im April auf den schwächsten Grad in 7 Monaten. Economic Records haben tatsächlich Experten Schätzungen seit Beginn des Monats, nach einem Bloomberg Financial Schock Verfahren verfolgt. JANUAR 30 21:30 Duping der Band-Aids in FX-Blog Derzeit ist der Moment, um Artikel Profi-Systeme freizugeben, die fit zu einem Markt, der verbleibt, um schnell einzuführen, während zusätzlich die Entwicklung rechts in eine reduzierte Marge Unternehmen. Der Blogpfosten Berufsrahmen im Bereich heute wurde geschaffen, als Sprachfirma die führende Methode zum Handel war. Mit digitalen Trading wechselnde Stimme für den Großteil der Käufe, professionelle Handhabung müssen zusätzlich Fortschritte. Leave a CommentMetaTrader 5 - Integration Zugriff auf die MySQL-Datenbank aus MQL5 (MQL4) Einführung Das Problem der Interaktion von MQL mit Datenbanken ist nicht neu, aber immer noch relevant. Die Verwendung von Datenbanken kann die Möglichkeiten von MetaTrader erheblich steigern: die Speicherung und Analyse der Preisentwicklung, das Kopieren von Trades von einer Handelsplattform zur anderen, die Bereitstellung von Quoteströcken in Echtzeit, umfangreiche analytische Berechnungen auf der Serverseite und einen Zeitplan, Überwachung und Fernsteuerung Von Konten mit Web-Technologien. Jedenfalls gab es viele Versuche, von der Kombination von MQL und MySQL zu profitieren, einige Lösungen sind in der CodeBase verfügbar. Zum Beispiel ist die MySQL-Wrapper-Bibliothek für MetaTrader 4 das Projekt, aus dem viele Programmierer ihre eigenen Entwicklungen mit weiteren Ergänzungen starten. Einer der Nachteile dieser Lösung ist meiner Meinung nach die Zuordnung von speziellen Arrays zum Lesen von Daten aus der Datenbank. Ein weiteres Projekt MySQL logger 1 - EA für MetaTrader 4 ist hoch spezialisiert, es verwendet keinen Wrapper, um auf die Standardbibliothek libmysql. dll zuzugreifen. Daher funktioniert es nicht in MetaTrader4 Build 600, da die Zeichencharaktertypen durch wchart ersetzt wurden. Und die Verwendung des int-Typs anstelle des TMYSQL-Strukturzeigers verursacht Speicherlecks im Projekt (der zugeordnete Speicher kann nicht frei gesteuert werden). Ein weiteres interessantes Projekt ist EAXMysql - MySQL-Bibliothek - Bibliothek für MetaTrader 5. Seine ziemlich gute Umsetzung. Die Liste der Nachteile, die der Autor angegeben hat, bedingt einige Einschränkungen für seine Verwendung. Jeder, der in seinen MQL-Projekten Datenbanken einsetzen muss, hat zwei Möglichkeiten: Entweder um eine eigene Lösung zu entwickeln und jeden einzelnen Teil davon zu kennen oder eine Drittanbieterlösung einzusetzen, zu lernen, wie man sie einsetzt und all ihre Fehler erkennen kann Ihr Projekt. Ich sah eine solche Notwendigkeit und die beiden Optionen bei der Entwicklung eines ziemlich komplexen Handelsroboter. Nach der Suche durch bestehende Projekte und studierte eine sehr große Anzahl von Lösungen, erkannte ich, dass nicht der gefundenen Implementierungen könnte dazu beitragen, meine Trading Roboter auf die professionelle Ebene. Darüber hinaus gab es auch absurde Lösungen, zum Beispiel: DMLDDL-Operationen (insertupdatedelete data, createrop-Objekte in der Datenbank) wurden mit dem Standard libmysql. dll durchgeführt und die Datenselektion (SELECT) tatsächlich als HTTP-Request implementiert (using inet. dll) Zu einem PHP-Skript, das sich auf dem Webserver auf der MySQL-Serverseite befindet. Die SQL-Abfragen wurden in das PHP-Skript geschrieben. Mit anderen Worten, um das Projekt laufen zu lassen, mussten die folgenden Komponenten verfügbar, konfiguriert und ausgeführt werden: MySQL Server, ApacheIIS Webserver, PHPASP Skripte auf der Serverseite. Eine Kombination vieler Technologien. Natürlich, in einigen Fällen kann dies akzeptabel sein, aber wenn die einzige Aufgabe ist es, Daten aus der Datenbank auswählen - das ist Quatsch. Darüber hinaus ist die Unterstützung einer derartigen umständlichen Lösung zeitaufwändig. Die meisten Lösungen hatten keine Probleme, Daten einzufügen, Objekte zu erzeugen und dergleichen. Das Problem war die Datenauswahl, da die Daten an die rufende Umgebung zurückgegeben werden sollten. Ich dachte, mit Arrays für diesen Zweck war unpraktisch und unpraktisch, nur weil im Laufe der Entwicklungdebuggingsupport des Hauptprojekts können Abfragen auf die Datenbank geändert werden, während Sie auch die korrekte Speicherzuordnung für die Arrays steuern sollten. Nun, das kann und muss vermieden werden. Das nachstehend diskutierte MQL-lt-gt-MySql-Interfaced basiert auf einem typischen Ansatz, der in Oracle PLSQL, MS SQL T-SQL, AdoDB - Verwendung von Cursoren verwendet wird. Diese Schnittstelle wurde entwickelt, die auf die einfache Programmierung und Wartung sowie auf ein Minimum an Komponenten abzielt. Es ist als DLL-Wrapper für die Standardbibliothek libmysql. dll und eine Reihe von Schnittstellenfunktionen als. mqh-Datei implementiert. 1. MQL lt-gt MySQL-Schnittstelle Die Interaktion zwischen dem MetaTrader-Terminal (über MQL-Programme) kann mit Hilfe der folgenden Komponenten realisiert werden: 1. Die Schnittstellenbibliothek MQLMySQL. mqh. Es wird dem Projekt über das Include-Verzeichnis hinzugefügt und kann nach Ihrem Geschmack geändert werden. Es enthält die Direktiven für den Import von Funktionen der dynamischen Bibliothek MQLMySQL. dll sowie Funktionen zum Aufrufen und Behandeln von Fehlern. 2. Die dynamische Bibliothek MQLMySQL. dll. Es ist ein Wrapper, um auf die Funktionalität der Standardbibliothek libmysql. dll zuzugreifen. Außerdem verarbeitet die MQLMySQL. dll-Bibliothek die Ergebnisse von Operationen und den gemeinsamen Zugriff auf die Datenbankverbindungen und Cursor. Es bedeutet, dass Sie mehrere Verbindungen zu einem Zeitpunkt (von einem oder mehreren MQL-Programmen) erstellen und verwenden können, halten Sie ein paar Cursor offen, mit Abfragen auf eine oder mehrere Datenbanken. Mutexes werden verwendet, um den Zugriff auf freigegebene Ressourcen zu trennen. 3. Die dynamische Standardbibliothek libmysql. dll ist ein nativer Zugriffstreiber. Sie können sie aus jeder MySQL-Datenbankverteilung in C: WindowsSytem32 oder ltTerminalgtMQL5Libraries (für MetaTrader 4 in ltTerminalgtMQL4Libraries) kopieren. In der Tat ist es verantwortlich für das Senden von Abfragen an die Datenbank und das Abrufen der Ergebnisse. Lässt auf den Hauptpunkten verweilen, wie zum Beispiel: Öffnen der Verbindung, Durchführen von DMLDDL-Abfragen und Datenselektion. 1.1. Öffnen und Schließen der Verbindung Die MySqlConnect-Funktion wurde zum Öffnen der Verbindung mit der MySQL-Datenbank implementiert: Diese Funktion implementiert die Verbindung zur Datenbank und gibt eine Verbindungskennung zurück. Diese ID wird benötigt, um die Datenbank abzufragen. Im Falle eines Verbindungsfehlers ist der Rückgabewert -1. Überprüfen Sie für die Fehlerdetails die Variablen MySQLErrorNumber und MySqlErrorDescription. Diese Funktion wird typischerweise aufgerufen, wenn das OnInit () - Ereignis im MQL-Programm behandelt wird. Der DNS-Name oder die IP-Adresse des MySQL-Servers Datenbankbenutzer (z. B. root) Das Kennwort des Datenbankbenutzers Der Name der Datenbank Der TCPIP-Port der Datenbank (in der Regel 3306) Der Unix-Socket (für Unix-basierte Systeme) Kombination von Sonderflags (in der Regel 0) Die MySqlDisconnect-Schnittstellenfunktion wurde zum Schließen der Verbindung implementiert: Diese Funktion schließt die Verbindung zur MySQL-Datenbank. Diese Funktion wird typischerweise aufgerufen, wenn das OnDeinit () - Ereignis im MQL-Programm behandelt wird. Es sollte beachtet werden, dass die MySQL-Datenbank die Verbindung im Falle eines Hardware-Ausfalls, einer Netzwerküberlastung oder eines Timeouts (wenn keine Abfragen für eine lange Zeit an die Datenbank gesendet werden) alleine schließen kann. Häufig verwenden Entwickler das OnTick () - Ereignis zum Schreiben von Daten in die Datenbank. Allerdings, wenn das Wochenende kommt und der Markt geschlossen ist, hängt die Verbindung immer noch. In diesem Fall wird MySQL durch Timeout geschlossen (die Voreinstellung ist 8 Stunden). Und am Montag, wenn der Markt geöffnet ist, werden Fehler im Projekt gefunden. Daher wird dringend empfohlen, nach einer Zeitspanne, die kleiner als die in den Einstellungen des MySQL-Servers angegebene Zeitspanne ist, die Verbindung zu überprüfen und die Verbindung zur Datenbank wieder herzustellen. 1.2. Ausführung von DMLDDL-Abfragen DML-Operationen werden für Datenmanipulationen (D ata M anipulation L anguage) verwendet. Datenmanipulationen umfassen die folgenden Anweisungen: INSERT, UPDATE und DELETE. DDL-Operationen werden für die Datendefinition (D ata D efinition L anguage) verwendet. Dazu gehören die Erstellung (CREATE) von Datenbankobjekten (Tabellen, Sichten, gespeicherte Prozeduren, Trigger usw.) und deren Änderung (ALTER) und Löschung (DROP). Seine nicht alle DMLDDL-Anweisungen, darüber hinaus DCL (D ata C ontrol L anguage) wird verwendet, um Datenzugriff zu trennen, aber wir werden nicht vertiefen in die Funktionen von SQL. Jeder dieser Befehle kann über die MySqlExecute-Schnittstellenfunktion ausgeführt werden: Als SQL-Abfrage können Sie auch den USE-Befehl verwenden, um die Datenbank auszuwählen. Ich möchte erwähnen, die Verwendung von Multi-Anweisung Abfragen. Es ist ein Satz von SQL-Befehlen, die durch das Zeichen getrennt sind. Um den Multi-Statement-Modus zu aktivieren, sollte die Verbindung zur Datenbank mit dem CLIENTMULTISTATEMENTS-Flag geöffnet werden: In diesem Fragment werden in der EURUSD-Tabelle 3 Einträge mit einem einzigen Aufruf zur Datenbank eingefügt. Jede der in der SQL-Variablen gespeicherten Abfragen wird getrennt. Dieser Ansatz kann für häufiges Einfügen verwendet werden, wobei ein Satz notwendiger Befehle zu einem Paket zusammengefasst wird, wodurch der Netzwerkverkehr entlastet und die Datenbankleistung verbessert wird. Die INSERT-Syntax in MySQL ist in der Ausnahmebehandlung sehr gut entwickelt. Wenn beispielsweise die Aufgabe, den Preisverlauf zu verschieben, eine Tabelle für die Währungspaare mit dem Primärschlüssel des Datetime-Typs erstellt werden soll, da das Datum und die Zeit eines Balkens eindeutig sind. Außerdem sollte geprüft werden, ob die Daten in einer bestimmten Bar in der Datenbank vorhanden sind (um die Stabilität der Datenmigration zu verbessern). Bei MySQL ist diese Überprüfung nicht erforderlich, da die INSERT-Anweisung ON DUPLICATE KEY unterstützt. In einfacheren Worten, wenn ein Versuch gemacht wird, Daten einzufügen, und die Tabelle bereits einen Eintrag mit dem gleichen Datum und Uhrzeit hat, kann die INSERT-Anweisung ignoriert oder ersetzt werden durch UPDATE für diese Zeile (siehe dev. mysqldocrefman5.0eninsert - On-duplicate. html). 1.3. Datenauswahl Die SQL SELECT-Anweisung dient zum Abrufen von Daten aus der Datenbank. Die folgende Sequenz von Aktionen wird zum Auswählen von Daten und zum Abrufen des Selektionsergebnisses verwendet: Vorbereiten der SELECT-Anweisung. Öffnen des Cursors. Ermitteln der Anzahl der von der Abfrage zurückgegebenen Zeilen. Schleifen und Abrufen jeder Zeile der Abfrage. Daten zu den MQL-Variablen innerhalb der Schleife abrufen. Schließen des Cursors. Natürlich ist dies ein allgemeines Schema, so dass nicht alle Operationen für jeden Fall erforderlich sind. Wenn Sie beispielsweise sicherstellen möchten, dass eine Zeile in der Tabelle (nach beliebigen Kriterien) vorhanden ist, reicht es aus, eine Abfrage vorzubereiten, einen Cursor zu öffnen, die Anzahl der Zeilen zu erhalten und den Cursor zu schließen. In der Tat sind die obligatorischen Teile - Vorbereitung der SELECT-Anweisung, Öffnen und Schließen des Cursors. Was ist ein Cursor Dies ist ein Verweis auf den Kontext-Speicherbereich, in der Tat - die resultierende Menge von Werten. Wenn Sie die SELECT-Abfrage senden, weist die Datenbank Speicher für das Ergebnis zu und erstellt einen Zeiger auf eine Zeile, die Sie von einer Zeile in eine andere verschieben können. Somit ist es möglich, auf alle in der Abfrage definierten Zeilen in der Reihenfolge einer Warteschlange zuzugreifen (ORDER BY-Klausel der SELECT-Anweisung). Für die Datenauswahl werden folgende Schnittstellenfunktionen verwendet: Cursor öffnen: Der von MySqlCursorOpen zurückgegebene Cursorbezeichner Das Schließen eines Cursors ist eine kritische Operation. Vergessen Sie nicht, Cursor zu schließen. Stellen Sie sich vor, Sie öffnen den Cursor und vergessen Sie ihn zu schließen. Angenommen, beim Abarbeiten des OnTick () - Ereignisses werden die Daten mit jedem Häkchen an den Cursor abgerufen, und bei jedem Öffnen eines neuen Cursors wird Speicher (sowohl auf der Client - als auch auf der Serverseite) zugewiesen. Irgendwann wird der Server den Dienst verweigern, da die Grenze der offenen Cursor erreicht ist, und dies könnte zu einem Pufferüberlauf führen. Natürlich, seine übertrieben, so ein Ergebnis ist möglich, wenn mit libmysql. dll direkt. Die dynamische Bibliothek MQLMySQL. DLL verteilt jedoch Speicher für Cursor und wird sich weigern, einen Cursor zu öffnen, der über das zulässige Limit hinausgeht. Bei der Umsetzung realer Aufgaben reicht es aus, 2-3 Cursor offen zu halten. Jeder Cursor kann eine kartesische Messung von Daten unter Verwendung von zwei-drei Cursorn gleichzeitig behandeln (verschachtelt, z. B. wenn ein parametrisch von einem anderen Cursor abhängt) zwei oder drei Dimensionen abdeckt. Das ist für die meisten Aufgaben perfekt. Darüber hinaus können Sie diese Objekte für die Implementierung einer komplexen Datenauswahl immer verwenden, um die Datenbank (VIEW) darzustellen, sie auf der Serverseite zu erstellen und ihnen Abfragen aus dem MQL-Code als Tabellen zu senden. 1.4. Zusätzliche Informationen Als zusätzliche Merkmale können folgende erwähnt werden: 1.4.1. Lesen von Daten aus einer. INI-Datei Oft werden Informationen über Verbindungen zur Datenbank (IP-Adresse des Servers, Port, Benutzername, Passwort usw.) direkt im Code MQL (oder Parameter des Expert Advisors, Indikator des Skripts) nicht gespeichert Rational, weil der Server verschoben werden kann, kann seine Adresse dynamisch ändern, etc. Sie müssen den MQL-Code in diesem Fall zu ändern. Somit sollten alle diese Daten besser in der Standard-INI-Datei gespeichert werden, während nur ihr Name in das MQL-Programm geschrieben werden sollte. Verwenden Sie dann die ReadINI-Funktion, um Verbindungsparameter zu lesen und zu verwenden. Beispielsweise enthält die INI-Datei folgende Informationen: Um die IP-Adresse des Servers abzurufen, führen Sie folgendes aus: Die INI-Datei befindet sich unter C: MetaTrader5MQL5Experts und heißt MyConnection. ini, Sie greifen auf den Server-Schlüssel des MYSQL-Bereichs zu. In einer INI-Datei können Sie Einstellungen auf verschiedene Server speichern, die in Ihrem Projekt verwendet werden. 1.4.2. Verfolgen der Problembereiche In der Schnittstellenbibliothek ist der Trace-Modus verfügbar, der für das Debugging von SQL-Abfragen überall in einem MQL-Programm aktiviert werden kann. Geben Sie im Problembereich Folgendes an: Wenn Sie die Ablaufverfolgung am Anfang des MQL-Programms aktivieren und nicht deaktivieren, werden alle Aufrufe der Datenbank protokolliert. Das Protokoll wird in der Terminalkonsole (mit dem Befehl Drucken) gehalten. 2. Beispiele Dieser Abschnitt enthält einige Beispiele für den Anschluss und die Nutzung der entwickelten Bibliotheken. Sehen Sie sie und schätzen Sie die Usability der Software-Lösung. Das Beispiel MySQL-003.mq5 zeigt Folgendes: die Verbindung zu einer Datenbank (die Verbindungsparameter werden in der. ini-Datei gespeichert), das Erstellen einer Tabelle, das Einfügen von Daten (auch über Multi-Anweisungen) und das Trennen von der Datenbank. Beispiel MySQL-004.mq5 zeigt die Auswahl der Daten aus einer Tabelle, die mit dem Skript MySQL-003.mq5 erstellt wurde. Die obigen Beispiele enthalten die typische Fehlerbehandlung bei realen Projekten. Tatsächlich sollte jede Abfrage, die in einem MQL-Programm verwendet wird, in jedem MySQL-Client (PHPMyAdmin, DB Ninja, MySQL-Konsole) debugge werden. Ich persönlich benutze und empfehle professionelle Software für die Datenbankentwicklung Quest TOAD für MySQL. Zusammenfassung Dieser Artikel beschreibt nicht die Details der Implementierung von MQLMySQL. DLL, die in der Microsoft Visual Studio 2010-Umgebung entwickelt wurden. Diese Softwarelösung ist für den praktischen Einsatz konzipiert und verfügt über mehr als 100 erfolgreiche Implementierungen in verschiedenen Bereichen der MMS-Software-Entwicklung (von der Erstellung komplexer Handelssysteme bis hin zum Web-Publishing). Die Versionen der Bibliotheken für MQL4 und MQL5 sind unten aufgeführt. Die Anhänge enthalten auch eine Zip-Datei mit dem Quellcode von MQLMySQL. DLL Dokumentation ist in den Archiven enthalten Um die Beispiele zu verwenden, vergessen Sie nicht, die Parameter der Verbindung zu Ihrer Datenbank in der Datei ScriptsMyConnection. ini anzugeben.

No comments:

Post a Comment