3 votes

Quickfix : accepteur et initateur dans la même application ?

J'ai téléchargé les exemples de quickfix.org (en c++) et j'ai pu connecter ordermatch à tradeclient et les faire communiquer entre eux. J'ai modifié le fichier de configuration d'ordermatch pour autoriser les clients multiples et cela a fonctionné (ordermatch peut recevoir des ordres de plusieurs clients et gérer le carnet d'ordres).

J'ai essayé de trouver un moyen de modifier ordermatch pour qu'il envoie ses messages de confirmation à TOUS les clients, et pas seulement à l'expéditeur.

J'ai une implémentation séparée d'un carnet d'ordres limité et je veux craquer les messages entrants (ordres, annulations, etc.) et les stocker dans mon carnet d'ordres limité. Mon carnet d'ordres surveille le carnet et prend des décisions de trading en fonction de celui-ci. Le problème est que je n'arrive pas à comprendre comment faire pour qu'ordermatch envoie toutes les mises à jour à ce client. De plus, j'ai du mal à comprendre comment "améliorer" le tradeclient pour qu'il ne se contente pas d'envoyer des ordres, mais qu'il les reçoive et qu'il les déchire.

Je pense que je dois avoir un accepteur et un initateur dans chaque application (dans ordermatch et dans un des tradeclients) - j'ai lu que c'était possible et courant mais je ne trouve pas d'exemple de code. Est-ce que je suis sur la bonne voie ou est-ce qu'il y a une meilleure façon de faire ? Est-ce que quelqu'un a un exemple de code qu'il peut partager ? Je n'ai pas l'intention d'utiliser ce système pour le trading en direct, donc un code brut me convient parfaitement.

Merci d'avance

Brandon

4voto

Groovy Points 263

La même application peut jouer le rôle d'initiateur pour une session et d'accepteur pour une autre session. En fait, il est possible d'avoir plusieurs sessions accepteur/initiateur à partir de la même application. Le fichier de configuration doit définir les sessions multiples. Vous pouvez également avoir un fichier de configuration distinct pour chaque session.

1voto

MD-Tech Points 800

Si je comprends bien, je pense que ce que vous essayez de faire est d'intercepter les messages entre un OMS et un courtier (c.f. client et serveur) et d'agir en fonction de ce qu'ils contiennent. Il y a plusieurs façons de faire cela, y compris l'interception au niveau de la couche TCP, mais je pense que la façon la plus simple serait d'utiliser 2 programmes séparés comme le suggère @DumbCoder et de se connecter à l'un d'entre eux en tant qu'accepteur à partir de vos clients, de traiter les messages et de les transmettre à un autre programme via un autre protocole, puis de les envoyer à partir de l'autre programme. Théoriquement, vous pouvez créer une autre instance du moteur dans votre programme et, en utilisant différents fichiers de configuration à la création (lorsque FIX::FileStoreFactory storeFactory(*settings) ; est appelé) de chaque instance du moteur. Cependant Je n'ai jamais vu cela et je pense que cela pourrait poser des problèmes. Si vous essayez cette méthode, je vous conseille vivement de placer l'initiateur et le connecteur dans des dll différentes, ce qui pourrait séparer suffisamment les deux instances du moteur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X