Bonjour,
falex a écrit :Manu ton histoire reflète bien une des limites de l'api :
Les ordres dont envoyé en REST mais l'update se fait en STREAM.
Je m'amuse à développer ma propre application de trading simplifié, plus adaptée à mes limites de tradeur désespérément balourd (et puis pendant ce temps je ne perds pas).
Je suis reparti à zéro pour la couche réseau, car j'aime bien comprendre.
Je ne connais pas vraiment python et wxwidgets, donc je ne peux pas vous aider directement, mais voici quelques remarques à propos de ces déconnexions de LightStreamer :
- C'est une surcouche qui simule une connexion continue au dessus d'une connexion http, or celle ci n'a pas été conçue pour cela à l'origine, d'où les coupures fréquentes.
- Ils ont prévu des mécanismes de contrôle qui permettent de surveiller assez facilement l'état du réseau.
Méthode 1 : Quand tout va bien, le serveur envoie des infos en permanence (ticks, positions). S'il n'a rien à dire pendant plus de x secondes, il bouche le trou en envoyant un message PROBE (x est paramétrable à la connexion).
Donc, si on ne reçoit rien pendant plus de x secondes (ni tick, ni position, ni PROBE), c'est que la connexion est coupée.
Il faut alors la relancer (uniquement la partie STREAM, en gardant les identifiants obtenus en REST).
Solution : mettre un timer qui déclenche une exception toutes les x+1 chouilla secondes, que l'on remet à zéro chaque fois que l'on reçoit quelque chose (PROBE ou info, peu importe). Ainsi il ne se déclenche que si l'on ne reçoit rien pendant trop longtemps, et on peut alors relancer la connexion, ou au moins avertir l'utilisateur du problème.
Méthode 2 (complémentaire de la 1) : même quand tout va bien, la connexion STREAM est coupée délibérément par le serveur de temps en temps (quelques heures ou quelques minutes, ça dépend de son humeur). Mais comme il est gentil, il prévient, en envoyant un message LOOP quelques secondes avant.
Il faut donc veiller l'arrivée des LOOP, et relancer la connexion quand ça arrive.
Je ne sais pas comment on fait ça en python (je programme en c++ avec qt pour l'interface), mais je suis à peu près sûr que c'est possible.
En espérant avoir été un peu utile,
Bonne nuit aux couche-tard et bonjour aux lève-tôt !