Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

MySQL library for MQL4 with proper memory management - Bibliothek für den MetaTrader 4

Ansichten:
877
Rating:
(22)
Veröffentlicht:
2016.04.18 10:33
Aktualisiert:
2016.11.22 07:34
mql4-mysql.mqh (10.56 KB) ansehen
libmySQL.zip (938.39 KB)
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Die originale Datei der Bibliothek finden Sie hier (mql4-mysql.mqh): https://www.mql5.com/de/code/11114 . Danken sie den ursprünglichen Autoren für deren Arbeit (Ursprünglich erstellt von Russell, dann modifiziert von vedroid und lukins / Sergey) und lesen Sie die Beschreibung des originalen Programmcodes

Die originale mql4-mysql.mqh Bibliothek hatte ein großes Problem mit der Speicherverwaltung. Dieses wurde von mehreren Benutzern berichtet (Darüber können Sie hier weitere Informationen finden: https://www.mql5.com/en/forum/28941).

Da ich die Bibliothek selbst für meine Projekte verwenden wollte habe ich versucht den Crash nachzuvollziehen, was aber nicht möglich war. Nach der Analyse des Programmcodes konnte ich das Problem in der FetchArray Funktion lokalisieren, welche es dem Anwender erlaubt Daten aus der Datenbank zu lesen und auch in sie zu schreiben. Der Speicher wurde nicht ordnungsgemäß freigegeben oder zugeteilt, sodass ich dann einige Änderungen an den Code vorgenommen habe um dieses Problem zu verhindern.

Die weiteren Test haben gezeigt, dass die Speicherverwaltung nun stabil läuft. Der Test dauerte mehrere Stunden und umfasst mehrere tausend Verbindungen und Daten mit minimalem Anstieg der Speichernutzung (weniger als 10 MB) was wahrscheinlich das Ergebnis vom MetaTrader4 selbst ist. Der vorherige Test mit der alten Bibliothek konnte noch nicht einmal ein paar wenige Lesezugriffe auf die Datenbank durchführen und arbeitete für nur für ein paar Minuten, bevor das Programm mit Fehlern abbrach. Der Test wurde mit einem Expert Advisor durchgeführt welcher mit jedem eingehenden tickdaten bei der Datenbank angefragt hat.

WICHTIG: Lesen Sie die originale Beschreibung dieser Bibliothek!

int     dbConnectId = 0;

Diese sollte als lokale Variable und nicht als globale Variable deklariert werden. Wenn Sie diese Bibliothek innerhalb eines EAs oder eines Indikators verwenden, dann sollte die lokale Deklaration verwendet werden. Mit jeder Iteration sollte die variable memory address unterschiedlich sein (Diese sollte automatisch von MetaTrader 4 zugewiesen werden) und nach dem Zyklus wieder freigegeben werden.

Und jeder einzelne Task sollte seine eigene Verbindung öffnen. Dir Aufrechterhaltung einer Verbindung für unterschiedliche Anfragen wird nicht empfohlen. Beispiel: Wenn ich einige Zeilen einer Datenbank lesen will und diese in ein Array speichern möchte, dann definiere ich das diese Prozedur in einer Funktion. Wenn die Funktion aufgerufen wird, wird eine Verbindung aufgebaut und nachdem die Daten gelesen worden sind, wird die Verbindung wieder geschlossen und die Funktion gibt die XX Daten zurück. Jede Verbindung sollte nur so kurz wie möglich geöffnet bleiben.

Denken Sie immer daran eine Verbindung mit deinit_MySQL zu schließen. Wenn Sie dieses vergessen, dann werden immer mehr offene Verbindungen stehen bleiben, die sich bis zur der maximalen Größe aufsummieren. Dieses führt zu einem Crash.

Ebenso sollte ein gutes Transaktionsmanagement implementiert werden, damit sich zwei oder mehr offene Verbindungen nicht gegenseitig stören. Dieses könnte eine Lese-Zugriffsverletzung auslösen, welche dazu führt dass ihr EA die Funktion oder sich selbst abbricht.

Es wird ein Apache Server mit MySQL DB benötigt (free software):

Wenn Sie eine einfache Datenbank, einen Server und ein Datenbankmanagement-Tool suchen (Es ist Fall erhältlich und einfach zu verwenden): https://www.apachefriends.org/index.html

Lesen Sie hier nach, wie ein Schutz für die Datenbank eingerichtet werden kann http://robsnotebook.com/xampp-builtin-security

Bitte testen Sie alles und geben Sie uns ein Feedback. Dieses ist der einzige Weg wie noch mögliche Probleme behoben werden können.

Info:

Ich kann noch ein Posting in einem Forum mit detaillierten Beispielen schreiben, wie diese Bibliothek benutzt wird und was für Sie noch gebraucht wird

Dieses ist sicherlich ein größeres Projekt und daher würde ich das nur schreiben, wenn wirklich Nachfrage besteht. Bitte geben Sie mir eine Rückmeldung wenn sie gerne eine solche Anleitung haben möchten.

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/13712

COrdersManager class COrdersManager class

Eine einfache Möglichkeit ihre Orders zu kontrollieren.

Flag and Pennant patterns Flag and Pennant patterns

Dieser Indikator zeigt Flagge und Wimpel Muster.

Fuzzy - Bibliothek für das Arbeiten mit Fuzzy Logik Fuzzy - Bibliothek für das Arbeiten mit Fuzzy Logik

Eine Bibliothek für das Arbeiten mit Fuzzy Logik, die in C# geschrieben worden ist. Während der Konvertierung zu MQL4 wurden 8 weitere Funktionen und vier defuzzification-Methoden für Mamdani-Systeme zu der Bibliothek hinzugefügt.

Histogram Blanket Histogram Blanket

Diese neue Darstellung hilft Ihnen Charts aus einem ganz anderen Blickwinkel zu betrachten.