2017-09-18 4 views
4

J'ai écrit un programme en Python en utilisant le package quickfix qui se connecte à un fournisseur via FIX. Nous nous connectons le matin, mais n'envoyez pas de messages via la connexion jusqu'à la fin de la journée. Le problème est que nous ne voulons pas laisser le programme ouvert pendant toute la journée, mais nous préférerions nous retrouver dans l'après-midi lorsque nous devrons envoyer les messages.Est-ce une pratique courante de garder une connexion FIX connectée toute la journée, ou de la reloger périodiquement?

Le fournisseur nous demande de rester connecté pendant toute la durée entre nos heures de début et de fin spécifiées dans nos configurations. Cela n'est possible qu'en laissant mon programme allumé pendant toute la journée, car si je le ferme, les messages que le vendeur envoie ne sont pas enregistrés tels que reçus par moi. Je n'envoie pas de message de déconnexion.

Est-ce une pratique courante d'écrire un programme pour se connecter via FIX et de le laisser fonctionner pendant toute la durée de la session? Ou est-ce acceptable de fermer le programme, étant donné que je n'envoie pas de message de déconnexion et de me reconnecter plus tard dans la journée?

Tout design ou un conseil des meilleures pratiques serait utile ici.

+1

Je ne suis pas du tout familier avec ce secteur, mais voici une citation ["_Disconnection sans l'échange de Logout <5> messages doivent être interprétés comme une condition anormale._"] (https://www.onixs.biz/fix -dictionary/4.2/msgType_5_5.html). Je ne sais pas comment c'est correct. –

+1

Je ne comprends pas le problème: si votre fournisseur veut que vous restiez connecté pendant toute la durée du problème, quel est le problème? En d'autres termes, pourquoi "quitter mon programme pour toute la journée" est-il difficile? Votre ordinateur est rempli de programmes * toujours en cours d'exécution *; Ce n'est pas une situation particulièrement inhabituelle. – larsks

+1

En lisant plus loin il semble y avoir un battement de coeur, donc je soupçonne que si vous vous déconnectez sans vous déconnecter, vous manquerez les messages de pulsation et le fournisseur mettra fin à votre session, vous forçant ainsi à vous reconnecter plus tard. –

Répondre

3

Est-ce une pratique courante d'écrire un programme pour se connecter via FIX et de le laisser fonctionner pendant toute la durée de la session? Ou est-ce acceptable de fermer le programme, étant donné que je n'envoie pas de message de déconnexion et de me reconnecter plus tard dans la journée?

Je ne sais pas ce que les autres ont fait, mais j'utilisé QuickFIX avec Python depuis des années et n'a jamais eu aucun problème en cours d'exécution de mon système toute la journée ou l'arrêter périodiquement pour une raison quelconque et rebranchement. À la fin, j'ai fini par laisser le système connecté pendant des semaines à la fois, puisque cela m'a permis d'enregistrer des données.

Je dirais que la réponse à vos deux questions est OUI. Il est courant de le laisser tourner. En outre, il est acceptable de simplement fermer le programme.

Il peut toujours y avoir des cas limites et des caractéristiques idiosyncratiques de votre implémentation et de votre contrepartie, vous devriez donc chercher à comprendre pourquoi ils vous ont demandé de ne pas vous déconnecter. Cela me semble très étrange. Est-ce que leur moteur FIX n'est pas capable de quelque chose de très simple et standard?

+1

Je pense que la raison pour laquelle le fournisseur vous demande de rester connecté toute la journée est la façon dont il surveille les connexions/discothèques, ce qui signifie que tout ce qui est en dehors des heures de connexion est considéré comme une erreur. Cela semble un peu trop strict ... – rupweb

0

Oui, il est courant de conserver les sessions FIX pendant longtemps. Cela ne devrait pas être un problème.

Vous ne pouvez pas simplement éteindre votre programme en tant que messages FIX.Heartbeat(35=0) au niveau de la session, envoyés périodiquement (généralement 30s), afin de garder la connexion TCP sous-jacente "ouverte", et vérifiez que les deux extrémités sont toujours ouvertes. fonctionne correctement. Par les détails que vous avez donnés, si votre fournisseur (qui est probablement le côté accepteur) le demande, c'est peut-être parce qu'ils ont besoin de vous envoyer des messages, sans délai. Si vous (l'initiateur) n'êtes pas connecté à ce moment-là, ils ne pourront pas envoyer ces messages, car ils ne pourront pas initier une session avec vous.

Le fournisseur peut également surveiller les sessions, mais en tant qu'initiateur, cela semble étrange. en tant qu'initiateurs attendent des connexions. Il est plus probable qu'ils surveillent les chutes de sessions inattendues. Dans l'ensemble, cela dépend de votre fournisseur de toute façon, vous devez suivre ce qu'ils disent ...