Diskussion zum Artikel "SQLite: Natives Arbeiten mit SQL-Datenbanken in MQL5"

 

Neuer Artikel SQLite: Natives Arbeiten mit SQL-Datenbanken in MQL5 :

Die Entwicklung von Handelsstrategien ist mit dem Umgang mit großen Datenmengen verbunden. Jetzt können Sie mit Datenbanken mit SQL-Abfragen auf der Basis von SQLite direkt in MQL5 arbeiten. Ein wichtiges Merkmal dieser Engine ist, dass die gesamte Datenbank in einer einzigen Datei auf dem PC des Benutzers abgelegt wird.

Debuggen von SQL-Abfragen in MetaEditor

Alle Funktionen für die Arbeit mit der Datenbank geben im Falle eines erfolglosen Codes einen Fehlercode zurück. Die Arbeit mit ihnen sollte keine Probleme verursachen, wenn Sie vier einfache Regeln befolgen:

  1. alle Abfrage-Handles sollten nach der Benutzung durch DatabaseFinalize() zerstört werden;
  2. die Datenbank sollte vor der Fertigstellung mit DatabaseClose() geschlossen werden;
  3. die Ergebnisse der Abfrageausführung sollten überprüft werden;
  4. im Falle eines Fehlers wird eine Abfrage zuerst zerstört, während die Datenbank danach geschlossen wird.

Am schwierigsten ist es, den Fehler zu verstehen, wenn die Abfrage nicht erstellt wurde. Der MetaEditor ermöglicht das Öffnen von *.sqlite-Dateien und die Arbeit mit ihnen unter Verwendung von SQL-Abfragen. Sehen wir uns an, wie dies am Beispiel der Datei company.sqlite geschieht:

1. Öffnen Sie die Datei company.sqlite im gemeinsamen Terminal-Ordner.

2. Nach dem Öffnen der Datenbank können wir die Tabelle COMPANY im Navigator sehen. Klicken Sie doppelt darauf.

3. Die Abfrage "SELECT * FROM COMPANY" wird automatisch in der Statusleiste erstellt.

4. Die Abfrage wird automatisch ausgeführt. Sie kann auch durch Drücken von F9 oder durch Klicken auf Ausführen ausgeführt werden.

5. Das Ergebnis der Abfrageausführung sehen.

6. Wenn etwas nicht stimmt, werden die Fehler im Journal des Editors angezeigt.


SQL-Abfragen ermöglichen es, Statistiken über Tabellenfelder zu erhalten, z.B. die Summe oder den Durchschnitt. Lassen Sie uns die Abfragen machen und prüfen, ob sie funktionieren.

Autor: MetaQuotes

 

Wer es herausgefunden hat, zeige bitte die Umsetzung dieser Aufgabe.

  1. Es gibt zwei Terminals.
  2. Es ist notwendig, Echtzeitkurse eines Symbols von Terminal1 auf das entsprechende benutzerdefinierte Symbol von Terminal2 zu übertragen.
 
Vielen Dank für den Artikel und die guten Beispiele für nützliche Anwendungen.
 
fxsaber:

Wer es herausgefunden hat, zeige bitte die Umsetzung einer solchen Aufgabe.

  1. Es gibt zwei Terminals.
  2. Es ist notwendig, Echtzeit-Kurse eines Symbols von Terminal1 auf das entsprechende benutzerdefinierte Symbol von Terminal2 zu übertragen.

Verstehe ich das richtig, dass im Rahmen dieser Aufgabe in beiden Fällen (beim Lesen der Basis auf Terminal2 und beim Schreiben auf die Basis in Terminal1) eine Blockierung durch den Transaktionsmechanismus erfolgen muss?


Wie kann man am einfachsten feststellen, dass die Datenbank aktualisiert wurde?

 
fxsaber:

Verstehe ich im Rahmen dieser Aufgabe richtig, dass in beiden Fällen (beim Lesen der Basis auf Terminal2 und beim Schreiben auf die Basis in Terminal1) eine Blockierung durch den Transaktionsmechanismus erfolgen sollte?

Nein, dies ist eine andere Sperrung. Wenn die Basis bereits in einem anderen MQL5-Programm oder MetaEditor geöffnet ist, erhalten Sie den Fehler 5124, wenn Sie versuchen, sie zu ändern.

 
Rashid Umarov:

Nein, dies ist eine andere Sperre. Wenn die Basis bereits in einem anderen MQL5-Programm oder MetaEditor geöffnet ist, erhalten Sie den Fehler 5124, wenn Sie versuchen, sie zu ändern.

Es stellt sich heraus, dass der Datenaustausch weniger Möglichkeiten hat als über Dateien?

 
fxsaber:

Hat es den Anschein, dass die gemeinsame Nutzung von Daten weniger Möglichkeiten bietet als die gemeinsame Nutzung von Dateien?

hängt von der Datenbankimplementierung selbst ab

Dateien sind immer unpraktisch - sequentieller Zugriff und dieselben Probleme bei der Arbeit mit einer einzelnen Datei

 
fxsaber:

Hat es den Anschein, dass die gemeinsame Nutzung von Daten weniger Möglichkeiten bietet als die gemeinsame Nutzung von Dateien?

SQLite ist keine serverseitige Datenbank, sondern eine eingebettete Datenbank. Daher kann sie nicht von verschiedenen Prozessen aus gemeinsam und gleichzeitig genutzt werden.

Ihr Zweck ist die interne Nutzung in MQL5 und die gemeinsame (nicht gleichzeitige) Nutzung/Übertragung mit anderen Systemen.

Der Vorteil der eingebauten internen Datenbank ist, dass sie in allen Agenten verfügbar ist und es Ihnen ermöglicht, bequem mit Daten aus der Ferne und im Strategietester zu arbeiten.


Im Rahmen von verschiedenen MQL5 Expert Advisors, die in einem Terminal laufen, können Sie dieselbe Datenbank gemeinsam nutzen.

 
Renat Fatkhullin:

SQLite ist keine serverseitige Datenbank, sondern eine eingebettete Datenbank. Daher kann sie nicht gemeinsam und gleichzeitig von verschiedenen Prozessen genutzt werden.

Innerhalb verschiedener Experten, die im selben Terminal laufen, können Sie dieselbe Datenbank gemeinsam nutzen.

Jetzt habe ich verstanden, danke.

 

Ist es möglich, das, was für µl5 beschrieben ist, in µl4 zu verwenden?

Sind die Funktionen und Bibliotheksoperationen kompatibel, oder gilt das nur für µl5?

 
Chiripaha:

Kann das, was für µl5 beschrieben ist, auch in µl4 verwendet werden?

Sind die Funktionen und Bibliotheksoperationen kompatibel, oder gilt das nur für µl5?

Native SQLite-Unterstützung gibt es nur in MetaTrader 5 & MQL5.

Es handelt sich nicht um eine Bibliothek, sondern um eine Standard-MQL5-Funktionalität mit tiefer Integration in das gesamte System, einschließlich der Agenten für Strategietests.