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

Marktsimulation (Teil 19): Erste Schritte mit SQL (II)

MetaTrader 5Tester |
24 0
Daniel Jose
Daniel Jose

Einführung

Hallo und herzlich willkommen zu einem weiteren Artikel in der Serie über den Aufbau eines Replikations-/Modellierungssystems.

Im vorangegangenen Artikel, „Marktsimulation (Teil 18): Erste Schritte mit SQL (I)“ haben wir uns mit den ersten Befehlen beschäftigt, die in SQL verwendet werden können. Ziel war es, eine erste Datenbank anzulegen, um Informationen abzurufen und später Abfragen auszuführen. Wir haben gezeigt, dass Sie in MetaEditor die gleichen Dinge verwenden können wie in jedem SQL-Programm oder -Skript. Das bedeutet, dass wir auch den gleichen Code verwenden können, allerdings innerhalb einer in MQL5 erstellten ausführbaren Datei. Daher kann es direkt von MetaTrader 5 aus ausgeführt werden.

Es gibt jedoch einen SQL-Befehl, der nicht funktioniert, wenn wir versuchen, ihn mit MetaEditor auszuführen. Wenn wir versuchen, den Befehl auszuführen, erhalten wir eine Fehlermeldung. Ich möchte jedoch eines klarstellen: Alle SQL-Befehle können in MQL5-basierten Lösungen verwendet werden. Das liegt daran, dass MetaTrader 5 SQLite verwendet. Allerdings können nicht alle von ihnen direkt von MetaEditor aus ausgeführt werden. Um Missverständnisse zu vermeiden, sollten wir uns ansehen, von welchem Befehl wir sprechen.


Der SQL-Befehl, den der MetaEditor niemals ausführt

Jetzt ist es an der Zeit, zu experimentieren. Wir fangen gerade erst an zu lernen, also werden die „Nebenwirkungen“ minimal sein. Ich möchte Sie jedoch warnen, dass Sie niemals SQL-Befehle in einer wichtigen Datenbank ausführen sollten, ohne vorher zu verstehen, was sie bewirken. Wenn Sie etwas Neues ausprobieren wollen, sollten Sie es so sicher wie möglich tun, um späteren Ärger zu vermeiden. Wie das Sprichwort sagt, kann der Glaube Berge versetzen, aber er wird Ihre Daten nicht wiederherstellen.

Schauen wir uns nun diesen „magischen“ Befehl an. In der folgenden Animation können Sie sehen, worum es geht.

Bitte beachten Sie, dass der DROP-Befehl, wenn er in SQL verwendet wird, uns erlaubt, etwas dauerhaft zu löschen. Wenn wir diesen Befehl ohne die nötige Sorgfalt verwenden, können wir ernsthafte Probleme bekommen. Beachten Sie, dass SQL nicht nach einer Bestätigung fragt, sondern einfach löscht, was wir angeben.

Bei der Verwendung von MetaEditor wird die Datenbankdatei selbst jedoch nicht gelöscht. Wenn wir jedoch denselben Befehl senden, der einen Fehler in der Animation zur SQL-Ausführung verursacht hat, wird unsere Datenbankdatei tatsächlich gelöscht.

Zunächst könnte man fälschlicherweise denken, dass MetaEditor sich weigert, den Befehl DROP auszuführen. Aber wie Sie in der Animation sehen konnten, ist das nicht der Fall, da es möglich war, eine zuvor erstellte Tabelle zu löschen.

Sie könnten auch denken, dass der CREATE DATABASE-Befehl in MetaEditor nicht funktioniert – genau wie der USE-Befehl – und das stimmt auch. Beide Befehle sind jedoch so implementiert, dass sie nicht manuell eingegeben werden müssen.

Das heißt, MetaEditor löscht keine Datenbankdateien von der Festplatte. Es gibt also einen entscheidenden Unterschied: Aus Sicherheitsgründen erlaubt MetaEditor nicht die Ausführung des Befehls DROP DATABASE, was in SQL das Löschen der Datenbankdatei selbst bedeutet.

Wir haben also soeben nachgewiesen (und Sie können dies überprüfen), dass es einen SQL-Befehl gibt, den MetaEditor nicht ausführt. Abgesehen von diesem Befehl werden alle anderen ohne Probleme ausgeführt. Dies hilft bei der Erklärung des DROP-Befehls, der nichts anderes als ein Befehl zum dauerhaften Löschen von etwas ist – sei es eine Spalte, eine Tabelle oder sogar eine ganze Datenbank. Seien Sie sehr vorsichtig mit diesem Befehl, da er vor der Ausführung nicht nach einer Bestätigung fragt.

Es gibt Möglichkeiten, versehentliche Löschungen ohne entsprechende Berechtigungen zu verhindern, aber das würde eine ausführlichere Erklärung der Arbeit mit SQL erfordern, was hier nicht unser Ziel ist. Unser Ziel ist es, Ihnen die Grundlagen zu vermitteln, die Sie benötigen, um zu verstehen, was wir als Nächstes tun werden – nämlich die Verwendung von SQL innerhalb einer in MQL5 erstellten ausführbaren Datei.


Einfügen von Daten in eine Datenbank

Der nächste Befehl, den wir uns ansehen werden, ist für das Einfügen von Informationen in eine Datenbank zuständig. Ich empfehle nicht, die Datenbankdatei manuell zu bearbeiten. Der richtige Ansatz ist immer die Verwendung von SQL-Befehlen für diesen Zweck. Es spielt keine Rolle, ob die Datenbank klein ist oder nur wenige Spalten und Datensätze enthält – Sie sollten sie niemals manuell bearbeiten. Verwenden Sie immer SQL-Befehle.

Der Befehl zum Einfügen von Daten in eine Datenbank ist recht einfach, aber Sie sollten vorsichtig sein. Sie müssen sogar aufpassen, wenn Sie es verwenden, da es nach dem Prinzip „Schlüssel-Wert“ funktioniert. Wer mit der Programmierung in Python vertraut ist, wird diese Idee schnell verstehen.

Der Grund dafür ist, dass der SQL-Befehl zum Einfügen von Daten in eine Datenbank dem Anlegen eines Dictionary in Python sehr ähnlich ist. Mit anderen Worten: Sie verwenden einen Schlüssel und weisen ihm einen Wert zu. In SQL funktionieren die Dinge jedoch ein wenig anders. Der Kerngedanke bleibt jedoch derselbe. Mal sehen, wie es tatsächlich funktioniert.

Wir werden diesen Befehl in MetaEditor hier nicht noch einmal zeigen. Ich glaube, es ist bereits klar, dass die Befehle, die wir ausführen müssen, dieselben sein werden, sodass es keinen Sinn macht, dasselbe zu wiederholen. Um die Erklärung des Befehls zu vereinfachen, werden wir ein kleines SQL-Codebeispiel verwenden, das sehr einfach und leicht zu verstehen ist.

Werfen Sie einen Blick auf den unten stehenden Code:

01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB;
02. USE MT5_Tutor_DB;
03. 
04. CREATE TABLE IF NOT EXISTS tb_Quotes
05. (
06.     of_day DATE,
07.     symbol CHAR(6),
08.     price DECIMAL(5, 2)
09. );
10. 
11. INSERT INTO tb_Quotes (of_day, symbol , price)
12.                VALUES ('2023-07-06', 'BOVA11' , 105.61);
13. 
14. SELECT * FROM tb_Quotes;

SQL-Skript

Kümmern Sie sich vorerst nicht um Zeile 14. In diesem Stadium ist es nur da, damit wir das Ergebnis leichter sehen können. Dieser Code kann sowohl in MetaEditor als auch direkt auf einem SQL-Server verwendet werden. Wenn Sie es jedoch in MetaEditor verwenden wollen, müssen Sie beachten, dass die Zeilen 01 und 02 anders ausgeführt werden müssen, wie in früheren Artikeln erläutert. Im Zweifelsfall können Sie in diesen Artikeln nachlesen, wie Sie in MetaEditor vorgehen und denselben Code ausführen. Was uns hier interessiert, sind die Zeilen 4 und 11, in denen wir die Tabelle erstellen bzw. Daten einfügen.

Obwohl dieser Code funktioniert, sollte er bei der Erstellung einer Datenbank nicht verwendet werden. Der Grund dafür ist, dass die Daten auf unbestimmte Zeit dupliziert werden können. Und wenn Sie etwas über Datenbanken wissen, wissen Sie, dass doppelte Werte vermieden werden sollten. Datenbanken sind darauf ausgelegt, solche Situationen zu verhindern. Aber selbst wenn dieses Ziel erreicht wird, ist es wahrscheinlich, dass doppelte Werte auftreten, wenn SQL-Skripte laienhaft geschrieben werden. Dieser amateurhafte Ansatz ist im obigen Code zu sehen. Da unser Ziel hier jedoch darin besteht, zu erklären, wie man einer Datenbank Werte hinzufügt, können wir Duplikate und sogar einige Einfügefehler, wie z. B. Felder mit NULL-Werten, tolerieren.

Um zu verstehen, was hier passiert, beachten Sie, dass wir in Zeile 04 die Tabelle nur dann erstellen, wenn sie noch nicht in der Datenbank vorhanden ist. Diese Tabelle wird die folgenden Spalten enthalten. In Zeile 06 geben wir zum Beispiel an, dass wir eine Spalte haben wollen, deren Inhalt ein Datum darstellt.

In Zeile 07 definieren wir eine Spalte mit einer Breite von sechs Zeichen. Dies ermöglicht es uns, den Namen des Symbols zu speichern. Diese Namenskonvention folgt dem von der brasilianischen Börse B3 verwendeten Standard.

In Zeile 08 geben wir ein Feld mit einer Breite von fünf Zeichen an, wovon zwei für Dezimalwerte verwendet werden. Dadurch können wir Preise von 0 bis 999,99 speichern, was für die auf B3 gehandelten Symbole mehr als ausreichend ist. Beachten Sie, dass wir keine Schlüssel oder Beschränkungen definieren. Das Fehlen dieser Einschränkungen führt dazu, dass doppelte Werte existieren können.

Schauen wir uns nun an, was in Zeile 11 passiert. Beachten Sie, dass der Befehl zum Einfügen von Daten in die Tabelle mit INSERT INTO beginnt. Unmittelbar danach geben wir an, in welche Tabelle die Werte eingefügt werden sollen – in unserem Fall tb_Quotes, die wir gerade erstellt haben. Dann geben wir die Namen der Spalten an, die die Werte erhalten sollen.

Achtung: Wir können die Spalten in beliebiger Reihenfolge auflisten, aber wir müssen genau die gleichen Namen verwenden, die in der Tabelle definiert sind. Wenn wir einen anderen Namen verwenden, wird der Befehl zu einem Fehler führen. Nachdem wir die Reihenfolge der Spalten festgelegt haben, fügen wir das Wort VALUES hinzu und beginnen mit der Angabe der einzufügenden Werte. In diesem Stadium müssen die Werte in der gleichen Reihenfolge wie die angegebenen Spalten stehen. Mit anderen Worten, wenn wir die Preisspalte vor der Symbolspalte deklarieren, müssen wir den Preis vor dem Symbol in der Werteliste angeben.

Dies mag etwas verwirrend erscheinen, aber wenn Sie den nachstehenden Code verwenden, erhalten Sie das gleiche Ergebnis wie in dem oben gezeigten Skript zum Einfügen von Werten.

INSERT INTO tb_Quotes (of_day, price, symbol)
               VALUES ('2023-07-06', 105.61, 'BOVA11');

SQL-Skript

Bitte beachten Sie, dass ich die Reihenfolge, in der die Spalten deklariert werden, geändert habe. Deshalb musste ich auch die Reihenfolge der Werte ändern. Dies ist der wichtigste Aspekt, auf den Sie achten sollten. Nun fragen Sie sich vielleicht: Warum wird das Datum in diesem speziellen Format angegeben? Der Grund dafür ist, dass dies das von MySQL erwartete Format ist, d. h. zuerst das Jahr, dann der Monat und schließlich der Tag. Einige Datenbanken lassen auch andere Formate zu, die dann beim Speichern der Daten in dieses Format konvertiert werden. Ein Beispiel ist SQL Server, das das Format Tag-Monat-Jahr zulässt. In der Datenbank wird in jedem Fall das Format Jahr-Monat-Tag verwendet.

Wenn Sie das oben gezeigte Skript ausführen, wird das Ergebnis entsprechend angezeigt.

Achtung: Wenn Sie Zeile 11 erneut ausführen, werden die gleichen Informationen in der Datenbank dupliziert. Das Ergebnis wird diese Verdoppelung widerspiegeln:

Man könnte meinen, dass dies kein Problem ist und dass man die doppelte Zeile einfach löschen kann. Ja, es ist leicht, sie zu entfernen, aber zuerst müssen Sie verstehen, dass dieses Beispiel einfach ist. Stellen Sie sich nun eine echte Datenbank vor: Sie kann eine riesige Anzahl von Datensätzen enthalten. Doppelte Einträge können die Datenbank völlig unbrauchbar machen. Außerdem wird es dadurch schwierig, bestimmte Datensätze zu ändern oder zu aktualisieren. Deshalb erfordert die Erstellung einer Datenbank eine sorgfältige Untersuchung und Planung.

Obwohl das obige Skript konzeptionell korrekt ist (da es ausgeführt wird), ist es nicht ideal, da es doppelte Daten zulässt. Außerdem ist es nicht möglich, Datensätze zu ändern oder zu aktualisieren. Um dies besser zu verstehen, lassen Sie uns eine andere Art des Einfügens von Daten in die Datenbank verwenden. Anstatt alle Spalten und Werte auf einmal zu deklarieren, werden wir dies Schritt für Schritt tun, was in vielen Szenarien üblich ist. Der Code zum Einfügen der gleichen Werte wie im vorherigen Skript würde also wie folgt aussehen:

01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB;
02. USE MT5_Tutor_DB;
03. 
04. CREATE TABLE IF NOT EXISTS tb_Quotes
05. (
06.     of_day DATE,
07.     symbol CHAR(6),
08.     price DECIMAL(5, 2)
09. );
10. 
11. INSERT INTO tb_Quotes (of_day) VALUES ('2023-07-06');
12. INSERT INTO tb_Quotes (symbol) VALUES ('BOVA11');
13. INSERT INTO tb_Quotes (price) VALUES (105.61);
14.                
15. SELECT * FROM tb_Quotes;

SQL-Skript

Beachten Sie, dass wir hier buchstäblich das Konzept „Schlüssel-Wert“ verwenden, ähnlich wie bei der Erstellung von Wörterbüchern in Python. Und ja, wir können dies in SQL tun, und die Datenbank wird die Werte in der angegebenen Tabelle speichern. Achten Sie jedoch auf das Ergebnis der Ausführung dieses Skripts – Sie sehen es weiter unten.

„Aber was ist passiert? Warum haben wir dieses Ergebnis erhalten und nicht das vorherige?“ Hierfür gibt es zwei Gründe. Die erste ist, dass wir der Datenbank einfach Daten hinzufügen. Zum anderen ist die Datenbank so strukturiert, dass doppelte Werte möglich sind. Wenn wir versuchen, einen Datensatz zu ändern, können wir dies nicht tun, wenn die Datenbank wie in diesen Skripten gezeigt erstellt wurde. Wir müssen eine Möglichkeit schaffen, einen bestimmten Datensatz auszuwählen, damit wir ihn bearbeiten und seinen Wert ändern können. Auf diese Weise können wir die Daten nacheinander im Format „Schlüssel-Wert“ einfügen. Aber wie können wir das tun?

Der erste Schritt besteht darin, eine der Spalten in einen eindeutigen Schlüssel zu verwandeln. Dies ist die Ausgangsbasis. Auf diese Weise vermeiden wir doppelte Einträge in der Datenbank. Es stellt sich jedoch eine wichtige Frage: Wie lässt sich dies am besten bewerkstelligen?

Manche Leute legen zu diesem Zweck eine eigene Spalte an, was keine schlechte Idee ist. Die Art der Lösung hängt jedoch vom jeweiligen Einzelfall ab. In unserem Fall ist es nicht notwendig, eine zusätzliche Spalte zu erstellen, die als eindeutiger Schlüssel dient. Dies kann einfach durch die Auswahl einer geeigneten vorhandenen Spalte geschehen. Lassen Sie uns also darüber nachdenken.

In der Spalte „Price“ können die Werte manchmal unterschiedlich und manchmal gleich sein, sodass es keine gute Wahl ist, sie eindeutig zu machen. Die Spalte, die den Symbolnamen enthält, wird jedoch in jedem neuen Datensatz wiederholt. Die Datumsspalte ist ein möglicher Kandidat.

Aber warum „möglich“ und nicht „sicher“? Der Grund liegt darin, wie häufig wir neue Datensätze in die Datenbank einfügen wollen. Und warum ist das wichtig? Wenn wir nämlich in sehr kurzen Abständen Datensätze einfügen wollen, müssen wir möglicherweise eine separate Spalte speziell für diesen Zweck erstellen. Wenn die Datensätze jedoch einmal pro Tag eingefügt werden, kann das Datum allein ausreichend sein.

Wenn wir also den Tagespreis eines Symbols speichern wollen, können wir das erste Skript wie folgt ändern:

01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB;
02. USE MT5_Tutor_DB;
03. 
04. CREATE TABLE IF NOT EXISTS tb_Quotes
05. (
06.     of_day DATE PRIMARY KEY,
07.     symbol CHAR(6),
08.     price DECIMAL(5, 2)
09. );
10. 
11. INSERT INTO tb_Quotes (of_day, symbol , price)
12.                VALUES ('2023-07-06', 'BOVA11' , 105.61);
13. 
14. SELECT * FROM tb_Quotes;

SQL-Skript

Beachten Sie, dass alles, was im ersten Skript geändert wurde, genau in Zeile 06 steht, wo wir den Begriff PRIMARY KEY hinzugefügt haben. An dieser Stelle geben wir an, dass der Wert der Spalte of_day der Primärschlüssel dieser Tabelle sein wird. Wir können mehr als eine Spalte als Primärschlüssel haben. Es dürfen jedoch KEINE doppelten Werte im Primärschlüssel existieren. Wenn wir dies versuchen, wird SQL dies als Fehler behandeln und der Befehl wird nicht ausgeführt.

Wenn wir also versuchen, den INSERT INTO-Befehl erneut mit demselben Datum auszuführen, das bereits in der Datenbank vorhanden ist, werden wir keinen Erfolg haben. Wir müssen ein anderes Datum angeben, damit der Datensatz, den wir einfügen wollen, von SQL akzeptiert wird. Diese sehr einfache Maßnahme gewährleistet die Konsistenz der Datenbank und verhindert doppelte Datensätze. Wie bereits erwähnt, löste eine einfache Maßnahme eine ganze Reihe von Problemen.

Das Ergebnis der Ausführung des obigen Skripts ist in der folgenden Abbildung zu sehen:

Bitte beachten Sie, dass es sich von den anderen Bildern unterscheidet. Das Ergebnis der Abfrage ist jedoch dasselbe. Natürlich werden Sie denken, dass wir jetzt in der Lage sein werden, Daten in dem Format „Schlüssel-Wert“ oder genauer gesagt in dem Format „Spalten-Wert“ einzufügen. Ja, das können wir tun. Ihre erste Idee wäre also, ein Skript zu erstellen, wie unten gezeigt:

01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB;
02. USE MT5_Tutor_DB;
03. 
04. CREATE TABLE IF NOT EXISTS tb_Quotes
05. (
06.     of_day DATE PRIMARY KEY,
07.     symbol CHAR(6),
08.     price DECIMAL(5, 2)
09. );
10. 
11. INSERT INTO tb_Quotes (of_day) VALUES ('2023-07-07');
12. INSERT INTO tb_Quotes (symbol) VALUES ('BOVA11');
13. INSERT INTO tb_Quotes (price) VALUES (105.61);
14. 
15. SELECT * FROM tb_Quotes;

SQL-Skript

Denken Sie daran, dass dieses Skript sofort ausgeführt wird, nachdem Sie den Wert in of_day erhalten haben. Um also zu verhindern, dass SQL die Erstellung des Datensatzes blockiert, ändern wir das Datum. Wir verwenden also Logik und zeigen, dass wir wissen, wie Primärschlüssel funktionieren. Beim Ausführen dieses Skripts tritt jedoch ein Fehler auf. Und da dies von beruflichem Interesse ist, versuchen wir zu sehen, was in der Datenbank passiert ist, und wir erhalten ein Bild wie dieses:

Nun könnten Sie sich fragen: Warum ist ein Fehler aufgetreten, wenn der Datensatz erstellt wurde? Der Grund dafür ist, dass wir in Zeile 12 versuchen, Informationen einzufügen. Dabei wird SQL versuchen, einen neuen Datensatz zu erstellen. Aber warten Sie einen Moment. Warum sollte SQL einen neuen Datensatz erstellen, wenn ich nicht angegeben habe, dass wir einen neuen Primärschlüssel erstellen? Ich dachte, dass wir, solange wir einen Primärschlüssel verwenden, denselben Datensatz verwenden würden. Tatsächlich begehen viele Menschen diesen Fehler, weil sie das Wesentliche des Konzepts nicht verstehen.

Aber lassen Sie uns die Situation klären. Wenn wir den Befehl INSERT INTO verwenden, legen wir einen neuen Datensatz in der Datenbank an. Um diesen Datensatz zu ändern (und genau das ist in diesem Fall erforderlich), müssen wir einen anderen Befehl verwenden. Diesen Punkt behandeln wir im nächsten Abschnitt separat.


Ändern und Aktualisieren eines Datensatzes

Damit SQL weiß, welcher Datensatz zu ändern oder zu aktualisieren ist, benötigen wir einen eindeutigen Schlüssel, d. h. einen Primärschlüssel. Da wir den Wert of_day als Primärschlüssel definiert haben, müssen wir als erstes versuchen, ihn der Datenbank hinzuzufügen. Wenn er bereits existiert, lässt SQL die Erstellung eines neuen Datensatzes nicht zu.

Nachdem wir den Primärschlüssel in der Datenbank definiert und registriert haben, können wir die Werte anderer Spalten ändern oder aktualisieren. Hinweis: Versuchen Sie nicht, den Wert des Primärschlüssels zu ändern, um Probleme zu vermeiden. Wir müssen zuerst den Schlüssel erstellen und dann den Datensatz aktualisieren. Nachfolgend finden Sie den Code, der die Aktualisierung durchführt, um einen neuen Datensatz unter Verwendung des Schlüssel-Wert-Konzepts, genauer gesagt des Spaltenwerts, zu erstellen:

01. CREATE DATABASE IF NOT EXISTS MT5_Tutor_DB;
02. USE MT5_Tutor_DB;
03. 
04. CREATE TABLE IF NOT EXISTS tb_Quotes
05. (
06.     of_day DATE PRIMARY KEY,
07.     symbol CHAR(6),
08.     price DECIMAL(5, 2)
09. );
10. 
11. INSERT INTO tb_Quotes (of_day) VALUES ('2023-07-07');
12. UPDATE tb_Quotes SET symbol = 'BOVA11' WHERE of_day = '2023-07-07';
13. UPDATE tb_Quotes SET price = 105.61 WHERE of_day = '2023-07-07';
14. 
15. SELECT * FROM tb_Quotes;

SQL-Skript

Das Ergebnis der Ausführung dieses Skripts ist unten zu sehen:

Bitte beachten Sie, dass wir die Tatsache berücksichtigen, dass vor der Ausführung des obigen Skripts bereits ein Datensatz existiert. Deshalb machen wir es so. Dann erstellen wir in Zeile 11 einen Schlüssel, der anzeigt, dass wir der Datenbank einen neuen Datensatz hinzufügen werden. Nachdem wir diesen Schlüssel erstellt haben, verwenden wir den Befehl UPDATE wie folgt:

  1. Unmittelbar nach dem Befehlsnamen geben wir den Tabellennamen an.
  2. Nach dem Tabellennamen verwenden wir den SET-Befehl; er zeigt an, dass wir eine bestimmte Spalte ändern oder aktualisieren werden.
  3. Als Nächstes haben wir den Spaltennamen mit dem entsprechenden Wert, den wir in die Spalte eingeben werden.
  4. Damit SQL den zu aktualisierenden Datensatz findet, verwenden wir den WHERE-Befehl, der angibt, welcher Schlüssel verwendet werden soll.

Hier sind noch ein paar Fragen. Aber wir wollen die Dinge nicht verkomplizieren. Lassen Sie uns alles so einfach wie möglich halten. Ziel ist es, Ihnen eine Grundlage für die Verwendung von SQL in Verbindung mit MetaTrader 5 zu vermitteln, und nicht, einen vollständigen SQL-Kurs durchzuführen. Ich schlage jedoch vor, dass wir uns etwas tiefer in das heutige Material vertiefen, denn wir können hier noch viel mehr tun, um SQL zu beschleunigen und eine Überlastung mit ineffizienten Abfragen zu vermeiden. Hier geht es um Didaktik, nicht um Effizienz.

So, jetzt wissen wir, wie man einen Datensatz einfügt, ändert und aktualisiert. Wir müssen nur wissen, wie man einen Datensatz löscht. Aber auch hier sollten wir das Material trennen, um Verwirrung zu vermeiden.


Löschen eines Datensatzes

Das Löschen eines Datensatzes aus der Datenbank ist eine sehr einfache Angelegenheit. Es gibt mehrere Möglichkeiten, ganze Zweige von Datensätzen aus der Datenbank zu löschen. Aber, ich wiederhole, wir werden uns die einfachste Methode ansehen, damit Sie zumindest einen Datensatz aus der Datenbank löschen können.

Nehmen wir an, Sie haben einen Datensatz für den 7. Juli 2023 angelegt, dann aber festgestellt, dass an diesem Tag kein Handel stattfand. Daher möchten Sie diesen Datensatz aus der Datenbank löschen, da ein ungültiger Datensatz die gesamte Datenbank zerstören könnte. Eine Möglichkeit, dies zu tun, ist die Verwendung des folgenden Skripts:

1. USE MT5_Tutor_DB;
2. 
3. DELETE FROM tb_Quotes WHERE of_day = '2023-07-07';
4. 
5. SELECT * FROM tb_Quotes;

SQL-Skript

Bitte beachten Sie, dass wir zunächst die Datenbank in Zeile 01 auswählen. In Zeile 03 führen wir einen Befehl zum Löschen eines Datensatzes aus der Datenbank aus. Wie wurde das gemacht? Auf die einfachste Art und Weise. Das heißt, wir geben zuerst den Befehlsnamen an, genauer gesagt: DELETE FROM; dann der Name der Tabelle, in der sich der Datensatz befindet, in diesem Fall tb_Quotes. Als Nächstes geben wir an, was gelöscht werden soll. Dazu verwenden wir den WHERE-Befehl, gefolgt von Informationen, die SQL mitteilen, nach welcher Art von Übereinstimmung zu suchen ist. In unserem Fall verwenden wir den Primärschlüssel des Tages, den wir aus der Datenbank löschen wollen.

Um das Skript zu vervollständigen, bitten wir SQL in Zeile 05, uns die Tabelle zu zeigen. Ist Ihnen aufgefallen, wie einfach es ist, einen Datensatz zu löschen? Die gezeigte Methode ist jedoch nur eine von vielen möglichen.


Abschließende Überlegungen

In diesem Artikel haben wir versucht, das Material so weit wie möglich zu vereinfachen. Ich weiß, dass es viel bessere Wege gibt, um das Gleiche zu tun. Wenn Sie bereits Erfahrung und Kenntnisse mit SQL-Programmen haben, wissen Sie sehr gut, dass alle hier vorgestellten Inhalte die wahren Grundlagen von SQL sind. Für diejenigen, die es nicht wissen, ist der Begriff „Reis und Bohnen“ ein regionaler Ausdruck, der besagt, dass wir nur das Nötigste brauchen, aber auch ein Minimum an Abwechslung, damit wir zufrieden sind.

Aber zurück zu unserem Thema: Ich möchte Sie ein wenig darauf vorbereiten, dass Sie mithilfe dieser Artikel etwas in SQL machen können. Ich möchte nicht, dass Sie Zeit damit verschwenden, sinnlose Dinge zu programmieren und verschiedene Unterprogramme zu erstellen, um das zu erreichen, was bereits in SQL enthalten ist.

Ich tue dies, um Sie zu motivieren, stets nach angemessenem und umfassenderem Wissen zu suchen, damit Sie nicht in Ihrer Komfortzone bleiben und Zeit mit der Programmierung von Dingen verschwenden, die viel einfacher, effizienter und sicherer zu erledigen wären, wenn Sie das entsprechende Werkzeug verwenden würden.

Oftmals runzeln viele Menschen verständnislos die Stirn, wenn sie einen Programmierer oder eine Gruppe von Programmierern sehen, die ein bestimmtes Tool verwenden, und sagen, dass es nicht ihren persönlichen Interessen entspricht. Aber ich möchte Ihnen, liebe Leserinnen und Leser, die professionelle Programmierer werden wollen, sagen, dass Sie die Eitelkeit vergessen sollten. Beginnen Sie mit der Nutzung der verfügbaren Werkzeuge. Sie werden viel produktiver, haben mehr Selbstvertrauen in sich selbst und in das, was Sie tun, und, was am wichtigsten ist, Sie werden deutlich mehr Anerkennung finden. Denn während andere sich den Kopf zerbrechen, um eine Lösung zu finden, finden Sie dank Ihrer umfassenderen Kenntnisse sofort das richtige Werkzeug und erstellen problemlos die Lösung, die der Kunde braucht. Die Botschaft dieses Artikels ist die folgende: 

Die Welt der Technologie entwickelt sich sehr schnell weiter. Bis wir etwas vollständig verstanden haben, ist es oft schon veraltet.

Überlegen Sie sich das. Wir sehen uns im nächsten Artikel. Es gibt noch ein paar weitere Punkte, die über SQL erklärt werden müssen, bevor wir mit der Erstellung eines Systems für die Replay-/Simulationssystem unter Verwendung der Kombination von SQL und MQL5 beginnen können. Also, bis später.

Datei Beschreibung
Experts\Expert Advisor.mq5
Zeigt die Interaktion zwischen Chart Trade und dem Expert Advisor (Mouse Study für die Interaktion erforderlich).
Indicators\Chart Trade.mq5 Erzeugt ein Fenster zur Konfiguration der zu sendenden Order (Mouse Study zur Interaktion erforderlich).
Indicators\Market Replay.mq5 Erstellt Steuerelemente für die Interaktion mit dem Wiedergabe-/Simulationsdienst (Mouse Study für die Interaktion erforderlich).
Indicators\Mouse Study.mq5 Ermöglicht die Interaktion zwischen den grafischen Steuerelementen und dem Nutzer (erforderlich sowohl für das Wiedergabesystem als auch für den Live-Marktbetrieb).
Services\Market Replay.mq5 Erstellt und verwaltet den Marktwiedergabe-/Simulationsdienst (Hauptdatei des gesamten Systems).
VS C++ Code Server.cpp Erstellt und verwaltet einen Socket-Server in C++ (Mini-Chat-Version).
Python Code Server.py Implementiert Python-Socket-Kommunikation zwischen MetaTrader 5 und Excel.
Indicators\Mini Chat.mq5 Implementiert einen Mini-Chat über einen Indikator (Servernutzung erforderlich).
Experts\Mini Chat.mq5 Ermöglicht einen Mini-Chat mit einem Expert Advisor (Server erforderlich).
Scripts\SQLite.mq5 Demonstriert die Verwendung eines SQL-Skripts mit MQL5.
Files\Script 01.sql Demonstriert die Erstellung einer einfachen Tabelle mit einem Fremdschlüssel.
Files\Script 02.sql Demonstriert das Einfügen von Werten in eine Tabelle.

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

Beigefügte Dateien |
Anexo.zip (571.71 KB)
Selbstlernender Expert Advisor mit einem neuronalen Netz auf Basis einer Markov-Zustandsübergangsmatrix Selbstlernender Expert Advisor mit einem neuronalen Netz auf Basis einer Markov-Zustandsübergangsmatrix
Selbstlernende EA mit einem neuronalen Netz auf der Grundlage einer Zustandsmatrix. Wir kombinieren Markov-Ketten mit einem mehrschichtigen neuronalen Netz MLP, das mit der ALGLIB MQL5-Bibliothek entwickelt wurde. Wie können Markov-Ketten und neuronale Netze für Prognosen im Devisenhandel kombiniert werden?
Von der Grundstufe bis zur Mittelstufe: Vererbung Von der Grundstufe bis zur Mittelstufe: Vererbung
Zweifellos wird dieser Artikel einen erheblichen Teil Ihrer Zeit in Anspruch nehmen, um zu verstehen, wie und warum das hier vorgestellte Material funktioniert. Denn alles, was hier gezeigt wird, orientiert sich zunächst an der objektorientierten Programmierung, basiert aber tatsächlich auf den Prinzipien der strukturierten Programmierung.
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.
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.