Discussion de l'article "SQLite Gestion native des bases de données SQL dans MQL5"

 

Un nouvel article SQLite Gestion native des bases de données SQL dans MQL5 a été publié :

Le développement de stratégies de trading est associé à la manipulation de grandes quantités de données. Vous êtes désormais en mesure de travailler avec des bases de données en utilisant des requêtes SQL basées sur SQLite directement dans MQL5. Une caractéristique importante de ce moteur de base de données est que la totalité de la base de données est placée dans un seul fichier situé sur le PC de l'utilisateur.

Déboguer des requêtes SQL dans MetaEditor

Toutes les fonctions permettant de travailler avec la base de données renvoient un code d'erreur en cas d'échec. Travailler avec ces fonctions ne devrait pas poser de problème si vous suivez 4 règles simples :

  1. tous les handles de requêtes doivent être détruits après avoir été utilisés par DatabaseFinalize()
  2. la base de données doit être fermée avec DatabaseClose() avant la fin du programme
  3. les résultats de l'exécution de la requête doivent être vérifiés
  4. en cas d'erreur, une requête est détruite en premier, et la base de données est fermée ensuite

Le plus difficile est de comprendre quelle est l'erreur dans le cas où la requête n'a pas été créée. MetaEditor permet d'ouvrir des fichiers *.sqlite et de travailler avec eux en utilisant des requêtes SQL. Voyons comment faire en utilisant le fichier company.sqlite comme exemple :

1. Ouvrez le fichier company.sqlite qui se trouve dans le dossier commun du terminal.

2. Après avoir ouvert la base de données, la table COMPANY est visible dans le Navigateur. Faites un double clic dessus.

3. La requête "SELECT * FROM COMPANY" est automatiquement créée dans la barre de commande.

4. La requête est exécutée automatiquement. Elle peut également être exécutée en appuyant sur F9 ou en cliquant sur Exécuter.

5. Consultez le résultat de l'exécution de la requête.

6. Si quelque chose ne va pas, les erreurs sont affichées dans le Journal de l'éditeur.


Les requêtes SQL permettent d'obtenir des statistiques sur les champs de la table, par exemple, la somme et la moyenne. Exécutons les requêtes et vérifions si elles fonctionnent.

Auteur : MetaQuotes

 

La personne qui a trouvé la solution est priée de montrer la mise en œuvre de cette tâche.

  1. Il y a deux terminaux.
  2. Il est nécessaire de transférer les cotations en temps réel d'un symbole du terminal 1 vers le symbole personnalisé correspondant du terminal 2.
 
Merci pour l'article et les bons exemples d'applications utiles.
 
fxsaber:

Si quelqu'un a trouvé la solution, qu'il nous montre la mise en œuvre d'une telle tâche.

  1. Il y a deux terminaux.
  2. Il est nécessaire de transférer les cotations en temps réel d'un symbole du terminal 1 vers le symbole personnalisé correspondant du terminal 2.

Dans le cadre de cette tâche, ai-je bien compris que dans les deux cas (lors de la lecture de la base sur Terminal2 et de l'écriture dans la base sur Terminal1), il faut bloquer le mécanisme de transaction?


Quel est le moyen le plus économique de déterminer que la base de données a été mise à jour ?

 
fxsaber:

Dans le cadre de cette tâche, ai-je bien compris que dans les deux cas (lecture de la base sur Terminal2 et écriture dans la base sur Terminal1) il faut bloquer par le mécanisme de transaction?

Non, il s'agit d'un verrouillage différent. Si la base est déjà ouverte dans un autre programme MQL5 ou MetaEditor, vous obtiendrez l'erreur 5124 en essayant de la modifier.

 
Rashid Umarov:

Non, il s'agit d'un verrou différent. Si la base est déjà ouverte dans un autre programme MQL5 ou dans MetaEditor, vous obtiendrez l'erreur 5124 en essayant de la modifier.

Il s'avère que l'échange de données a moins de possibilités que l'échange de fichiers ?

 
fxsaber:

Le partage de données semble-t-il offrir moins de possibilités que le partage de fichiers ?

Cela dépend de l'implémentation de la base de données elle-même.

les fichiers sont toujours peu pratiques - accès séquentiel et mêmes problèmes lorsque l'on travaille avec un seul fichier

 
fxsaber:

Le partage de données semble-t-il offrir moins de possibilités que le partage de fichiers ?

SQLite n'est pas une base de données côté serveur, mais une base de données intégrée. Par conséquent, il ne peut pas fournir une utilisation conjointe et simultanée à partir de différents processus.

Il est destiné à une utilisation interne dans MQL5 et au partage (pas d'utilisation simultanée)/transfert avec d'autres systèmes.

L'avantage de la base de données interne intégrée est qu'elle est disponible pour tous les agents et qu'elle vous permet de travailler facilement avec les données à distance et dans le testeur de stratégie.


Dans le cadre de différents conseillers experts MQL5 fonctionnant dans un terminal, vous pouvez partager la même base de données.

 
Renat Fatkhullin:

SQLite n'est pas une base de données côté serveur, mais une base de données intégrée. Elle ne peut donc pas permettre le partage et l' utilisation simultanée à partir de différents processus.

Vous pouvez partager la même base de données entre différents experts travaillant dans le même terminal.

Je comprends maintenant, merci.

 

Est-il possible d'utiliser ce qui est décrit pour µl5 dans µl4 ?

Les fonctions et les opérations de la bibliothèque sont-elles compatibles ou est-ce seulement pour µl5 ?

 
Chiripaha:

Ce qui est décrit pour µl5 peut-il être utilisé dans µl4 ?

Les fonctions et les opérations de la bibliothèque sont-elles compatibles ou est-ce seulement pour µl5 ?

Le support natif de SQLite n'existe que dans MetaTrader 5 et MQL5.

Il ne s'agit pas d'une bibliothèque, mais d'une fonctionnalité standard de MQL5 avec une intégration profonde dans l'ensemble du système, y compris les agents de test de stratégie.