Forex Sql Datenbank
MetaTrader 5 - Integration Zugriff auf die MySQL Datenbank von MQL5 (MQL4) Einleitung Das Problem der Interaktion von MQL mit Datenbanken ist nicht neu, aber immer noch relevant. Die Nutzung von Datenbanken kann die Möglichkeiten von MetaTrader erheblich verbessern: Speicherung und Analyse der Preisentwicklung, Kopieren von Trades von einer Handelsplattform zur anderen, Bereitstellung von Questrien in Echtzeit, umfangreiche analytische Berechnungen auf der Serverseite und mit einem Zeitplan, einer Überwachung und einer Fernbedienung Von Konten mit Web-Technologien. Jedenfalls gab es viele Versuche, von der Kombination von MQL und MySQL zu profitieren, einige Lösungen sind im CodeBase verfügbar. Zum Beispiel ist MySQL-Wrapper - Bibliothek für MetaTrader 4 das Projekt, aus dem viele Programmierer ihre eigenen Entwicklungen mit weiteren Ergänzungen starten. Meiner Meinung nach ist einer der Nachteile dieser Lösung 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. Deshalb funktioniert es nicht in MetaTrader4 Build 600, da die char Charaktertypen durch wchart ersetzt wurden. Und die Verwendung des int-Typs anstelle des TMYSQL-Strukturzeigers verursacht Speicherverluste im Projekt (der zugeordnete Speicher kann nicht kontrolliert werden). Ein weiteres interessantes Projekt ist die EAXMysql - MySQL Bibliothek - Bibliothek für MetaTrader 5. Es ist eine ganz gute Umsetzung. Die vom Verfasser angegebene Nachweis der Nachteile hat einige Einschränkungen für deren Verwendung. Wer jemals Datenbanken in seinen MQL-Projekten einsetzt, hat zwei Möglichkeiten: Entwerfen Sie entweder eine eigene Lösung und kennen jeden einzelnen Teil davon, oder verwenden Sie eine Drittanbieter-Lösung, lernen Sie, wie Sie es verwenden und alle Fehler erkennen, die behindern können Ihr Projekt. Ich habe eine solche Notwendigkeit und die beiden Optionen bei der Entwicklung eines ziemlich komplexen Handel Roboter konfrontiert. Nachdem ich durch bestehende Projekte gesucht und eine sehr große Anzahl von Lösungen studiert hatte, erkannte ich, dass nicht die gefundenen Implementierungen dazu beitragen könnten, meinen Handelsroboter auf professionellem Niveau zu bringen. Darüber hinaus gab es auch absurde Lösungen, zum Beispiel: DMLDDL-Operationen (insertupdatedelete data, createrop-Objekte in Datenbank) wurden mit dem Standard libmysql. dll durchgeführt und die Datenauswahl (SELECT) wurde tatsächlich als HTTP-Request implementiert (mit inet. dll) Zu einem PHP-Skript auf dem Webserver auf der MySQL-Server-Seite. Die SQL-Abfragen wurden im PHP-Skript geschrieben. Mit anderen Worten, um das Projekt auszuführen, musste man die folgenden Komponenten zur Verfügung stellen, konfiguriert und ausgeführt werden: MySQL Server, ApacheIIS Webserver, PHPASP Scripts auf der Serverseite. Eine Kombination aus einer ganzen Anzahl von Technologien. Natürlich, unter Umständen kann dies akzeptabel sein, aber wenn die einzige Aufgabe ist, Daten aus der Datenbank auszuwählen - das ist Quatsch. Darüber hinaus ist die Unterstützung einer solchen umständlichen Lösung zeitaufwendig. Die meisten Lösungen hatten keine Probleme beim Einfügen von Daten, Erstellen von Objekten und dergleichen. Das Problem war die Datenauswahl, da die Daten an die anrufende Umgebung zurückgegeben werden sollen. Ich dachte, Arrays für diesen Zweck zu verwenden, war unpraktisch und unpraktisch, nur weil im Laufe der Entwicklung der Startunterstützung des Hauptprojekts die Abfrage der Datenbank geändert werden kann, während Sie auch die korrekte Speicherzuordnung für die Arrays kontrollieren sollten. Nun, das kann und muss vermieden werden Die nachfolgend diskutierten MMS lt-gt MySql-Schnittstellen basieren auf einem typischen Ansatz, der in Oracle PLSQL, MS SQL T-SQL, AdoDB - Verwendung von Cursors verwendet wird. Diese Schnittstelle wurde entwickelt, um die einfache Programmierung und Wartung, plus ein Minimum an Komponenten. Es ist als DLL-Wrapper auf die Standardbibliothek libmysql. dll und einen Satz von Schnittstellenfunktionen als. mqh-Datei implementiert. 1. MMS lt-gt MySQL-Schnittstelle Die Interaktion zwischen dem MetaTrader-Terminal (über MQL-Programme) kann mit Hilfe der folgenden Komponenten implementiert werden: 1. Die Schnittstellenbibliothek MQLMySQL. mqh. Es wird dem Projekt mit dem Include-Verzeichnis hinzugefügt und kann nach Ihrem Geschmack geändert werden. Es enthält die Richtlinien für den Import von Funktionen der dynamischen Bibliothek MQLMySQL. dll sowie Funktionen zum Aufruf und zum Behandeln von Fehlern. 2. Die dynamische Bibliothek MQLMySQL. dll. Es ist ein Wrapper, 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 gleichzeitig erstellen können (von einem oder mehreren MQL-Programmen), halten Sie einige Cursor offen, mit Abfragen zu einer oder mehreren Datenbanken. Mutexes werden verwendet, um den Zugriff auf freigegebene Ressourcen zu trennen. 3. Die standardmäßige dynamische Bibliothek libmysql. dll ist ein nativer Zugriffstreiber. Sie können es aus einer beliebigen MySql-Datenbankverteilung in C: WindowsSytem32 oder ltTerminalgtMQL5Bibliotheken (für MetaTrader 4 in ltTerminalgtMQL4Bibliotheken) kopieren. In der Tat ist es verantwortlich für das Senden von Abfragen in die Datenbank und das Abrufen der Ergebnisse. Lässt sich auf die Hauptpunkte verlassen, wie zum Beispiel: Öffnen der Verbindung, Durchführen von DMLDDL-Abfragen und Datenauswahl. 1.1. Öffnen und Schließen der Verbindung Die Funktion MySqlConnect wurde für die 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 bei den Fehlerdetails die Variablen MySQLErrorNumber und MySqlErrorDescription. Typischerweise wird diese Funktion beim Umgang mit dem OnInit () - Ereignis im MQL-Programm aufgerufen. 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 die Unix-basierten Systeme) Kombination von Sonderflags (in der Regel 0) Die Funktionsweise von MySqlDisconnect wurde zum Schließen der Verbindung implementiert: Diese Funktion schließt die Verbindung zur MySQL-Datenbank. Typischerweise wird diese Funktion beim Umgang mit dem OnDeinit () - Ereignis im MQL-Programm aufgerufen. Es sollte beachtet werden, dass die MySQL-Datenbank die Verbindung im Falle eines Hardwarefehlers, einer Netzwerküberlastung oder eines Timeouts (wenn keine Abfragen für eine lange Zeit an die Datenbank gesendet werden) im Falle eines Hardwarefehlers schließen kann. Oft verwenden Entwickler das OnTick () - Ereignis zum Schreiben von Daten in die Datenbank. Allerdings, wenn das Wochenende kommt und der Markt geschlossen ist, ist die Verbindung immer noch hängen. In diesem Fall schließt MySQL seine Zeitüberschreitung (die Voreinstellung ist 8 Stunden). Und am Montag, wenn der Markt offen ist, werden Fehler im Projekt gefunden. Daher empfiehlt es sich dringend, die Verbindung zu überprüfen und eine Verbindung zu der Datenbank nach einem Zeitintervall herzustellen, das kleiner ist als das in den Einstellungen des MySQL-Servers angegebene Zeitlimit. 1.2 Ausführung von DMLDDL-Abfragen DML-Operationen werden für Datenmanipulationen verwendet (D ata M-Anipulation L anguage). Datenmanipulationen enthalten die folgenden Anweisungen: INSERT, UPDATE und DELETE. DDL-Operationen werden für die Datendefinition verwendet (D ata D efinition L anguage). Dazu gehören die Erstellung (CREATE) von Datenbankobjekten (Tabellen, Sichten, gespeicherte Prozeduren, Trigger usw.) und deren Modifikation (ALTER) und Löschen (DROP). Es sind nicht alle DMLDDL-Anweisungen, außerdem wird DCL (D ata C ontrol L anguage) verwendet, um den Datenzugriff zu trennen, aber wir werden uns nicht in die Features von SQL vertiefen. Jeder dieser Befehle kann mit der MySqlExecute-Schnittstellenfunktion ausgeführt werden: Als SQL-Abfrage können Sie auch den USE-Befehl verwenden, um die Datenbank auszuwählen. Ich möchte die Verwendung von Multi-Statement-Abfragen erwähnen. Es ist ein Satz von SQL-Befehlen, die durch das Zeichen getrennt sind. Um den Multi-Statement-Modus zu aktivieren, sollte die Verbindung mit der Datenbank mit dem CLIENTMULTISTATEMENTS-Flag geöffnet werden: In diesem Fragment werden 3 Einträge in die EURUSD-Tabelle mit einem einzigen Aufruf der Datenbank eingefügt. Jede der in der SQL-Variablen gespeicherten Abfragen ist getrennt. Dieser Ansatz kann für häufige Einfügung verwendet werden, um eine Reihe von notwendigen Befehlen zu einem Paket zu kombinieren, wodurch der Netzwerkverkehr entlastet und die Datenbankleistung verbessert wird. Die INSERT-Syntax in MySQL ist in der Ausnahmebehandlung sehr gut entwickelt. Wenn zum Beispiel die Aufgabe darin besteht, den Preisverlauf zu verschieben, sollte eine Tabelle für die Währungspaare mit dem Primärschlüssel des Datetime-Typs angelegt werden, da das Datum und die Uhrzeit einer Leiste eindeutig sind. Darüber hinaus sollte überprüft werden, ob die Daten auf einer bestimmten Leiste 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 demselben Datum und Uhrzeit hat, kann die INSERT-Anweisung ignoriert oder durch UPDATE für diese Zeile ersetzt werden (siehe dev. mysqldocrefman5.0eninsert - On-duplicate. html). 1.3. Datenauswahl Die SQL SELECT-Anweisung wird zum Abrufen von Daten aus der Datenbank verwendet. Die folgende Sequenz von Aktionen wird für die Auswahl von Daten und das Abrufen des Auswahlergebnisses verwendet: Vorbereiten der SELECT-Anweisung. Cursor öffnen Die Anzahl der von der Abfrage zurückgegebenen Zeilen erhalten. Schleifen und Abrufen jeder Zeile der Abfrage. Abrufen von Daten zu den MQL-Variablen innerhalb der Schleife Cursor schließen. Natürlich ist dies ein allgemeines Schema, also sind nicht alle Operationen für jeden Fall erforderlich. Wenn Sie z. B. sicherstellen möchten, dass eine Zeile in der Tabelle existiert (nach einem beliebigen Kriterium), 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 resultierenden Satz 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 zur anderen verschieben können. So ist es möglich, auf alle Zeilen in der Reihenfolge einer von der Abfrage definierten Warteschlange zuzugreifen (ORDER BY-Klausel der SELECT-Anweisung). Für die Datenauswahl werden folgende Schnittstellenfunktionen verwendet: Cursor öffnen: Die von MySqlCursorOpen zurückgegebene Cursor-Kennung ist ein kritischer Vorgang. Vergessen Sie nicht, Cursor zu schließen. Stellen Sie sich vor, Sie öffnen den Cursor und vergessen Sie, ihn zu schließen. Angenommen, die Daten werden bei jedem Tick beim Umgang mit dem OnTick () - Ereignis an den Cursor abgerufen, und jedes Mal, wenn ein neuer Cursor geöffnet wird, wird ihm Speicherplatz zugeordnet (sowohl auf der Clientseite als auch auf der Serverseite). Irgendwann wird der Server den Service verweigern, da die Grenze der offenen Cursor erreicht ist und dies zu einem Pufferüberlauf führen kann. Natürlich ist sein übertriebenes solches Ergebnis bei der Arbeit mit libmysql. dll direkt möglich. Allerdings verteilt die dynamische Bibliothek MQLMySQL. DLL den Speicher für Cursor und wird sich weigern, einen Cursor zu öffnen, der über die zulässige Grenze hinausgeht. Bei der Realisierung von realen Aufgaben reicht es aus, 2-3 Cursor offen zu halten. Jeder Cursor kann eine kartesische Messung von Daten mit zwei-drei-Cursors gleichzeitig behandeln (verschachtelt, z. B. wenn man sich parametrisch von einem anderen Cursor abhängt) deckt zwei oder drei Dimensionen ab. Das ist für die meisten Aufgaben perfekt. Darüber hinaus können Sie bei der Implementierung einer komplexen Datenauswahl diese Objekte immer zur Darstellung der Datenbank (VIEW) verwenden, sie auf der Serverseite erstellen und Abfragen aus dem MQL-Code an Tabellen senden. 1.4. Zusätzliche Informationen Als Zusatzmerkmale können genannt werden: 1.4.1. Lesen von Daten aus einer. INI-Datei Oftmals werden Informationen über Verbindungen zur Datenbank (IP-Adresse des Servers, Port, Benutzername, Passwort usw.) direkt im Code MQL (oder Parameter des Expert Advisors, Kennzeichensymbol) gespeichert Rational, weil der Server verschoben werden kann, kann seine Adresse dynamisch ändern usw. Sie müssen den MQL-Code in diesem Fall ändern. So sollten alle diese Daten besser in der Standard-INI-Datei gespeichert werden, während nur der Name im MQL-Programm geschrieben werden soll. Verwenden Sie dann die ReadINI-Funktion, um Verbindungsparameter zu lesen und zu verwenden. Zum Beispiel enthält die INI-Datei die folgenden Informationen: Um die IP-Adresse des Servers zu erhalten, führen Sie folgendes aus: Die INI-Datei befindet sich unter C: MetaTrader5MQL5Experts und heißt MyConnection. ini, Sie greifen auf den Serverschlü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 bietet der Trace-Modus, der für das Debuggen von SQL-Abfragen überall in einem MQL-Programm aktiviert werden kann. Geben Sie im Problembereich Folgendes an: Wenn Sie das Tracing am Anfang des MQL-Programms aktivieren und es nicht deaktivieren, werden alle Aufrufe der Datenbank protokolliert. Das Protokoll wird in der Terminalkonsole gehalten (mit dem Befehl Drucken). 2. Beispiele Dieser Abschnitt enthält einige Beispiele für die Verbindung und Nutzung der entwickelten Bibliotheken. Sehen Sie sie und schätzen Sie die Usability der Software-Lösung. Das Beispiel von MySQL-003.mq5 zeigt Folgendes: Verbindung zu einer Datenbank (Verbindungsparameter werden in der INI-Datei gespeichert), Erstellen einer Tabelle, Einfügen von Daten (auch mit Multi-Statements) und Trennen von der Datenbank. Beispiel MySQL-004.mq5 zeigt die Auswahl von Daten aus einer Tabelle, die vom Skript MySQL-003.mq5 erstellt wurde. Die obigen Beispiele enthalten die typische Fehlerbehandlung, die in realen Projekten verwendet wird. In der Tat sollte jede Abfrage, die in einem MQL-Programm verwendet wird, in jedem MySQL-Client (PHPMyAdmin, DB Ninja, MySQL-Konsole) debuggen. Ich persönlich benutze und empfehle professionelle Software für die Datenbankentwicklung Quest TOAD für MySQL. Fazit Dieser Artikel beschreibt nicht die Details der Implementierung von MQLMySQL. DLL, die in der Microsoft Visual Studio 2010 (CC) 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 Softwareentwicklung (von der Erstellung komplexer Handelssysteme bis hin zur Web Publishing). Die Versionen der Bibliotheken für MQL4 und MQL5 sind unten beigefügt. 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 anzugeben ScriptsMyConnection. ini. need Beratung re: Forex Daten-Feed zu SQL Server Unbeantwortet: Notwendigkeit Beratung Re: Forex Daten-Feed zu SQL Server Hat jemand Erfahrung Fütterung Echtzeit Forex Daten in SQL Server Ich versuche, mehr darüber zu lernen, damit ich einige Analysen in SQL tun können. Es sieht aus wie eine Menge der Anbieter unterstützen etwas namens DDE, die eine Verbindung zu MSFT Excel ist oder sie bieten eine API, um die Daten für den Aufbau einer Anwendung in C oder etwas ähnliches zugreifen. Wenn Sie einen Dienst kennen, der den Übergang in Tabellen auf einem SQL Server macht, wäre das ideal. Da mein Forte ist SQL Server, Id eher nicht die C-Route und es ist unklar, wie ich werde die Daten zu analysieren, muss ich einen Anruf für jede Transaktion für die letzten paar Stunden und dann programmgesteuert setzen, dass in SQL-Tabellen So kann ich analysieren Scheint wie eine Menge Overhead, auch die DDE klingt nicht viel besser, es scheint wie ein dumbed down Ansatz und würde lieber nur mit den Rohdaten sichtbar auf einmal w wenig UI Overhead. Das klingt fast wie ein Service-Broker Spielplatz. Ich habe einmal Google Messaging mit Service Broker-basierte Architektur unterstützt. Alles beruht auf Gesprächen mit Webservice. Sie müssen herausfinden, was ist das Kommunikationsprotokoll, das Sie erwartet werden, um zu entsprechen. Wenn das Datenformat proprietär ist (was ich hoffe, es ist, da es ein Handelssystem ist), müssen Sie vielleicht einige C lernen, um mit der Entschlüsselungsbibliothek über CLR-Funktionen zu sprechen, bevor Sie Daten in die Tabellen laden. Da mein forte ist SQL Server, Id eher nicht die C-Route Wenn Sie wollen, um SQL als Ihre quotfortequot, Sie besser beginnen graben in C, und in PowerShell quotDie Daten in einem Datensatz hängt von der Taste, um die Aufnahme, die ganze Taste , Und nichts als der Schlüssel, also helfen Sie mir Codd. quotExecute SQL von Metatrader Ive gesehen ein paar Threads über die Verwendung von Datenbanken in Metatrader, aber ich havent sah etwas Besonderes über die Verbindung zu einem Microsoft SQL Server. Also, ich dachte, Id zusammengestellt ein kurzes Tutorial, wie dies zu tun, falls jemand etwas Ähnliches tun will. Dieser Vorgang sollte für jede Datenquelle funktionieren, auf die über ADOODBCOLE DB (SQL, Access, Excel, etc.) zugegriffen werden kann. Die folgenden Code-Snippets sind ein wenig technisch und benötigen einige grundlegende Codierungskenntnisse. Für diese Aufgabe habe ich mit dem ExpertSample Beispiel C-Projekt in deinem Metatrader-Ordner expertsamplesDLLSample angefangen. Ich wollte nicht von vorne anfangen, herauszufinden, die richtige Art von COM-Bibliothek zu bauen, also habe ich einfach dieses Beispielprojekt verwendet. Sobald du das Projekt eröffnet hast (youll need Visual Studio), bist du bereit, SQL in 4 einfachen Schritten zu verwenden 1) Füge einen Verweis auf die appopriate ADO DLLs an der Spitze deiner ExpertSample. cpp Seite hinzu, wie folgt: importiere C: Program FilesCommon FilesSystemADOmsado15.dll nonamespace umbenennen (EOF, EndOfFile) 2) Dann sind Sie bereit, die ExecuteScalar-Methode zu Ihrem Code hinzuzufügen. Diese Funktion gibt nur einen Wert aus SQL zurück. (Metatrader kann nur grundlegende Datentypen erhalten). MT4EXPFUNC char stdcall ExecuteScalar (char strSQL) HRESULT hr SOK Definieren Sie String-Variablen. Bstrt strCnn (MYCONNECTIONSTRING) Verbindungsstrings für mehr Info RecordsetPtr pRstAuthors NULL Aufruf Instanz erstellen, um den Datensatz zu reparieren zurücksetzen ERROR: Fehler beim Erstellen der Datensatzsatzinstanz Öffnen des Datensatzsatzes für das Erhalten von Datensätzen aus der Autoren-Tabelle pRstAuthors-Open (strSQL, strCnn, adOpenStatic, adLockReadOnly, AdCmdText) catch (comerror ce1) return ERROR: Kann nicht SQL Server MQL und Datenbanken öffnen Hat jemand von einer Möglichkeit, eine Verbindung zu einer Datenbank von MT4 zu machen, kann ich mir vorstellen, dass es eine externe DLL sein muss, da es nicht so aussieht, als ob es Daten gibt Zugang Laryer in MMS eingebaut, aber es sollte nicht so schwer zu zusammensetzen. Aber bevor ich es tue, habe ich mich gefragt, hier ist schon da draußen schon irgendwo da. Was ich im Sinn hatte, war ein generischer ODBC - oder OLEDB-Verbindungstyp der Sache, so dass es mit mehreren DBMSs verwendet werden könnte. MMS-Amps-Datenbanken Ja, Sie benötigen eine externe DLL, um diese Arbeit für Sie zu tun. Wenn Sie keine Erfahrung mit C haben, schauen Sie sich Powerbasic an. Powerbasic kann DLL-Dateien erstellen, die in MT4 verwendet werden können und seine Syntax ist einfach zu verstehen. Hallo, ich versuche, diesem Tutorial zu folgen, wie man eine Verbindung zum SQL Server herstellt. Im folgenden Verzeichnis - C: Program FilesCommon FilesSystemADO - Ich habe mehrere DLL-Dateien. Ich habe folgendes: Es gibt nur wenige andere, aber diese haben alle im Titel. Kann mir jemand sagen, welches ich verwenden soll Auch kann jemand ein Beispiel geben, um die Verbindungszeichenfolge hinzuzufügen. Und auch dieses Beispiel ist extrem einfach - in der Tat scheint es so etwas wie ein Nordwinds Beispiel zu sein. Hat jemand Beispiele von immer Zecken von MT und speichern sie in MS Sql Server Auch hat jemand - oder ist jemand - erfolgreich mit MS SQL Server mit Metatrader Wenn ja, können Sie bitte überprüfen Sie die oben genannten Tutorial und vielleicht einige Ergänzungen oder Verbesserungen . Ich habe ein paar Threads über die Verwendung von Datenbanken in Metatrader gesehen, aber ich habe nichts Bestimmtes über die Verbindung zu einem Microsoft SQL Server gesehen. Also, ich dachte, Id zusammengestellt ein kurzes Tutorial, wie dies zu tun, falls jemand etwas Ähnliches tun will. Dieser Vorgang sollte für jede Datenquelle funktionieren, auf die über ADOODBCOLE DB (SQL, Access, Excel, etc.) zugegriffen werden kann. Die folgenden Code-Snippets sind ein wenig technisch und benötigen einige grundlegende Codierungskenntnisse. Für diese Aufgabe habe ich mit dem ExpertSample Beispiel C-Projekt in deinem Metatrader-Ordner expertsamplesDLLSample angefangen. Ich wollte nicht von vorne anfangen, herauszufinden, die richtige Art von COM-Bibliothek zu bauen, also habe ich einfach dieses Beispielprojekt verwendet. Sobald du das Projekt eröffnet hast (youll need Visual Studio), bist du bereit, SQL in 4 einfachen Schritten zu verwenden 1) Füge einen Verweis auf die appopriate ADO DLLs an der Spitze deiner ExpertSample. cpp Seite hinzu, wie folgt: importiere C: Program FilesCommon FilesSystemADOmsado15.dll nonamespace umbenennen (EOF, EndOfFile) 2) Dann sind Sie bereit, die ExecuteScalar-Methode zu Ihrem Code hinzuzufügen. Diese Funktion gibt nur einen Wert aus SQL zurück. (Metatrader kann nur grundlegende Datentypen erhalten). MT4EXPFUNC char stdcall ExecuteScalar (char strSQL) HRESULT hr SOK Definieren Sie String-Variablen. Bstrt strCnn (MYCONNECTIONSTRING) Verbindungsstrings für mehr Info RecordsetPtr pRstAuthors NULL Aufruf Instanz erstellen, um den Datensatz zu reparieren zurücksetzen ERROR: Fehler beim Erstellen der Datensatzsatzinstanz Öffnen des Datensatzsatzes für das Erhalten von Datensätzen aus der Autoren-Tabelle pRstAuthors-Open (strSQL, strCnn, adOpenStatic, adLockReadOnly, AdCmdText) catch (comerror ce1) return ERROR: Kann SQL Server nicht öffnen 4) Sobald du deine kompilierte DLL zum Ordner "Expertenbibliotheken" hinzufügst, kannst du deine DLL-Methode anrufen, indem du folgendes an die Oberseite deiner MQ4-Datei hinzufügst: string ExecuteScalar (string StrSQL) Thats it Youre bereit zu starten, um Datenbank-Anrufe direkt aus Metatrader. Ich benutze dies jetzt, um mit einigen SELECTINSERT-Anweisungen in meinem SQL Server zu spielen und versuche, mit einigen fortgeschrittenen Bestelllogik zu spielen. Mein nächstes Ziel: Mit Sockets von Metatrader zu kommunizieren, um eine externe Anwendung, vorzugsweise in C. geschrieben. Ich habe es geschafft, Ihre Schritte mit Visual Studio 2008 zu folgen, aber beim Kompilieren des Codes bekam ich die folgende Fehler: 1 ------ Build begann : Projekt: ExpertSample, Konfiguration: Debug Win32 ------ 1d: studioexpertsampleexpertsampleexpertsamplesrc. cpp (221). Warnung C4996: strcat: Diese Funktion oder Variable kann unsicher sein. Verwenden Sie stattdessen die Verwendung von Strcats. Um die Deprecation zu deaktivieren, verwenden Sie CRTSECURENOWARNINGS. Siehe Online-Hilfe für Details. 1 c: ProgrammdateienMicrosoft Visual Studio 9.0vcincludestring. h (79). Siehe deklaration von strcat 1d: studioexpertsampleexpertsampleexpertsamplesrc. cpp (235). Fehler C2065: MYCONNECTIONSTRING. Nicht deklarierter Bezeichner 1d: studioexpertsampleexpertsampleexpertsamplesrc. cpp (287). Warnung C4172: Rückgabe der Adresse der lokalen Variablen oder temporären 1Build-Protokoll wurde in der Datei gespeichert: d: StudioExpertSampleExpertSampleDebugBuildLog. htm 1ExpertSample - 1 Fehler (s), 2 Warnung (en) Build: 0 gelungen, 1 fehlgeschlagen, 0 up-to-date, 0 übersprungen Es sieht so aus, als ob er das MYCONNECTIONSTRING nicht erkennt. Ich habe das Original ExpertSample. cpp kompiliert, bevor ich deine Updates hinzufügst und es funktionierte einfach nur die DLL. Können Sie bitte helfen. Vielen Dank im Voraus, wie man Forex Tick historische Datenbank in kostenlosen MYSQL für Windows, Linux oder Apple Mac OSX erstellen Wie man Forex Tick historische Datenbank in kostenlosen MYSQL für Windows, Linux oder Apple Mac OSX Ich habe erfolgreich eine historische Tick-Datenbank erstellt Für forex Es enthält fast 300 Millionen Aufzeichnungen von Millisekunden Zecken. Ich habe alles getan, das ist mit MYSQL, da es leicht auf Linux von Windows portiert werden kann, wenn ich muss. Oracle ist zu teuer wie MYSQL ist frei. Auch Microsoft SQL Server ist ziemlich schnell, aber basiert nur auf Windows. Ich sehe aber etwas Verzögerung mit Windows, also muss ich mich an dieses Problem für zukünftige Implementierung vielleicht erinnern. Diese Datenbank enthält auch 14 große Währungspaare sowie für die Tickgeschichte. Die Forex-Tick-Datenperiode ist vom Frühjahr 2009 bis zum Herbst 2011. Ich habe auch meine Forex-Daten aus Komma getrennten Wert (CSV) Dateien geladen. Ich habe ein C-Programm erstellt, um die Datenbank in MYSQL zu laden. Schließlich habe ich eine SQL-Datei von MYSQLDUMP erstellt, die es Ihnen ermöglicht, Ihre Datenbank und Tabelle zu erstellen und dann die Tabelle mit Forex-Tick-Daten zu füllen. Ich werde alle diese Ressourcen bald in einem Mitglieds-Download-Bereich, dass Sie verpflichtet werden, beitreten, wenn Sie Zugang zu diesen Ressourcen wollen. Melden Sie sich hier an, wenn ich kündige, dass die Ressourcen zum Download bereit sind. HINWEIS Ich poste jetzt meine HANDELSWÜRDIGKEITEN in meine persönliche FACEBOOK ACCOUNT und TWITTER. Mach dir keine Sorgen, da ich keine dummen Katzenvideos veröffentliche oder was ich tue Teilen Sie dies:
Comments
Post a Comment