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

 

Renat Fatkhullin:

Innerhalb verschiedener MQL5 Expert Advisors, die in einem Terminal gestartet werden, können Sie dieselbe Datenbank nutzen.
.

Ich habe die Arbeit von zwei Expert Advisors mit der gleichen Datenbank in einem Terminal getestet. Es funktioniert ohne Fehler - beide Expert Advisors schreiben Daten in eine Datei mit einem Timer von 2 Sekunden.

Die Dateien sind angehängt, sie unterscheiden sich nur durch den Namen des Expert Advisors.

2020.02.19 17:56:14.624 SecondExpertDataBase (GBPUSD,H1)        16:56:14: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:16.627 SecondExpertDataBase (GBPUSD,H1)        16:56:16: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:18.616 SecondExpertDataBase (GBPUSD,H1)        16:56:18: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:20.630 SecondExpertDataBase (GBPUSD,H1)        16:56:20: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:22.078 FirstExpertDataBase (USDCHF,H1)         16:56:21: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:22.629 SecondExpertDataBase (GBPUSD,H1)        16:56:22: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:24.071 FirstExpertDataBase (USDCHF,H1)         16:56:24: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:24.619 SecondExpertDataBase (GBPUSD,H1)        16:56:24: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:26.070 FirstExpertDataBase (USDCHF,H1)         16:56:26: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:26.619 SecondExpertDataBase (GBPUSD,H1)        16:56:26: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:28.079 FirstExpertDataBase (USDCHF,H1)         16:56:27: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:28.625 SecondExpertDataBase (GBPUSD,H1)        16:56:28: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:30.079 FirstExpertDataBase (USDCHF,H1)         16:56:30: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:30.617 SecondExpertDataBase (GBPUSD,H1)        16:56:30: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:32.069 FirstExpertDataBase (USDCHF,H1)         16:56:32: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:32.627 SecondExpertDataBase (GBPUSD,H1)        16:56:32: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:34.073 FirstExpertDataBase (USDCHF,H1)         16:56:33: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:34.627 SecondExpertDataBase (GBPUSD,H1)        16:56:34: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:36.616 SecondExpertDataBase (GBPUSD,H1)        16:56:36: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:38.079 FirstExpertDataBase (USDCHF,H1)         16:56:38: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:38.615 SecondExpertDataBase (GBPUSD,H1)        16:56:38: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:40.072 FirstExpertDataBase (USDCHF,H1)         16:56:40: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:40.618 SecondExpertDataBase (GBPUSD,H1)        16:56:40: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:42.630 SecondExpertDataBase (GBPUSD,H1)        16:56:42: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:44.617 SecondExpertDataBase (GBPUSD,H1)        16:56:44: added 1 record on GBPUSD to timer.sqlite


So sieht die Datenbank in MetaEditor aus


 
Chiripaha:

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

In MQL4 können Sie mit der nativen Sqlite3_32.dll über den Wrapper für MQL arbeiten

/*
 * SQLite-Schnittstelle für MT4
 */

#import "sqlite3_wrapper.dll"
int sqlite_exec (string db_fname, string sql);
int sqlite_table_exists (string db_fname, string table);
int sqlite_query (string db_fname, string sql, int& cols[]);
int sqlite_next_row (int handle);
string sqlite_get_col (int handle, int col);
int sqlite_free_query (int handle);
#import

Dies ist ein Wrapper für MQL, nicht zu verwechseln mit SQLite3Wrapper.dll

Aber ob sie noch online ist, weiß ich nicht, ich habe sie früher benutzt.

UPD: https: //github.com/Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
  • Shmuma
  • github.com
Database file is by default stored to . If you specify a full path as database filename, it's used. Terminal data path TERMINAL_DATA_PATH can be known by the following instruction. Open MT4 Open [File] menu Click "Open Data Folder" Sample Many sample scripts in under . Precautions Argument mess MT4 build 610 has a weird bug when dll function...
 
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.

Es gibt noch eine weitere Nuance - die Speicherung in der Datenbank konsistenter Daten mit wachsendem Wert, die nicht verstreut werden, wie z.B. Kurse (mit wachsendem Datum) - eine SEHR teure Operation. Der Baum ist nicht ausgeglichen, ein Zweig wächst ins Unendliche, und die Engine gleicht den Baum regelmäßig neu aus (das ist schlimmer als Müllabfuhr). Vielleicht gilt das nur für die indizierte Tabelle, ich weiß es nicht mehr. Oder vielleicht wurde das Problem in den paar Jahren, in denen ich es nicht benutzt habe, bereits gelöst. Ich werde es ausprobieren müssen. Vielleicht analysieren es ja auch die Entwickler, die sollten daran interessiert sein.

 

Datenbank-Import()

einfaches Skript

void OnStart()
  {
  string filename="DOMdb.db";
  int database=DatabaseOpen(filename, DATABASE_OPEN_READWRITE  );
  DatabaseImport(database,             // Datenbank-Handle erhalten in DatabaseOpen
                     "DOMtb",             // Tabellenname für die Dateneingabe
                     "AllDOM.csv",          // Dateiname für den Datenimport
                       0,             // Flaggenkombination
                      ";",         // Datentrennzeichen 
                        0,         // wie viele erste Zeilen übersprungen werden sollen 
                      "//"     // eine Zeichenkette, die Kommentare definiert
   );
   
  }

2020.02.20 15:09:27.171 MQL5 'DOMcopy.ex5' hat eine neuere nicht unterstützte Version, bitte aktualisieren Sie Ihr Client-Terminal

Version 5 Build 2323 neueste Meta-Editor ist die gleiche und Debugging funktioniert nicht.

ist etwas unvollendet?

 

DieFunktion DatabaseImport ist noch nicht für die Öffentlichkeit freigegeben worden.

Bitte warten Sie auf die Freigabe.

 
Vielleicht nicht im Thema, aber: Ich frage mich, warum die Entwickler die Verbindung zu MS SQL Server noch nicht implementiert haben?
 
Rashid Umarov:

Die Funktion DatabaseImport ist noch nicht für die Öffentlichkeit freigegeben worden.

Bitte warten Sie auf die Freigabe.

Version 5 Build 2326 dasselbe, also warten Sie auf eine stabile Version, aber wann?

 
IuriiPrugov:

Version 5 Build 2326 die gleiche Sache, die für eine stabile Version zu warten ist und wann?

Forum über den Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.

Neue Version von MetaTrader 5 build 2340: Verwalten von Kontoeinstellungen im Tester und Erweiterung der Integration mit Python

MetaQuotes, 2020.02.20 14:55

Am Freitag, den 21. Februar 2020, wird eine aktualisierte Version der MetaTrader 5-Plattform veröffentlicht. Das Update enthält die folgenden Änderungen:

  1. MetaEditor: Es wurde die Möglichkeit hinzugefügt, bequem mit SQLite-Datenbanken zu arbeiten.

    Im letzten Plattform-Update haben wir die Unterstützung für die Arbeit mit SQLite-Datenbanken direkt von MQL5 aus hinzugefügt. Jetzt sind die wichtigsten Funktionen über die MetaEditor-Benutzeroberfläche verfügbar:

    .
    • Erstellen und Verbinden mit Datenbanken
    • Anzeigen von Tabellen und schnellen Datenabfragen
    • Erstellen und Ausführen von SQL-Abfragen, Rückgängigmachen von Änderungen

    Funktionsweise
    Um Datenbanken schnell zu erstellen, verwenden Sie den "MQL5-Assistenten". Hier können Sie sofort die erste Tabelle erstellen und eine Liste ihrer Felder definieren.




    Nachdem Sie eine Datenbank erstellt haben, gelangen Sie in einen neuen Bereich des "Navigators". Die gesamte Arbeit mit den Daten findet in diesem Bereich statt.

    Im linken Teil werden die Datenbanktabellen angezeigt. Um die ersten 1.000 Datensätze schnell abzufragen, doppelklicken Sie auf den Tabellennamen. Hier können Sie auch andere Datenbanken erstellen und öffnen und mit Tabellen arbeiten.

    Im Hauptteil des Editors arbeiten Sie mit der Datenbank: Füllen Sie die Tabelle mit Daten, führen Sie Such- und Auswahlvorgänge durch, geben Sie SQL-Abfragen ein, usw.
    .



    Für weitere Details zur Arbeit mit Datenbanken in MetaTrader 5 lesen Sie bitte den Artikel"SQLite: Native Work with SQL Databases in MQL5".

    .
  2. MetaEditor: Wir fügen weiterhin Unterstützung für mehrsprachige Projekte hinzu. In dieser Version haben wir die Funktionen für die Arbeit mit Python-Skripten erweitert:

    .
    • Jetzt können Sie diese bequem mit dem "MQL5 Wizard" erstellen und dabei sofort die Abhängigkeiten von den notwendigen Bibliotheken in den Code einfügen.
    • Es wurden spezielle Symbole für diese Skripte im Navigator und Syntaxhervorhebung im Editor hinzugefügt.
    • Wenn Sie das Skript über MetaEditor ausführen, werden Meldungen der Python-Konsole (stdout, stderr) im Abschnitt "Fehler" angezeigt.




    Um das Skript im Editor auszuführen, klicken Sie auf "Kompilieren":
    .





    Um mit Python zu arbeiten, vergessen Sie nicht, den Pfad zu Python im Abschnitt "Einstellungen / Compiler" in MetaEditor anzugeben. Und um mit der MetaTrader 5 Bibliothek zu arbeiten, installieren Sie sie mit dem Befehl:
    .
    pip install MetaTrader 5
    Lesen Sie mehr über die Integration mit Python in der Dokumentation.

    .
  3. MQL5: Völlig neu gestaltete Integration mit Python. Viele neue Funktionen wurden hinzugefügt und die Benennung der Befehle wurde geändert.

    Neue Befehlsbenennung
    Vorhandene Befehle wurden umbenannt:
    MT5Initialize       -> initialize
    MT5Shutdown         -> shutdown
    MT5TerminalInfo     -> terminal_info
    MT5Version          -> version
    MT5CopyRatesFrom    -> copy_rates_from
    MT5CopyRatesFromPos -> copy_rates_from_pos
    MT5CopyRatesRange   -> copy_rates_range
    MT5CopyTicksFrom    -> copy_ticks_from
    MT5CopyTicksRange   -> copy_tick_range

    Neue Befehle
    Die Liste der unterstützten Befehle wurde stark erweitert. Neue Funktionen für den Handel und die Arbeit mit der Handelshistorie, Abrufen von Informationen über Finanzinstrumente und das aktuelle Konto.

    • account_info() - liefert Informationen über das aktuelle Konto. Ein Analogon von AccountInfoInteger, AcountInfoDouble und AccountInfoString.
    • positions_total() - empfängt die Anzahl der offenen Positionen. Ein Analogon von PositionsTotal.
    • positions_get(symbol, ticket) - ermittelt die offenen Positionen nach Symbol oder Ticket.
    • orders_total() - Ermittelt die Anzahl der Aufträge. Ein Analogon zu OrdersTotal.
    • orders_get(symbol, ticket) - Liefert offene Aufträge nach Symbol oder Ticket.
    • history_orders_total(from, to) - Ermittelt die Anzahl der Aufträge in der Historie in einem bestimmten Zeitintervall.
    • history_orders_get(from, to, position, ticket) - Abrufen von Aufträgen aus der Historie in einem bestimmten Zeitintervall nach Ticket oder mit Filterung nach Position.
    • history_deals_total() - ermittelt die Anzahl der Geschäfte in der Historie. Ein Analogon von HistoryDealsTotal.
    • history_deals_get(from, to, position, ticket) - holt Angebote aus der Historie in einem bestimmten Zeitintervall nach Ticket oder mit Filterung nach Position.
    • symbol_info(symbol) - liefert Informationen über ein Finanzinstrument. Ein Analogon von SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString.
    • symbol_info_tick(symbol) - Abfrage des letzten Ticks nach Symbol. Ein Analogon zu SymbolInfoTick.
    • symbol_select(symbol, enable) - aktiviert/deaktiviert ein Symbol in der "Market Watch". Analog zu SymbolSelect.
    • order_check(request) - prüft die Marge für eine Order. Ein Analogon von OrderCheck.
    • order_send(request) - sendet eine Order an den Server. Ein Analogon zu OrderSend.
    • order_calc_margin(action, symbol, volume, price) - Margenberechnung für die Order. Ein Analogon zu OrderCalcMargin.
    • order_calc_profit(action, symbol, volume, price_open, price_close) - Gewinnberechnung. Ein Analogon von OrderCalcProfit.
      .

    Ausführen von Python-Skripten auf Charts
    Python-Skripte können jetzt direkt auf Charts in der Plattform ausgeführt werden, ähnlich wie normale MQL5-Programme. Sie werden mit speziellen Symbolen im "Navigator" angezeigt.
    .



    Skript-Meldungen werden im Bereich "Tools / Experten" angezeigt. Wenn das Skript die MetaTrader 5-Bibliothek verwendet, kann es Informationen über das Instrument, das Konto und den Handel erhalten.

    Python-Skripte können auf demselben Chart parallel zu anderen MQL5-Skripten und Expert Advisors ausgeführt werden. Um ein Skript zu stoppen, wenn es in einer Schleife ausgeführt wird, entfernen Sie es einfach aus dem Chart.

    Zusätzlicher Schutz
    Um Ihre Konten bei der Verwendung von Python-Bibliotheken von Drittanbietern weiter zu schützen, wurde die Option "Automatischen Handel über externe Python-API deaktivieren" zu den Terminaleinstellungen hinzugefügt.
    .




    Python-Skripte können nur gehandelt werden, wenn diese Option ausdrücklich deaktiviert ist.

    .
  4. MQL5: Der Neustart von MQL5-Programmen und die Neuerstellung von benutzerdefinierten Indikatoren aus MQL5-Programmen wurde erheblich beschleunigt. In einigen Fällen hat sich die Geschwindigkeit um das Hundertfache erhöht.
    .
  5. MQL5: Funktionen für die Arbeit mit Datenbanken hinzugefügt:

    DatabaseImport
    Importiert Daten aus einer Datei in eine Tabelle.
    long  DatabaseImport(
       int           database,          // Datenbank-Handle erhalten in DatabaseOpen
       const string  table,             // Tabellenname für die Dateneingabe
       const string  filename,          // Dateiname für den Datenimport
       uint          flags,             // Flaggenkombination
       const string  separator,         // Datentrennzeichen 
       ulong         skip_rows,         // wie viele erste Zeilen übersprungen werden sollen 
       const string  skip_comments      // eine Zeichenkette, die Kommentare definiert
       );

    DatabaseExport
    Exportiert eine Tabelle oder das Ergebnis der Ausführung einer SQL-Abfrage in eine CSV-Datei. Die Datei wird in UTF-8-Kodierung erstellt.
    long  DatabaseExport( 
       int           database,           // Datenbank-Handle erhalten in DatabaseOpen 
       const string  table_or_sql,       // Tabellenname oder SQL-Abfrage 
       const string  filename,           // CSV-Dateiname für den Datenexport 
       uint          flags,              // Flaggenkombination 
       const string  separator           // Datentrennzeichen in CSV-Datei 
       );

    DatabasePrint
    Druckt eine Tabelle oder das Ergebnis der Ausführung einer SQL-Abfrage in das Expert Advisor-Protokoll.
    long  DatabasePrint(
       int           database,          // Datenbank-Handle erhalten in DatabaseOpen
       const string  table_or_sql,      // Tabelle oder SQL-Abfrage
       uint          flags              // Flaggenkombination
       );

  6. MQL5: Funktion FileSelectDialog hinzugefügt, die den Systemdialog zum Erstellen/Öffnen einer Datei oder eines Ordners aufruft.
    int  FileSelectDialog(
       string   caption,              // Fenstertitel
       string   initial_dir,          // Startordner
       string   filter,               // Erweiterungsfilter
       uint     flags,                // Flaggenkombination
       string&  filenames[],          // Array mit Dateinamen
       string   default_filename      // Standard-Dateiname
       );
    Die neue Funktion ermöglicht eine komfortable Benutzerinteraktion mit dem MQL5-Programm.

    .
  7. MQL5: DEAL_FEE - Zahlung für die Durchführung einer Transaktion - wurde zur ENUM_DEAL_PROPERTY_DOUBLE Aufzählung hinzugefügt. Tatsächlich handelt es sich um eine separate Art von Provision, die von einem Makler erhoben werden kann.

    .
  8. Tester: Es wurde die Möglichkeit hinzugefügt, beim Testen von Strategien Ihre eigenen Einstellungen für das Handelskonto festzulegen - Handelslimits, Margin-Einstellungen und Provisionen. So erhalten Sie noch mehr Möglichkeiten, verschiedene Handelsbedingungen von Brokern zu simulieren.
    .




    Allgemeine Einstellungen
    In diesem Abschnitt können Sie die maximale Anzahl der offenen Aufträge und Positionen festlegen, die Sie gleichzeitig auf Ihrem Konto haben können. Außerdem können Sie hier einstellen, in welchen Sitzungen das getestete Programm nicht handeln darf.


    Margin
    Hier können Sie vollständig kontrollieren, wie die Margin reserviert wird und welches Positionsbuchhaltungssystem während des Tests verwendet wird:

    .
    • Risikomanagement - Risikomanagementmodell: OTC und börsengehandelt, mit Netting und Hedging. Detaillierte Informationen dazu finden Sie in der Hilfe.
      .
    • "Margin Call"-Level - die Höhe des Guthabens auf dem Konto, bei dessen Erreichen es in den Margin Call-Status übergeht.
    • Stop-Out-Level" - die Höhe der Geldmittel, bei der das Konto gezwungen ist, Aufträge zurückzuziehen und Handelspositionen zu schließen. Beide Niveaus können in Prozent und in Geld angegeben werden. Im ersten Fall werden die Niveaus als der Wert des Indikators "Fonds" auf dem Konto definiert. Wenn die Option "Prozent" gewählt wird, werden die Niveaus als Wert des Indikators "Margin Level" auf dem Konto definiert (Fonds/Margin*100).
    • Nicht realisiert - dieses Feld gibt an, wie der aktuelle nicht realisierte Gewinn/Verlust in der freien Marge berücksichtigt wird:
      .
      • Nicht realisierte Gewinne/Verluste nicht verwenden - offene Positionen werden bei der Berechnung nicht berücksichtigt.
      • Nicht realisierte Gewinne/Verluste verwenden - den Verlust und den Gewinn aus offenen Positionen in die Berechnung einbeziehen.
      • Nicht realisierten Gewinn verwenden - nur den Gewinn verwenden.
      • Nicht realisierten Verlust verwenden - nur Verlust verwenden.
    • Täglich fixiert - dieses Feld gibt an, wie der vom Händler während des Handelstages fixierte Gewinn/Verlust in der freien Marge berücksichtigt wird:
      .
      • Täglich fixierten Gewinn/Verlust verwenden - berücksichtigt den während des Handelstages fixierten Gewinn und Verlust in der freien Marge.
      • Täglich fixen Verlust verwenden - berücksichtigt nur den während des Handelstages fixierten Verlust in der freien Marge. Während des Tages wird der kumulierte Gewinn in einem separaten Kontofeld fixiert ("Locked"). Am Ende des Handelstages wird der kumulierte Gewinn freigegeben (auf Null gesetzt) und auf dem Kontostand ausgewiesen (in der freien Marge berücksichtigt).
    • Aufgelaufenen Gewinn am Ende des Tages freigeben - diese Option ist nur verfügbar, wenn die Option "Täglich festen Verlust verwenden" aktiviert ist. Wenn sie aktiviert ist, wird am Ende des Handelstages der während des Tages aufgelaufene Gewinn freigegeben und auf dem Saldo verbucht (und entsprechend in der freien Marge verbucht). Andernfalls ist dies nicht der Fall.


    Kommission
    In diesem Bereich haben Sie die volle Kontrolle darüber, wie die Kommissionen für alle Trades berechnet werden.

    .
    • Provisionen können ein- oder mehrstufig sein, d.h. sie können unabhängig vom Transaktionsvolumen/Umsatz in gleicher Höhe berechnet werden oder je nach Größe variieren. Die entsprechenden Informationen sind in der Spezifikation angegeben.
    • Provisionen können sofort bei Ausführung eines Geschäfts oder am Ende eines Handelstages/Monats berechnet werden.
    • Provisionen können je nach Richtung des Geschäfts erhoben werden: für den Einstieg, für den Ausstieg oder für beide Arten von Geschäften.
    • Die Provisionen können pro Lot oder pro Geschäft berechnet werden.
    • Provisionen können in verschiedenen Beträgen berechnet werden: in Geld, in Prozent oder in Pips.



  9. Tester: Optimierte und deutlich beschleunigte Arbeit im "Market Scan"-Modus, wenn mehrere Testdurchläufe auf allen Symbolen der "Market Watch" durchgeführt werden.
    .
  10. Tester: Bei der Berechnung des Gewinns in Pips wird jetzt die Größe eines Trades oder einer Position berücksichtigt. Zuvor erfolgte die Berechnung ohne Berücksichtigung des Volumens - wie bei einem Lot.
  11. Tester: Die Verwaltung der Optimierungsergebnisse im Chart wurde verbessert. Beim Vergrößern eines regulären Optimierungs-Charts ist es nun möglich, diesen zu scrollen. Ein Doppelklick auf einen Punkt des Diagramms hebt nun das entsprechende Ergebnis in der Tabelle der Durchgänge hervor.
    .
  12. MetaEditor: Anzeige von SQLite-Datenbankdateien (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) im "Navigator" hinzugefügt.
  13. MetaEditor: Fehler beim Speichern von Projekteigenschaften behoben.
    .
  14. Aktualisierte Dokumentation.

Das Update wird über das LiveUpdate-System verfügbar sein.


 

stabile Version 5 build 2340 DatabaseImport zeigt bei der Ausführung den gleichen DatabaseImport

2020.02.22 14:01:42.338 MQL5 'DOMcopy.ex5' hat eine neuere nicht unterstützte Version, bitte aktualisieren Sie Ihr Client-Terminal

 

Hallo!

Ich habe versucht, im Indikator eine Verbindung zu einer Datenbank herzustellen, aber aus irgendeinem Grund hat es nicht funktioniert.

Warum wird nirgends geschrieben, in welchen Programmen ich Datenbanken verwenden kann?