Il y a quelques ajouts importants (et des suggestions d'amélioration :))
1. l'auteur utilise la fonction sqlite_open(), mais il existe une fonction plus flexible sqlite_open_v2(), qui peut travailler avec des drapeaux d'ouverture, ce qui signifie : - contrôler la délimitation de l'accès au fichier de base de données ; - créer des bases de données temporaires en mémoire ; - travailler avec la base de données par URI, pas seulement dans le système de fichiers local, etc.
#define SQLITE_OPEN_READONLY 0x00000001 /* Ok pour sqlite3_open_v2() */ #define SQLITE_OPEN_READWRITE 0x00000002 /* Ok pour sqlite3_open_v2() */ #define SQLITE_OPEN_CREATE 0x00000004 /* Ok pour sqlite3_open_v2() */ #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS uniquement */ #define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS uniquement */ #define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS uniquement */ #define SQLITE_OPEN_URI 0x00000040 /* Ok pour sqlite3_open_v2() */ #define SQLITE_OPEN_MEMORY 0x00000080 /* Ok pour sqlite3_open_v2() */ #define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS uniquement */ #define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS uniquement */ #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS uniquement */ #define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS uniquement */ #define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS uniquement */ #define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS uniquement */ #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS uniquement */ #define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok pour sqlite3_open_v2() */ #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok pour sqlite3_open_v2() */ #define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok pour sqlite3_open_v2() */ #define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok pour sqlite3_open_v2() */ #define SQLITE_OPEN_WAL 0x00080000 /* VFS uniquement */
2. J'ai utilisé sqlite pour résoudre le problème de l'accélération de l'optimisation de l'EA lorsqu'il utilise un indicateur "lourd" en calculs. La solution logique dans une telle situation est de sauvegarder les lectures de l'indicateur pour la période d'optimisation dans la base de données lors de la première exécution, et lors des exécutions suivantes - d'extraire directement les lectures déjà calculées de la base de données. Ainsi, si vous utilisez le moteur sqlite dans la "forme par défaut", le processus d'envoi d'un grand nombre de requêtes INSERT et SELECT commence à prendre beaucoup de temps. En pratique, il a été constaté que la solution consiste à utiliser soit 1) une base de données en mémoire, ce qui n'est pas toujours bon si nous voulons laisser les données pour plus tard, soit 2) les #pragma-directives du moteur SQL.
La deuxième option est préférable, car elle élimine la nécessité de transférer la base de données de la mémoire vive vers le disque. La procédure est la suivante : avant de créer la première table dans la base de données, il est nécessaire de lui envoyer les requêtes suivantes :
"PRAGMA temp_store = MEMORY;" "PRAGMA page_size = 65536;" "PRAGMA cache_size = 16384;" "PRAGMA journal_mode = OFF;" "PRAGMA locking_mode = EXCLUSIVE;" "PRAGMA synchronous = OFF;"
Bien, et après cela, vous pouvez
"CREATE TABLE IF NOT EXISTS"
etc.
Bonne chance à tous !
Il y a quelques ajouts importants (et des suggestions d'amélioration :))
1) L'auteur utilise la fonction sqlite_open(), mais il existe une fonction sqlite_open_v2() plus flexible qui peut travailler avec des drapeaux d'ouverture, ce qui signifie : - contrôler la délimitation de l'accès au fichier de la base de données ; - créer des bases de données temporaires en mémoire ; - travailler avec la base de données par URI, pas seulement dans le système de fichiers local, etc.
2. J'ai utilisé sqlite pour résoudre le problème de l'accélération de l'optimisation de l'EA lorsqu'il utilise un indicateur "lourd" en calculs. La solution logique dans une telle situation est de sauvegarder les lectures de l'indicateur pour la période d'optimisation dans la base de données lors de la première exécution, et lors des exécutions suivantes - d'extraire directement les lectures déjà calculées de la base de données. Ainsi, si vous utilisez le moteur sqlite dans la "forme par défaut", le processus d'envoi d'un grand nombre de requêtes INSERT et SELECT commence à prendre beaucoup de temps. En pratique, il a été constaté que la solution consiste à utiliser soit 1) une base de données en mémoire, ce qui n'est pas toujours une bonne chose si nous voulons laisser les données pour plus tard, soit 2) les #pragma-directives du moteur SQL.
La deuxième option est préférable, car elle élimine la nécessité de transférer la base de données de la mémoire vive vers le disque. La procédure est la suivante : avant de créer la première table dans la base de données, vous devez lui envoyer les requêtes suivantes :
Bien, et après cela, vous pouvez
etc.
Bonne chance à tous !
Les données de lecture des indicateurs lors de l'exécution du testeur sont par nature un simple tableau, un flux à accès séquentiel, il est donc redondant et peu rationnel de les sauvegarder et de les lire dans la base SQL.
Il en va de même pour la liste des opérations commerciales proposée par l'auteur de l'article comme exemple d'application de SQLite.
Par conséquent, nous devons nous rendre compte que l'efficacité de l'utilisation de modèles de données relationnels et multiliés dépend principalement des tâches à résoudre et, dans ces exemples, il se peut qu'elle ne soit que "tirée par les oreilles".
.
Les données relatives aux relevés d'indicateurs pendant l'essai sont par nature un simple tableau, un flux avec accès en série, de sorte qu'il est redondant et peu rationnel de les enregistrer et de les lire dans la base SQL.
Lisez-le à nouveau, même si c'est redondant et non rationnel : pour optimiser l'Expert Advisor
Il est possible de l'utiliser et c'est une bonne chose. Par ailleurs, SQLite ne devrait pas être utilisé pour des projets sérieux. En tout cas, je ne le recommande pas. J'ai moi-même été confronté plus d'une fois au problème des collisions. Par exemple, si un robot de trading est attaché à différents graphiques, mais utilise la même base, et que l'accès se fait à une table à usage général (par exemple les sessions d'enregistrement/de changement, les comptes), vous obtiendrez dans tous les cas une erreur du type "table verrouillée". Et peu importe que toutes les transactions soient terminées, que les curseurs soient fermés et que la base de données ait été ouverte en mode partagé. Ce problème est également connu des développeurs de SQLite.
À mon avis, MS Access est la meilleure des bases de données de fichiers avec support SQL. Vous avez beau gronder les adeptes des petits logiciels, j'ai quitté SQLite pour MS Access et je ne le regrette pas du tout. Le pilote OleDB Jet 4.0 est installé même avec Win98, de sorte que les projets fonctionnent sur tous les systèmes d'exploitation Windows.
Tout d'abord un grand merci pour votre travail !
Je l'ai porté sur mql4 avec succès ! (quelques #property strict, résolvent les erreurs de compilation).
Et comme j'utilise une plateforme 32bit, j'ai dû commenter et supprimer certaines fonctions d'importation liées au 64bit. Le terminal utilise le early binding, donc la dll 64 bits essaye aussi de se charger pendant le chargement du programme. (bien qu'elle ne soit pas utilisée, seulement la dll 32bit).Cela a provoqué une erreur.
Mais quoi qu'il en soit, j'aime votre implémentation ! (J'aimerais pouvoir écrire un programme aussi bon que le vôtre).
Le script ne fonctionne pas, hors de la boîte ne fonctionne pas, à la poubelle de tels projets.
Dans la console, il donne https://s.mail.ru/9dWTNLqx6RT2/img-2015-11-10-20-15-44.png
В таблице https://s.mail.ru/QZyK6HwhMvo9/img-2015-11-10-20-16-18.png
Код https://s.mail.ru/2ooLdMg5MrHP/img-2015-11-10-20-16-56.png
Le script ne fonctionne pas, il n'est pas prêt à l'emploi.
fumez le manuel si vous ne comprenez pas ce qu'il faut faire et comment le faire.

- 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
Un nouvel article SQL et MQL5 : Travailler avec la base de données SQLite a été publié :
Cet article est destiné aux développeurs qui seraient intéressés par l'utilisation de SQL dans leurs projets. Il explique les fonctionnalités et les avantages de SQLite. L'article ne nécessite pas de connaissance particulière des fonctions SQLite, mais une compréhension minimale de SQL serait bénéfique.
Une fois le script appliqué au compte, il insère instantanément les transactions du compte dans le tableau.
Les statistiques sont affichées dans le journal du terminal
Vous pouvez jouer avec le script : commentez les lignes contenant BEGIN, ROLLBACK et COMMIT. S'il y a plus de centaines d'offres sur votre compte, vous verrez immédiatement la différence. En fait, selon quelques tests, les transactions SQLite fonctionnent plus rapidement que dans MySQL ou PostgreSQL.
Auteur : ---