Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Gestern war ich plötzlich von derSQLite-Datenbank fasziniert. Es gibt eine fertige Python-Schnittstelle dafür -https://docs.python.org/3.6/library/sqlite3.html.
Deshalb habe ich bis spät in die Nacht die Dokumentation sowohl zur Datenbank selbst als auch zur Python-Schnittstelle gelesen. Um die Verwirrung zu beseitigen, habe ich ein paar völlig nutzlose Programme für SQLite geschrieben. Generell fasziniert. Vergeudet vor vernachlässigt. Was ich zum ersten Mal gelernt habe, ist, dass SQLite DB im Speicher organisiert werden kann - mit einem Befehl: conn = sqlite3.connect(":memory:") - dies ist in Python. Das ist alles, was es braucht. Dann in ein paar Abfragen, Tabellen erstellen, und arbeiten.
Früher habe ich für denselben Zweck MS SQL Server oder BD Access verwendet und die Datenbank im Speicher über DataTable-Tabellen der NET-Bibliotheken organisiert. Und hier, eine 1,5 MB große DLL und ein Befehl,))), und Sie müssen nichts tun.
Wozu ist das gut? Es ist nicht notwendig, es ist notwendig. Während Ihr System dort etwas zählt, kommen neue Daten von der Börse - der Markt, Geschäfte, Notierungen - und Sie schieben sie in die Datenbank im Speicher. Und wenn das System neue Daten benötigt, sind sie alle im Speicher vorhanden. Sie heben es auf und benutzen es. Sie müssen nicht auf Zecken oder ähnliches warten. Und wenn etwas passiert, können Sie sich jederzeit von den Berechnungen ablenken und das Problem lösen. Auch hier sind alle Informationen bereits in Ihrem Gedächtnis gespeichert. Natürlich benötigen Sie Benutzerereignisse und Threads, aber das ist nirgendwo ein Problem.
Die Informationen aus der Speicherdatenbank werden also im Hintergrund in der Hauptdatenbank gespeichert.
Oh, und SQLite, obwohl klein, unterstützt den Lese- und Schreibzugriff mehrerer Benutzer. Und im Allgemeinen ist fast alles wie bei Erwachsenen - es gibt zwar einige Einschränkungen, aber in den meisten Fällen sind sie entweder unbedeutend oder stören überhaupt nicht.
Ich habe angefangen, eine SQLite-Datenbank zu erstellen, es ist nicht schlecht, etwas Nützliches zu tun. Beginnen wir damit, eine CSV-Datei in die Datenbank zu importieren.
Hier ist ein Ausschnitt aus der Datei selbst, insgesamt etwa 55 Tausend Zeilen.
Wir haben den Import von CSV-Dateien in Python bereits beschrieben, wir werden hier nicht aufhören. Als Ergebnis haben wir eine CSV-Titelzeichenfolge und eine Datenzeichenfolge.
Jetzt das Python-Programm selbst:
Wir sehen uns die SBER-Tabelle in SQLiteStudio an:
Ja, der ganze Spaß dauert 3-4 Sekunden nach dem Start des Programms, einschließlich des Öffnens und Lesens der CSV-Datei. Übrigens ist die Größe der Datenbankdatei kleiner als eine vergleichbare CSV-Datei. Die gesamte Datenbank ist 4,3 MB groß, die CSV-Größe beträgt 5,2 MB.
Nun, der Rest wird auf die gleiche Weise erledigt).
Lassen Sie uns unser unbeliebtes Thema mit den Einheimischen fortsetzen.
Im Forum gibt es regelmäßig Beiträge über das Lesen von Daten aus CSV-Dateien. Allein in der letzten Woche waren es schon zwei - wir mussten die vorletzten paar Zeilen lesen.
Letztes Mal haben wir Daten aus einer CSV-Datei in die Datenbank geschrieben, heute werden wir das Problem des Lesens von Zeilen aus der Datenbank lösen.
In unserer Datenbanktabelle befinden sich etwa 55 Tausend Zeilen. Versuchen wir, nicht einmal die letzte, sondern die 27568ste zu lesen. Zu diesem Zweck schreiben wir eine SQL-Abfrage und senden sie an die Datenbank:
Das war's. Wir haben das Ergebnis:
Ausführungszeit ~0,003004 sec.
Lassen Sie uns die Aufgabe schwieriger gestalten. Suche nach Zeilen, bei denen Close=22730.0000000
Alles ist gleich, aber die Abfrage sieht anders aus.
Das Ergebnis:
Es wurden 20 Zeilen zurückgegeben. Ausführungszeit ~0,0625c.
Schließlich suchen wir den höchsten Preis in der Spalte (Feld) CLOSE
B Antwort:
Nun, und eine Ausführungszeit von -0,035s
Wie Sie sehen, ist alles sehr einfach und schnell. Wäre ich ein CSV-Dateikonsument, würde ich denken, warum sollte ich nicht eine DL mit 5-6 Funktionen unter MT schreiben und DB anstelle von CSV-Dateien verwenden.
PS Die CSV-Datei, mit der die Datenbank manipuliert wurde, befindet sich in dem Archiv, das vor einigen Beiträgen angehängt wurde.Ja, das Leben ist nicht einfach für MQL4-5-Entwickler. Ich habe gegoogelt, ob es Lösungen für die Verbindung von MT mit SQLite gibt. Der SQL5.com Artikel SQL AND MQL5: WORKING WITH SQLITE DATABASE direkt von MQ und einige Materialien von Drittanbietern. Die SQLite-Datenbank ist zu kompliziert, und die Programme sind im Gegensatz zu ähnlichen Programmen in Python nicht so einfach.
Um zum ersten Mal mit SQLite zu arbeiten, genügt es, nur 7-8 High-Level-SQLite-Funktionen in MQL zu importieren. Der Rest wird größtenteils erst in ferner Zukunft benötigt werden. Diese Arbeit kann von einem C++-Programmierer im schlimmsten Fall in ein paar Tagen erledigt werden. Sie können aber auch vorgefertigte Lösungen ausprobieren.
PS Schauen Sie sich den ArtikelSQL AND MQL5: WORKING WITH SQLITE DATABASE genauer an. Vielleicht klappt es ja sogar. Es verwendet dort nur die x86-DLL, um die x64-DLL für MT vorzubereiten. Der Artikel ist immerhin von 2014. Aber, wenn ich mich nicht irre, gibt es bereits eine x64 SQLite DLL. Sie können versuchen, damit zu kompilieren.
Yuriy Asaulenko:
Ja, es ist kein einfaches Leben für MQL4-5-Entwickler...... Ich denke, es ist zu kompliziert, und die Programme sind im Gegensatz zu ähnlichen Programmen in Python nicht einfach.
Imho sind die Probleme in Python nicht weniger: Sie brauchen eine Historie, Sie brauchen ein Balkendiagramm, Sie brauchen technische Indikatoren... Ich würde auch über einen Tester und Trading zu.... nachdenken.
Wie heißt es doch so schön: Filzstifte sind für jeden Geschmack etwas anderes!
imho haben Sie genauso viele Probleme mit Python: Sie brauchen eine Historie, Sie brauchen ein Balkendiagramm, Sie brauchen technische Indikatoren... Ich würde auch über einen Tester und trading.... nachdenken
Wie heißt es doch so schön: Filzstifte sind für jeden Geschmack etwas anderes!
Die Geschichte ist kein Thema, und sie aufzupumpen auch nicht. Technische Indikatoren sind kein Thema, außerdem habe ich nur meine eigenen Indikatoren. Wenn Sie sie brauchen, gibt es dort einfache Algorithmen.
Ich habe ein Werkzeug zum Zeichnen von Balken in Python. Brauche ich das wirklich für mein Autosystem? - Ich schreibe kein Terminal.)
Und es ist nicht das erste derartige System, es gab schon früher VB Excel, C++ und C#. Eigentlich wird Python gewählt, weil die Bibliotheken sehr umfangreich sind und man nicht den Wunsch hat, den Zoo aus einer Mischung verschiedener Sprachen und Schnittstellen zu vervielfältigen, um einen Zugang zu diesen Bibliotheken zu erhalten. Außerdem kann man mit Python modellieren - dafür ist es gedacht, und das ist bei der Systementwicklung sehr wichtig. Nehmen wir an, es ist ein direkter Konkurrent von MathLab).
Frage.
Ist es möglich, mql-kim und python kanvas über einen Link auszutauschen?
In C++ ist das leicht zu machen, aber in Python weiß ich es nicht.
Frage.
Ist es möglich, mql-kim und python kanvas über einen Link auszutauschen?
In C++ ist das leicht zu machen, aber in Python weiß ich es nicht.
Ich weiß es nicht.
Gute Nachrichten))) -BetaMetaTrader 5 build 1910: Kostenloses Drag & Drop von Charts und .Net Library in MQL5 . Wenn die Beta-Version funktioniert, brauchen Sie nichts mehr zu schreiben, um eine Verbindung zu SQLite (und vielen anderen Bibliotheken) herzustellen. Sie brauchen keine wird sein DLLs.
SQLite Net-Bibliotheken sind bereits verfügbar -http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
Jetzt (oder eher später, wenn die Arbeitsversion von MT erscheint) können wir die Kommunikation von MT mit dem Handelssystem über Dateiaustausch vergessen und über die Datenbank kommunizieren. Weiter oben in diesem Thread wurde gezeigt, dass es sehr schnell ist und für die meisten Systeme mehr als ausreicht.
Gute Nachrichten.)) -BetaMetaTrader 5 build 1910: Kostenloses Drag & Drop von Charts und .Net Bibliotheken in MQL5 . Wenn die Beta-Version in Betrieb ist, müssen Sie nichts mehr schreiben, um eine Verbindung zu SQLite (und vielen anderen Bibliotheken) herzustellen. Sie brauchen keine wird sein DLLs.
SQLite Net-Bibliotheken sind bereits verfügbar -http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
Jetzt (oder eher später, wenn die Arbeitsversion von MT erscheint) können wir die Kommunikation von MT mit dem Handelssystem über Dateiaustausch vergessen und über die Datenbank kommunizieren. Weiter oben in diesem Thread wurde gezeigt, dass dies sehr schnell ist und für die meisten Systeme mehr als ausreicht.
Sie haben die Nachrichten falsch verstanden.
Die Unterstützung von .NET-Bibliotheken bedeutet nicht, dass die Sicherheitskontrollen für DLLs deaktiviert sind. DLL-Kontrollen haben immer funktioniert und werden immer funktionieren.
Wir lassen Sie einfach .NET laden, ohne dass Sie etwas tun müssen. Oder besser gesagt, wir haben die ganze unordentliche und nicht triviale Arbeit der Kommunikation mit der virtuellen .NET-Maschine übernommen und alle Unannehmlichkeiten versteckt.
Wir haben jedoch seit langem geplant, SQlite-Unterstützung in MQL5 hinzuzufügen. Höchstwahrscheinlich werden wir das tun.