Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
J'ai complètement abandonné l'idée de lier MT5 et Quick, je me suis contenté de Quick (serveur DEE + trans2quik.dll).
J'envisage de réaliser ce programme.
Selector1 reçoit constamment des données du serveur DDE et les "stocke" dans Storage et appelle la fonction OnTick dans Child correspondant.
Lorsque vous appelez GetStorageData, le serveur DDE doit être mis en pause et les données doivent être stockées dans Storage.
Lorsque Selector2 appelle le callback, le serveur DDE et l'enregistrement du stockage doivent être suspendus et l'appel GetStorageData doit être désactivé.
C'est-à-dire que Selector2 a une priorité élevée, GetStorageData une priorité normale, et Selector1 une priorité faible.
Questions :
Comment synchroniser Selector1, Selector2 et GetStorageData de manière gracieuse ?
Peut-être existe-t-il des exemples concrets d'une telle synchronisation (je n'ai jamais implémenté une telle chose) ?
Abandon de l'idée de lier MT5 et Quick, choix de Quick uniquement (serveur DEE + trans2quik.dll)
J'envisage de réaliser ce programme.
1. la très bonne décision de ne laisser que Quick.
2. La connexion via DEE est une solution très controversée. Beaucoup disent que DDE est instable, mais je ne sais pas.
À mon avis, une solution meilleure et plus polyvalente est une application Lua-DLL. J'utilise cette option. Bien sûr, c'est au propriétaire de décider.
1. la décision de ne garder que le Quick était la bonne.
2. La communication via DDE est une décision très controversée. Beaucoup de gens disent que DDE est instable, mais, je ne sais pas.
À mon avis, une solution meilleure et plus polyvalente est une application Lua-DLL. J'utilise cette option. Bien sûr, c'est à l'hôte de décider.
J'ai écrit il y a longtemps un serveur DDE pour Quick - il fonctionne sans problème et assez rapidement (pas plus lent que Lua - DLL),
et il n'est pas du tout nécessaire d'écrire du code supplémentaire pour le récepteur de données Lua et DDL.
Ajouté
En fait, j'ai déjà écrit le programme présenté dans le diagramme (et il fonctionne), mais j'ai rencontré un problème de synchronisation.
J'ai écrit il y a longtemps un serveur DDE pour Quick - il fonctionne sans problème et assez rapidement (pas plus lent que Lua - DLL),
et il n'est pas du tout nécessaire d'écrire du code supplémentaire en Lua.
Comme je n'ai pas fait de DDE, la question est la suivante : comment fait-on de la DDE ? Je pense qu'il est nécessaire de créer un tableau avec des données, puis de le faire passer par DDE.
Il y a une confusion avec les événements. Quelque chose a changé, et il semble que la table entière soit passée au DDE. Ou ai-je tort ?
Disons que j'ai tort. Alors comment identifier l'événement du côté récepteur ?
En fait, j'ai déjà écrit le programme présenté dans le diagramme (et il fonctionne), mais j'ai rencontré un problème de synchronisation.
Synchroniser quoi avec quoi ?
Avec Lua, ce problème est résolu par des callbacks de la DLL vers des données arbitraires.
Comme je n'ai pas eu affaire à la DDE, la question est de savoir comment elle est fabriquée. Il semble que vous deviez créer un tableau avec des données, puis le faire passer par le DDE.
Il y a une confusion avec les événements. Quelque chose a changé, et il semble que la table entière soit passée au DDE. Ou ai-je tort ?
Disons que j'ai tort. Alors comment identifier l'événement du côté récepteur ?
Dans Quick, la table requise est générée pour la sortie.
Enfin, nous lançons notre propre application avec le serveur DDE et sortons cette table via DDE.
A la première sortie de Quick, la table entière est envoyée à DEE, puis seulement la ligne de la table
dans lesquels des changements ont eu lieu.
Dans le tableau lui-même (il est transmis dans son intégralité) il y a (par exemple dans mon cas) un nom d'outil - c'est l'identifiant
Le serveur DDE lui-même a quelques lignes (je l'ai en Pascal, mais il y a de nombreux exemples sur Internet dans d'autres langages)
Une fenêtre enfant est créée par le nom de l'outil (comme dans MT 5)
Avec quoi ?
J'ai décrit le problème dans le sujet du diagramme
J'ai décrit le problème dans le sujet du diagramme
Désolé, je n'avais pas réalisé. Si j'ai bien compris :
À mon avis, la solution consiste à utiliser un SGBD commestockage, par exemple MS SQL Server. Il peut s'agir d'une solution partielle.
La seconde consiste à utiliser des buffers-collections intermédiaires, comme le dernier entré, premier sorti. Eh bien, et la séparation des fils.
Il n'est alors pas nécessaire d'arrêter quoi que ce soit, tout est simplement écrit dans les tampons. Eh bien, et le SGBD a un accès multi-utilisateurs.
J'applique tout ça, mais je ne suis pas ami avec Pascal depuis 6 ans.
PS Ils disent que vous pouvez utiliser les bibliothèques NET à partir de Pascal. Pour l'utiliser commestockage, il peut être judicieux d'utiliserSystem.Data,System.Data.DataSet etSystem.Data.DataTable. Si je me souviens bien, il n'y avait aucun problème d'accès multi-utilisateurs dansDataTable.
ZZY2 Maintenant, j'essaie d'utiliser SQLite comme base de données, mais pas encore de résultats définitifs. Et ce n'est certainement pas un SGBD, mais sous une forme dépouillée, l'accès multi-utilisateurs est possible, et il est possible de créer une base de données en mémoire.
Non, j'ai juste besoin de synchroniser 3 threads (en fait, écrire un Synchronizer), mais...
Je ne sais pas comment.