Le fichier .sqlite peut-il être inclus dans la structure du projet ME ? pour un conditionnement ultérieur en .ex5
Si oui, comment le programme .ex5 se comportera-t-il lorsque la taille du fichier.sqlite sera augmentée ? dans un programme .ex5 déjà compilé.
Merci pour cette nouvelle fonctionnalité.
Je considère qu'une bonne aide sur la nouvelle fonctionnalité est la clé du succès pour la maîtriser. Les exemples de travail dans l'aide elle-même me manquent vraiment.
Veuillez également prêter attention aux déficiences suivantes qui ont été constatées :
1) La description de la fonction DatabaseExecute n'est pas vraie, mais copiée deDatabasePrepare.
2) Description incomplète du premier paramètre de la fonctionDatabaseRead:intdatabase,// handle de la base de données obtenu dans DatabaseOpen ;
DepuisDatabasePrepare, les informations sont plus complètes :Crée un handle de requête, qui peut ensuite être exécuté avec DatabaseRead().
3) Les fonctionsDatabaseTransactionXXX génèrent-elles réellement les listes d'erreurs GetLastError() données ou effectuent-elles une "erreur de suivi d'un échec précédent" ?
4) Aucune information n'est fournie pour les fonctions DatabaseTransactionXXX concernant la gestion des transactions imbriquées.
5) Il y a une erreur dans la description du paramètre de la fonctionDatabaseColumnName ( ce doit être "pour obtenir le nom du champ").
string&name// référence à la variable permettant de récupérer le nom de latable
Excellente nouvelle, Renat ! Cette question s'est posée.
Un fichier .sqlite peut-il être inclus dans la structure du projet ME ?
Si c'est le cas, comment le programme .ex5 se comportera-t-il lorsque la taille du fichier .sqlite sera augmentée ? dans un programme .ex5 déjà compilé
Le plus souvent, nous autoriserons l'inclusion de ressources et ces fichiers seront automatiquement extraits sur le disque lors du premier démarrage du programme.
C'est-à-dire qu'il n'y aura pas de gonflement de la base à l'intérieur de ex5. Le fichier ne peut être traité que sur le disque.
Les bases peuvent être conservées soit sur le disque, soit en mémoire uniquement, en utilisant l'indicateur DATABASE_OPEN_MEMORY.
Ai-je raison de comprendre qu'il s'agit d'un mécanisme officiel d'échange de données entre les terminaux MT5 (au lieu de tuer les fichiers SSD) et entre les programmes à l'intérieur du terminal (au lieu des ressources) ?
Merci pour cette nouvelle fonctionnalité.
Je pense qu'une bonne aide pour la nouvelle fonctionnalité est la clé du succès pour la maîtriser. Les exemples de la façon de travailler dans l'aide elle-même me manquent vraiment.
Veuillez également prêter attention aux déficiences suivantes que j'ai constatées :
1) La description de la fonction DatabaseExecute n'est pas vraie, mais copiée de DatabasePrepare.
2) Description incomplète du premier paramètre de la fonctionDatabaseRead:intdatabase, // handle de la base de données obtenu dans DatabaseOpen ;
Depuis DatabasePrepare, les informations sont plus complètes : crée un handle de requête, qui peut ensuite être exécuté avec DatabaseRead().
3) Les fonctionsDatabaseTransactionXXX génèrent-elles réellement les listes d'erreurs données GetLastError() ou effectuent-elles un "suivi d'erreur d'un échec précédent" ?
4) Aucune information n'est fournie pour les fonctions DatabaseTransactionXXX concernant la gestion des transactions imbriquées.
5) Il y a une erreur dans la description du paramètre de la fonction DatabaseColumnName ( ce doit être "pour obtenir le nom du champ").
string&name// référence à la variable permettant de récupérer le nom de latable
L'aide a déjà été partiellement mise à jour, jetez-y un coup d'œil. Il s'agit encore de la première version de l'aide et elle sera mise à jour.
Il n'y a pas de transactions imbriquées dans SQLite, il est donc inutile d'essayer d'en faire.
Des exemples sont présentés dans le sujet, il n'y a rien de compliqué du tout. Nous ferons un article et une classe wrapper dans la bibliothèque standard plus tard.
Ai-je bien compris qu'il s'agit d'un mécanisme officiel d'échange de données entre les terminaux MT5 (au lieu des fichiers SSD killing) et entre les programmes à l'intérieur du terminal (au lieu des ressources) ?
Arrêtez de répandre des absurdités flagrantes sur la "mort des SSD" de la part d'utilisateurs incompétents.
Non, ce sont des bases de fichiers - elles peuvent être échangées, mais il est risqué d'y accéder simultanément à partir de différents experts en raison d'un accès potentiellement monopolistique lorsque les bases sont ouvertes en même temps.
Les bases de données ouvertes "in-memory-only by DATABASE_OPEN_MEMORY flag" ne sont disponibles que pour un programme spécifique et ne sont partagées avec personne.
Applications de bases de données :
- Stockage des paramètres et des états des programmes MQL5
- Stockage de données en masse
- Utilisation de données préparées en externe
. Par exemple, j'ai exporté des données de Metatrader vers SQLite, j'ai calculé ces données dans Python à l'aide de paquets mathématiques prêts à l'emploi et j'ai mis le résultat également au format SQlite.
L'éditeur de base de données dans ME sera, eh bien, très pratique, merci.
Non, il s'agit de bases de fichiers - elles peuvent être échangées, mais il est risqué d'y accéder simultanément à partir de différents EA en raison d'un accès potentiellement monopolistique lorsque les bases sont ouvertes en même temps.
Python dispose d'une bibliothèque appeléeSqlite3Worker qui permet d'effectuer des entrées/sorties sécurisées lorsque vous travaillez avec une base de données à partir de plusieurs threads.
Il serait peut-être judicieux de penser à porter l'implémentation vers mql, pour permettre un travail asynchrone avec la base de données de plusieurs Expert Advisors.
Eh bien, ou emprunter l'idée et mettre en œuvre votre propre E/S asynchrone.
Python dispose de la bibliothèqueSqlite3Worker, pour une entrée/sortie sécurisée par les threads, lorsque vous travaillez avec la base de données à partir de plusieurs threads.
Peut-être y a-t-il lieu d'envisager le portage de l'implémentation vers mql, pour permettre un travail asynchrone avec la base de données de plusieurs Expert Advisors.
Eh bien, ou emprunter l'idée et mettre en œuvre votre propre E/S asynchrone.
Avez-vous vu le tableau des performances ci-dessus ? Il est souvent plus rapide en MQL5 qu'en C++.
Nous avons le multithreading, bien sûr, et tout est correct.
La question porte sur un autre sujet : que se passe-t-il si différents programmes/processus accèdent indépendamment au même fichier de base de données ? Pas un seul programme (MQL5), mais plusieurs programmes indépendants qui ne se connaissent pas et n'utilisent pas le même gestionnaire de base de données.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Dans la version 2265, nous avons implémenté les fonctions habituelles de base de données basées sur SQLite 3.30.1 :
Comme nous nous concentrons au maximum sur les performances, voici les résultats des tests LLVM 9.0.0 vs MQL5. Temps en millisecondes, moins il y en a, mieux c'est :Les bases de données peuvent être conservées sur disque ou en mémoire uniquement avec l'indicateur DATABASE_OPEN_MEMORY. Envelopper les insertions/modifications massives dans des transactions DatabaseTransactionBegin/Commit/Rollback accélère les opérations des centaines de fois.
La vitesse en MQL5 est absolument la même qu'en C++ natif avec l'un des meilleurs compilateurs. Une suite de benchmarks pour le rejeu est jointe.
Nous avons également mis en œuvre une fonction unique DatabaseReadBind qui vous permet de lire les enregistrements directement dans la structure, ce qui simplifie et accélère les opérations de masse.
Voici un exemple simple :