English Русский Español 日本語 Português
preview
Marktsimulation (Teil 18): Erste Schritte mit SQL (I)

Marktsimulation (Teil 18): Erste Schritte mit SQL (I)

MetaTrader 5Tester |
30 0
Daniel Jose
Daniel Jose

Einführung

Im vorangegangenen Artikel „Marktsimulation (Teil 17): Sockets (XI)“ haben wir die Demonstration einer Implementierung abgeschlossen, die den Informationsaustausch zwischen MetaTrader 5 und Excel ermöglicht. Wir sind nicht darauf eingegangen, wie wir Excel dazu bringen, den MetaTrader 5 zu steuern, da dies erhebliche Vorsicht erfordert. Da dies ganz davon abhängt, was jeder Einzelne denkt oder plant, haben wir am Ende des Artikels einige Verweise eingefügt, damit Sie eine Vorstellung davon bekommen, wie sich das umsetzen lässt.

Es spielt keine Rolle, welches SQL-Programm wir verwenden: MySQL, SQL Server, SQLite, OpenSQL oder andere. Allen gemeinsam ist die Sprache SQL. Auch wenn wir nicht vorhaben, Workbench zu verwenden, können wir die Datenbank direkt in MetaEditor oder über MQL5 manipulieren oder mit ihr arbeiten, um Aktionen in MetaTrader 5 auszuführen, aber dazu benötigen Sie SQL-Kenntnisse. Es gibt zahlreiche Bücher zu diesem Thema sowie zahlreiche Online-Leitfäden. Sie müssen nur einige Konzepte verstehen und lernen, wie Sie Ihre Programmiersprache für die Kommunikation mit SQL einsetzen können.

Es gibt jedoch auch einige Einschränkungen, die wir beachten sollten, bevor wir mit der Verwendung von SQL beginnen. Um SQL zu lernen, müssen Sie zumindest in der Lage sein, eine Datenbank zu erstellen. Dies ist der grundlegende Ausgangspunkt, den Sie verstehen müssen.


Erste Schritte mit Datenbanken

Es gibt mehrere sehr einfache Möglichkeiten, SQL zu verwenden. Die erste Möglichkeit besteht darin, Befehle direkt in die Befehlszeile einzugeben. Die zweite Möglichkeit ist die Verwendung von Workbench oder einem ähnlichen Programm wie MetaEditor. Bei der dritten Methode werden SQL-Befehle in ein in MQL5 geschriebenes Programm eingebettet. Wenn das Programm in MetaTrader 5 läuft, kann es auf die Datenbank zugreifen. Schließlich gibt es noch eine weitere grundlegende Methode, die darin besteht, Sockets für die Kommunikation mit dem SQL-Server zu verwenden. Alle diese grundlegenden Methoden sind in allen Datenbanksystemen, die SQL verwenden, weit verbreitet. Somit kann alles, was gezeigt und erklärt wird, in jedem kompatiblen System verwendet werden. Denken Sie nicht, dass sich etwas nicht realisieren lässt. Wenn Sie reines Standard-SQL verwenden, werden Sie dazu in der Lage sein.

Es gibt jedoch einen Punkt, der beachtet werden muss. Jedes Programm, das SQL verwendet – sei es OpenSQL, MySQL, SQLite, SQL Server oder ein anderes – hat möglicherweise Befehle, die speziell für dieses Programm entwickelt wurden. Wenn diese Befehle verwendet werden, können wir die gleichen Aktionen nicht in einem anderen SQL-Programm durchführen.

Ein weiterer Hinweis: Zu Beginn wird alles mit MySQL Workbench durchgeführt. Der Grund dafür wird später erläutert.

Nach diesen Vorbemerkungen wollen wir uns nun dem einfachsten Befehl zuwenden: der Erstellung einer leeren Datenbank. Wir möchten gleich anmerken, dass es absolut sinnlos ist, eine beliebige Datei zu erstellen und ihre Erweiterung in .DB zu ändern, da das System sie nicht als Datenbank erkennen wird. Dazu müssen Sie einen Befehl verwenden, der eigentlich sehr einfach ist. Doch bevor wir uns mit den Befehlen befassen, sollten wir uns etwas anderes ansehen.

Sehr oft (und dies wird in der SQL-Programmierung fast als gute Praxis angesehen) werden reservierte Wörter in Großbuchstaben geschrieben. Für SQL spielt dies jedoch keine Rolle. Wenn Sie beim Schreiben des Codes vergessen haben, die Befehle in Großbuchstaben zu schreiben, brauchen Sie sich keine Sorgen zu machen: Sie müssen einfach nur die im Bild unten gezeigte Schaltfläche verwenden. Dadurch wird der gesamte Code oder die reservierten SQL-Wörter in Großbuchstaben umgewandelt.


Erste Befehle in SQL

Nun können wir endlich die Befehle im Detail durchgehen. Der erste Befehl, den wir lernen müssen, ist CREATE DATABASE. In der nachstehenden Abbildung können Sie sehen, wie es tatsächlich aussieht.

Der blau und fett hervorgehobene Text stellt den SQL-Code dar, während der schwarz hervorgehobene Text der Name der Datenbank ist. Dies ist der erste Befehl, den Sie verwenden müssen. Nach der Eingabe dieses Befehls können wir auf eines der Blitzsymbole klicken, die über dem Code angezeigt werden. Jedes dieser Blitzsymbole funktioniert auf seine eigene Weise. Da wir gerade erst anfangen, klicken wir auf das Blitzsymbol ganz links. Es ist auch nützlich, zu verstehen, wozu die einzelnen Schaltflächen dienen und wie sie funktionieren, da dies sehr hilfreich ist, insbesondere bei der Fehlersuche in einem Skript. Das werden wir gleich behandeln. Bitte beachten Sie Folgendes. Wenn Sie eine Datenbank direkt in MetaEditor mit SQL erstellen wollen, müssen Sie anders vorgehen. In diesem Fall müssen Sie die in der folgenden Abbildung gezeigte Option wählen.

In diesem Fall werden Sie von MetaEditor aufgefordert, den Speicherort und den Namen der zu erstellenden Datenbankdatei anzugeben. Das ist ganz einfach. Wir können auch eine Datenbankdatei mit in MQL5 geschriebenem Code erstellen. Aber wir werden das später besprechen, denn es ist besser, mehr Material zu haben, um Dinge direkt mit MQL5 oder einer anderen Sprache, die wir für die Arbeit mit SQL verwenden werden, zu erstellen. Wenn wir jedoch Sockets im MQL5-Code verwenden und eine Verbindung zu einem SQL-Server herstellen, können wir den in Workbench angezeigten Befehl senden und das gleiche Ergebnis erzielen, nämlich die Erstellung einer Datenbank.

Aber das ist ein Thema für eine andere Diskussion. Lassen Sie uns zunächst auf die einfachste und unkomplizierteste Weise vorgehen: mit MetaEditor, Workbench oder sogar der Befehlszeile. Bei der Befehlszeile müssen Sie jedoch genau wissen, wie die Elemente in der Befehlszeile dargestellt werden. Aber das ist nur eine Frage der Gewöhnung an die Kommandozeile.

Da das Ziel dieses Artikels die größtmögliche Übersichtlichkeit ist, werden wir nur MetaEditor und Workbench verwenden.

Nachdem wir also alle Schritte in MetaEditor durchgeführt haben, erhalten wir ein Ergebnis, das dem untenstehenden Bild ähnelt. Wie Sie sehen können, haben wir in diesem Fall die Namen der Datenbanken geändert, um sie von den Workbench-Datenbanken zu unterscheiden.

In diesem Stadium ist MetaEditor bereit für die weitere Arbeit. Was die Workbench betrifft, können wir jedoch noch nicht zum nächsten Schritt übergehen. Zunächst müssen wir ein paar zusätzliche Schritte unternehmen. Um zu verstehen, was zu tun ist, klicken Sie nach der Ausführung des Skriptbefehls auf das hervorgehobene Element in der Abbildung unten.

Jede dieser beiden Optionen führt zum gleichen Ergebnis. Sehen Sie sich das folgende Bild an: Die Datei, die als Datenbank verwendet werden soll, wurde bereits erstellt. Beachten Sie aber bitte, dass sie noch nicht als Datenbank für die nachfolgenden SQL-Befehle ausgewählt wurde.

Bevor Sie irgendwelche Operationen in der Datenbank durchführen, müssen Sie sie auswählen. Eine Möglichkeit, dies zu tun, ist die Verwendung eines SQL-Befehls. Dieser Befehl heißt „USE“. Sie sehen ihn unten.

Nun müssen wir ein wichtiges Detail bei der Verwendung von Workbench beachten. Wenn Sie die Befehlszeile zum Ausführen von Aktionen verwenden, brauchen Sie an dieser Stelle nur den Inhalt von Zeile 02 einzugeben, und Sie können mit dem nächsten Schritt fortfahren. In Workbench ist der Prozess jedoch etwas anders. Bitte beachten Sie, dass wir zwei Blitzsymbole hervorgehoben haben. Nun wollen wir sehen, wie das funktioniert. Wenn wir ein Skript für SQL erstellen, schreiben wir oft mehrere Befehle. Wir verwenden das Skript auch als Dokumentation. Bei der Verwendung eines Skripts gibt es jedoch einige zusätzliche Punkte zu beachten. Erstens: Wenn das Skript in einem Durchgang ausgeführt wird, gibt es keine Probleme. Wenn wir jedoch beabsichtigen, dasselbe Skript nach und nach auszuführen, werden wir auf Probleme stoßen, wenn wir versuchen, es von Anfang an auszuführen. Aus diesem Grund geben viele Menschen das Erlernen von SQL auf, da sie die auftretenden Probleme nicht bewältigen können.

Na gut. Wir wollen, dass die Zeile 02 ausgeführt wird. Hierfür gibt es drei Alternativen. Die erste Möglichkeit besteht darin, die Zeile 02 auszuwählen und auf die hervorgehobene Schaltfläche auf der linken Seite zu klicken. Die zweite Möglichkeit besteht darin, den Textcursor auf die Zeile 02 zu setzen und auf die hervorgehobene Schaltfläche auf der rechten Seite zu klicken. Beachten Sie, dass sich daneben ein Cursor-Symbol befindet. Nur die Zeile, in der sich der Cursor befindet, wird ausgeführt.

Es gibt auch eine dritte Möglichkeit. Dies wird hauptsächlich dann verwendet, wenn Sie die Ausführung des Codes von Anfang an erzwingen wollen, auch wenn er bereits teilweise ausgeführt wurde. Zu diesem Zweck müssen Sie hier einen Test in SQL erstellen. Wenn der Code versucht, wieder von Anfang an ausgeführt zu werden, tritt in Zeile 01 ein Fehler auf. Wie ist das möglich? Der Grund dafür ist, dass SQL versucht, die Datenbankdatei neu zu erstellen, und dieser Versuch scheitert, weil die Datei bereits existiert. Dies hat zur Folge, dass der Rest des Codes nicht ausgeführt wird. Sie können dies ausprobieren, indem Sie auf das linke Symbol klicken, ohne eine Zeile auszuwählen.

Da wir häufig mit Skripten arbeiten, bei denen die Datenbank bereits existiert, sie aber dennoch geändert werden soll, sollte das Löschen der Datenbank möglichst vermieden werden. Um dieses Problem zu lösen, können wir die Zeile 01 auskommentieren, indem wir einen doppelten Bindestrich hinzufügen, wie in der folgenden Abbildung gezeigt, oder etwas anderes tun.

Wie in der vorherigen Abbildung zu sehen, gibt es zwei Möglichkeiten, SQL-Code zu kommentieren. Die erste Option ist im Bild zu sehen: Zeile 01 wird nun als Kommentar interpretiert. Diese Methode ist nützlich, wenn Sie eine einzelne Zeile auskommentieren müssen. Sie können aber auch mehrere Zeilen auf einmal auskommentieren. Verwenden Sie dazu einfach die gleiche Methode wie in MQL5, d. h. einen Schrägstrich und einen Asterisk.

Die vorherige Lösung ist zwar möglich, funktioniert aber nicht, wenn der SQL-Code lang ist und viele Teile enthält, die möglicherweise nicht funktionieren, weil sie bereits in der Datenbank vorhanden sind. Deshalb brauchen wir eine elegantere Lösung. Diese Lösung ist in der nachstehenden Abbildung zu sehen.

Beachten Sie, dass wir in Zeile 01 einen anderen Befehl haben. Dieser Befehl stellt jedoch sicher, dass das Skript korrekt und wie erwartet ausgeführt wird. Denn wenn die Datenbankdatei nicht vorhanden ist, wird sie erstellt. Wenn sie jedoch bereits existiert, wird SQL dies nicht als Fehler behandeln, da wir prüfen, ob die Datei existiert oder nicht. Diese Art von Konstrukt mit dem IF-Befehl ist in SQL recht häufig, vor allem in Skripten, die während der Lebensdauer der Datenbank (sogar wiederholt) verwendet werden. Nach Abschluss der Ausführung erhalten wir das in der Abbildung gezeigte Ergebnis. Das heißt, unsere Datenbankdatei wird als aktuelle Datenbank festgelegt.

Wie Sie sehen können, ist alles sehr einfach und praktisch. Wir müssen nur verstehen, was die einzelnen Anweisungen oder Befehle bewirken. Verschwenden Sie keine Zeit mit dem Auswendiglernen von Befehlen und deren Kombinationen. Wir müssen nur verstehen, was die einzelnen Anweisungen bewirken und sie je nach Bedarf einsetzen. Von diesem Punkt an befinden wir uns also auf demselben Niveau, das in MetaEditor erreicht wurde. Der nächste Befehl, den wir uns ansehen, kann also sowohl in MetaEditor als auch in Workbench verwendet werden. Dieser Befehl ist etwas komplexer als die bisherigen. Aber denken Sie daran: Wissen sammelt sich an, es zerstreut sich nicht.


Erstellen einer Tabelle

Dieser Befehl zur Erstellung einer Tabelle ist einer derjenigen, die wir am häufigsten verwenden werden, insbesondere in der Lernphase. Sein Zweck ist es, eine Tabelle zu erstellen, die dann mit einem anderen Befehl Daten erhält. Im Gegensatz zu den vorangegangenen Befehlen stoßen wir jedoch ab diesem Punkt auf einige Komplexitäten, die anfangs Schwierigkeiten bereiten können. Aber es gibt keinen Grund zur Sorge: Es ist alles eine Frage der Gewohnheit und des Lernens, und am Ende werden Sie verstehen, wie wir diesen Befehl benutzen.

Das Problem lässt sich auf eine Sache reduzieren. Sie müssen nun im Voraus darüber nachdenken, wie die Daten, die in die Tabelle eingefügt werden sollen, modelliert werden sollen, bevor die Tabelle erstellt wird. Dieser Teil ist zweifelsohne der schwierigste in der Anfangsphase des SQL-Lernens. Der Grund dafür ist, dass Sie eine Vorstellung davon haben müssen, was Sie tun wollen, bevor Sie mit der Umsetzung beginnen. Es ist absolut sinnlos, tausend Dinge zu planen und die Art der Daten, die in die Tabelle eingegeben werden, nicht richtig zu planen. Im Gegensatz zur Wahl des richtigen Datentyps ist die Reihenfolge, in der die Daten angeordnet sind, nicht sehr wichtig. Wenn Sie den falschen Typ wählen, erstellen Sie eine Tabelle, die später nicht mehr für neue Daten geeignet ist.

Wenn wir jedoch versuchen, etwas zu Generisches zu schaffen, werden wir am Ende viel mehr Ressourcen und Platz verbrauchen als nötig. Daher schlage ich vor, zunächst die verfügbaren Datentypen zu studieren. Ich empfehle, dies zu tun, bevor Sie versuchen, Datenbanken für bestimmte Zwecke zu entwerfen. Am Ende dieses Artikels werde ich einige Links angeben, damit Sie wissen, wo Sie anfangen können.

Fangen Sie damit an, und sei es nur als Ausgangspunkt. Sie sollten nach weiteren Informationen zu diesem Thema suchen. Glücklicherweise gibt es viele Menschen, die bereit sind, die einzelnen Typen im Detail zu erklären. Warten Sie also nicht darauf, dass Ihnen jemand die Lösung gibt.

Der Einfachheit halber und nur zu Demonstrationszwecken gehen wir von folgendem Szenario aus: Wir möchten eine Historie von Kursen für einige B3-Symbole (brasilianische Börse) erstellen und pflegen. Am einfachsten geht das wie unten gezeigt, nämlich mit Workbench.

Obwohl unser SQL-Code viele Zeilen für die Erstellung der Tabelle benötigt, müssen Sie verstehen, dass es eigentlich nur eine Zeile sein wird. Das Ergebnis wird im Bereich Schemata der Workbench angezeigt. Aber auch wenn diese Tabelle erstellt wurde und Werte aufnehmen kann, ist sie in manchen Fällen nicht geeignet. Der Grund dafür wird später erläutert. Doch bevor wir den Grund dafür herausfinden, wollen wir uns ansehen, wie die gleiche Tabelle in MetaEditor erstellt wird. Dies ist auf dem nachstehenden Bild zu sehen.

Wie Sie sehen, ist der Befehl genau derselbe, und das Ergebnis wird auch dasselbe sein. Praktisch alle Befehle, die in Workbench ausgeführt werden können, können auch in MetaEditor ausgeführt werden, und sie funktionieren. Beachten Sie aber bitte, dass ich „praktisch alle Befehle" sagte, nicht „alle Befehle werden ausgeführt". Es gibt einen Befehl, der kurz besprochen werden soll, der in SQL, aber nicht über MetaEditor ausgeführt werden kann. Aber wir sollten nichts überstürzen.

Lassen Sie uns zunächst verstehen, warum die von uns erstellte Tabelle für bestimmte Szenarien nicht geeignet ist. Der erste Grund liegt in dem Modell selbst. Wie ist das möglich? Sollte es nicht den Kurs darstellen? Ja, aber vielleicht haben Sie etwas missverstanden. Wir wollen den Kurs abrufen, aber wir wollen auch die Historie dieses Kurses bewahren, und dieses Modell löst dieses Problem nicht. Denn dieses Modell bildet nur den eigentlichen Kurswert ab. Selbst wenn wir versuchen, eine Historie zu schreiben, wird dieses Modell nicht ausreichen.

Wir brauchen mehr Informationen. Zum Beispiel das Datum oder die Uhrzeit, je nach dem konkreten Fall. Angenommen, wir benötigen nur den Schlusskurs des Tages. Jeden Tag werden wir der Tabelle neue Daten hinzufügen. Daher muss derselbe Code, den wir zuvor gesehen haben, geändert werden.

Das werden Sie sich vielleicht fragen: „Warum wurde das nicht von Anfang an gemacht? Warum jetzt, nachdem die Tabelle bereits erstellt wurde?" Dies war beabsichtigt, um zu zeigen, wie wir einer Tabelle neue Spalten hinzufügen. Wie wir bereits erwähnt haben, spielt die Reihenfolge der Objekterstellung keine Rolle. SQL sorgt dafür, dass sie korrekt in der Datenbank gespeichert werden. Der auszuführende Befehl ist jedoch genau der, der in der Animation unten gezeigt wird.

Wenn wir denselben Befehl in Zeile 08 in MetaEditor ausführen, erhalten wir dasselbe Ergebnis wie in der Abbildung gezeigt: die Erstellung einer neuen Spalte, die Daten zum Datum enthält, an dem der Kurs abgerufen wurde. Das Ergebnis ist unten zu sehen.

Nachdem Sie die oben genannten Schritte durchgeführt haben, führen Sie den folgenden Befehl aus, um das gleiche Ergebnis in Workbench zu erzielen.

Über die Werte, die in diese Felder eingegeben werden, und die Methoden zu ihrer Aufbereitung wird noch zu reden sein. Das Einfügen neuer Werte oder das Löschen von Werten aus der Datenbank sind nämlich Operationen, die mit einer gewissen Vorsicht durchgeführt werden müssen. Glauben Sie mir: Sie werden nicht viele Änderungen an der Datenbank vornehmen wollen, indem Sie Dinge löschen oder hinzufügen. Wenn Sie nicht nach einem Plan vorgehen, wird die Datenbank schließlich für eine langfristige Nutzung ungeeignet sein. Ideal ist es, Elemente nach einem sorgfältig durchdachten Plan hinzuzufügen oder zu entfernen und die Datenbank hauptsächlich für Abfragen zu nutzen.


Erst denken, dann handeln

In dem Artikel wurde wiederholt erwähnt, dass diese einfache Datenbank zwar funktioniert, aber nicht ideal ist. Der Grund dafür ist, dass sie je nach unseren Plänen den Speicherbedarf besser optimieren kann. Aber Sie könnten denken: „Warum sollte ich mir Sorgen um den Speicherplatz machen? Wenn mir der Speicherplatz ausgeht, kaufe ich einfach eine neue Festplatte." Das ist eine Möglichkeit, aber sie löst das Problem nicht. Das Problem liegt in der Art und Weise, wie die Datenbank genutzt wird oder wie sie konzipiert wurde.

Was ich hier sagen werde, ist nur ein kleiner Einblick in den wahren Kern des Themas. Wenn Sie mehr Erfahrung mit Datenbanken haben, werden Sie verstehen, dass dieses Problem viel tiefer geht. Es gibt sogar Kurse, die sich speziell an diejenigen richten, die in diesem Bereich tätig werden wollen. Aber wir werden nicht ins Detail gehen, da dieses Thema weitaus umfangreicher ist, als ich es in einem oder zwei Artikeln behandeln könnte.

Ich möchte Ihnen zeigen, dass es sinnlos ist, nur SQL-Programmierung zu studieren oder in irgendeinem Datenbanklehrbuch zu blättern und dann zu behaupten, man wisse, wie man mit Datenbanken arbeitet. Solche Aussagen können wir nur machen, wenn wir viele Jahre in dieser Branche gearbeitet haben. Und selbst dann werden Sie selten jemanden finden, der eine solche Behauptung mit voller Überzeugung aufstellt.

Der Grund dafür ist einfach: Datenbanken stellen eine ausreichend große Nische dar, in der viele Aspekte bereits untersucht wurden. Und jeder Fall ist einzigartig. In der Tat gibt es keine einheitliche Lösung.

Analysieren wir nun eines der Probleme dieses einfachen achtzeiligen Skripts, das eine Datenbank zur Speicherung der Kurshistorie der an der B3 (der brasilianischen Börse) gehandelten Symbole erstellt. Das erste Problem ist, dass in das Feld, in dem wir den Preis speichern können, nur Werte zwischen 0,00 und 999,99 eingegeben werden können. Das bedeutet, dass einige Symbole nicht in dieser Tabelle gespeichert werden können. Der Grund dafür ist, dass der Kurs dieser Symbole von dem abweichen, was die Tabelle erwartet. Wir könnten dieses Problem lösen, indem wir eine weitere Spalte hinzufügen, um diese Lücken zu füllen. Dies würde jedoch dazu führen, dass eine der beiden Spalten – entweder die Code-Spalte oder die neu erstellte Spalte – unnötigen Platz in der Datenbank einnimmt.

Das zweite Problem besteht darin, dass der Datensatzwert, in dem das Kursdatum gespeichert ist, das Format ISO 8601 verwendet. Welche Auswirkungen hat das auf die Datenbank? Um diese Frage zu beantworten, müssen wir zunächst eine andere beantworten: Von welchem Punkt bis zu welchem Punkt werden wir der Tabelle Kurse hinzufügen? Je nach Antwort kann ein anderes Format verwendet werden. Auf diese Weise würden wir weniger Platz benötigen und die Gesamtleistung der Datenbank verbessern.

Um dies zu verstehen, stellen Sie sich vor, dass ein Jahr 365 Tage hat, die Börse aber nicht jeden Tag arbeitet. Gehen wir aber davon aus, dass der Handel täglich stattfindet. Wenn wir also einen Wert wie SmallInt verwenden, der in diesem Fall ein Wert mit Vorzeichen ist, können wir von 0 bis 32767 zählen. Dies entspricht einer Gesamtdauer von etwas mehr als 89 Jahren. Wenn wir denselben Datentyp verwenden, aber ohne Vorzeichen, d. h. von 0 bis 65535, könnten wir insgesamt etwas mehr als 179 Jahre abdecken. Und dennoch würden wir nur zwei Bytes verwenden, statt all der Bytes, die das ISO 8601-Format verwendet. Stellen Sie sich einfach mal vor, wie viel Daten die täglichen Kurse von 179 Jahren ausmachen würden.

Das dritte Problem ist ähnlich wie das vorherige. Es hat auch Auswirkungen auf die Speicherung, aber dieses Mal ist das Datensatzfeld ein anderes. In diesem Fall handelt es sich um den Symbolnamen. Dieses Problem ist noch komplexer als das vorherige. Der Grund dafür ist, dass einige Symbole von Zeit zu Zeit ihren Namen ändern. Wenn wir jedoch davon ausgehen, dass die Änderung des Namens eines Symbols nicht bedeutet, dass das Unternehmen, das es repräsentiert, sein Verhalten ändert, dann ändert die Änderung des Namens des Symbols nicht seine Historie.

Na gut. Unabhängig vom Markt wird die Anzahl der gehandelten Symbole begrenzt sein. Von diesen Symbolen ziehen nur einige wenige unsere Aufmerksamkeit so sehr auf sich, dass wir ihre Kurshistorie abrufen möchten. Warum also 6 Bytes verwenden, wenn wir ein Symbol auch mit 1 Byte darstellen können? Das liegt daran, dass wir mit 1 Byte bis zu 255 Symbole darstellen können.

Kehren wir nun zu dem vorherigen Problem zurück. Denken Sie nur daran, wie viele Bytes auf lange Sicht eingespart werden könnten. Und dabei ist noch nicht einmal berücksichtigt, dass bei der Namensänderung eines Symbols nur ein einziger Eintrag in der Datenbank geändert werden müsste und nicht die gesamte Kurshistorie.


Abschließende Überlegungen

Im heutigen Artikel haben wir versucht zu zeigen, wie wir eine einfache und verständliche Datenbank auf die einfachste und zugänglichste Weise erstellen. Wir haben gezeigt, dass praktisch alle Befehle, die in Workbench verwendet werden können, auch in MetaEditor verwendet werden können, um die gleichen Ergebnisse zu erzielen. Es gibt jedoch eine Anweisung, die in MetaEditor nicht verwendet werden kann. Sie wurde in diesem Artikel nicht vorgestellt, ebenso wenig wie die Methoden zur Eingabe von Daten und zur Durchführung von Abfragen in der Datenbank.

Da dieses Thema jedoch sehr umfangreich ist, empfehle ich Ihnen, es durch Online-Recherche, einen Kurs oder Bücher zu diesem Thema zu studieren. Auf jeden Fall werden wir hier einige weitere Befehle zeigen, damit wir ein Mindestmaß an Material für die Verwendung von SQL in MQL5 haben. Im nächsten Artikel werden wir uns etwas ausführlicher mit SQL beschäftigen.


Referenzen

ISO 8601

DataTypes in SQLite

MySQL Online Manual

DateiBeschreibung
Experts\Expert Advisor.mq5
Zeigt die Interaktion zwischen Chart Trade und dem Expert Advisor (Mouse Study für die Interaktion erforderlich).
Indicators\Chart Trade.mq5Erzeugt ein Fenster zur Konfiguration des zu versendenden Auftrags (Mouse Study zur Interaktion erforderlich).
Indicators\Market Replay.mq5Erstellt Steuerelemente für die Interaktion mit dem Wiedergabe-/Simulationsdienst (Mouse Study für die Interaktion erforderlich).
Indicators\Mouse Study.mq5Ermöglicht die Interaktion zwischen den grafischen Bedienelementen und dem Benutzer (erforderlich sowohl für das Wiedergabesystem als auch für den Live-Marktbetrieb).
Services\Market Replay.mq5Erstellt und verwaltet den Marktwiedergabe-/Simulationsdienst (Hauptdatei des gesamten Systems).
Code VS C++\Servidor.cppErstellt und pflegt einen Server-Socket, entwickelt in C++ (Mini-Chat-Version)
Python Server.pyErstellt und verwaltet einen Python-Socket für die Kommunikation zwischen MetaTrader 5 und Excel.
Indicators\Mini Chat.mq5Ermöglicht einen Mini-Chat über einen Indikator (Servernutzung erforderlich)
Experts\Mini Chat.mq5Ermöglicht einen Mini-Chat unter Verwendung eines Expert Advisors (Server erforderlich).
Scripts\SQLite.mq5Demonstriert die Verwendung eines SQL-Skripts mit MQL5
Files\Script 01.sqlDemonstriert die Erstellung einer einfachen Tabelle mit einem Fremdschlüssel.
Files\Script 02.sqlZeigt das Hinzufügen von Werten zu einer Tabelle

Übersetzt aus dem Portugiesischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/pt/articles/12926

Beigefügte Dateien |
Anexo.zip (571.71 KB)
Ereignisgesteuerte Architektur in MQL5: Wie aus einem Expert Advisor ein vollwertiges Handelssystem wird Ereignisgesteuerte Architektur in MQL5: Wie aus einem Expert Advisor ein vollwertiges Handelssystem wird
Der Artikel widmet sich der ereignisgesteuerten Architektur in MQL5 und beschreibt den Übergang vom monolithischen OnTick-Modell zur verteilten Verarbeitung. Wir werden uns mit vordefinierten und nutzerdefinierten Ereignissen, Diensten und Nachrichtenaustausch zwischen Programmen sowie mit häufigen Architekturfehlern befassen. Ein praktisches Beispiel zeigt, wie die Interaktionen zwischen Indikatoren und einem EA organisiert werden können, um die Last zu verringern, die Lesbarkeit zu verbessern und die Wartung zu vereinfachen.
Hidden-Markov-Modelle in Handelssystemen mit maschinellem Lernen Hidden-Markov-Modelle in Handelssystemen mit maschinellem Lernen
Hidden-Markov-Modelle (HMMs) sind eine leistungsstarke Klasse probabilistischer Modelle, die für die Analyse sequenzieller Daten entwickelt wurden, bei denen beobachtete Ereignisse von einer Sequenz unbeobachteter (versteckter) Zustände abhängen, die einen Markov-Prozess bilden. Zu den wichtigsten Annahmen des HMM gehören die Markov-Eigenschaft für verborgene Zustände, was bedeutet, dass die Wahrscheinlichkeit des Übergangs zum nächsten Zustand nur vom aktuellen Zustand abhängt, und die Unabhängigkeit der Beobachtungen bei Kenntnis des aktuellen verborgenen Zustands.
Eine alternative Log-datei mit der Verwendung der HTML und CSS Eine alternative Log-datei mit der Verwendung der HTML und CSS
In diesem Artikel werden wir eine sehr einfache, aber leistungsfähige Bibliothek zur Erstellung der HTML-Dateien schreiben, dabei lernen wir auch, wie man eine ihre Darstellung einstellen kann (nach seinem Geschmack) und sehen wir, wie man es leicht in seinem Expert Advisor oder Skript hinzufügen oder verwenden kann.
Einsatz von Computer Vision im Handel mit MQL5 MQL5 (Teil 2): Erweiterung der Architektur auf die 2D-RGB-Bildanalyse Einsatz von Computer Vision im Handel mit MQL5 MQL5 (Teil 2): Erweiterung der Architektur auf die 2D-RGB-Bildanalyse
Computer Vision für den Handel: Wie es funktioniert und wie man es Schritt für Schritt entwickelt. Wir entwickeln einen Algorithmus zur Erkennung von RGB-Bildern von Kurscharts unter Verwendung des Aufmerksamkeitsmechanismus und einer bidirektionalen LSTM-Schicht. Als Ergebnis erhalten wir ein funktionierendes Modell für die Vorhersage des EURUSD-Kurses mit einer Genauigkeit von bis zu 55 % im Validierungsteil.