FR 2895540 A1 20070629 FR 0513147 A 20051222 PROCEDE DE TRANSMISSION DE DONNEES D'ACTUALISATION D'UN CARNET D'ORDRE DE BOURSE. La présente invention se rapporte au domaine des procédés 5 de transmission de données, notamment dans le domaine boursier. Dans le domaine de la transmission des données de bourse, il est connu d'utiliser une architecture à trois niveaux comme illustrée figure 1 comprenant une bourse 1, un serveur de diffusion 2 10 transmettant les données publiques de la bourse 1 vers les clients abonnés 3a, 3b, 3c. Afin que les clients 3a, 3b, 3c puissent réagir au plus vite aux variations de la bourse 1, il est important que le serveur de diffusion 2 15 transmette les données d'actualisation issues de la bourse de façon rapide, efficace et intègre. Lorsque le serveur de diffusion contient un carnet d'ordre originel à un premier instant t, et que la bourse émet des données 20 d'actualisation du carnet d'ordre au temps t+1, il est nécessaire de transmettre au plus vite le nouveau carnet d'ordre obtenu par l'actualisation du carnet d'ordre originel. Un carnet d'ordre correspond de façon connue en soi à une 25 double liste à l'achat et à la vente comme illustré figure 2. Une première solution connue est d'actualiser le carnet d'ordre au niveau du serveur de diffusion de sorte à générer un carnet d'ordre actualisé, puis de transmettre l'ensemble de ce carnet d'ordre actualisé 30 aux clients 3a, 3b, 3c. Ce procédé possède l'inconvénient de nécessiter la transmission de l'ensemble du carnet d'ordre, ce qui correspond à une transmission importante de données et donc à un temps de transfert important. Ce temps de transfert est parfois incompatible avec les exigences de traitement en temps réel des clients 3a, 3b, 3c. Un des buts de la présente invention est donc de maintenir un carnet d'ordre actualisé au niveau du poste des clients 3a, 3b, 3c tout en évitant la transmission de l'ensemble des données du carnet d'ordre actualisé. Ce but est atteint selon un aspect de l'invention par un procédé pour actualiser à distance un carnet d'ordre originel comprenant des données d'ordre indexées en fonction d'au moins un paramètre stocké au niveau d'un serveur de diffusion (2), le procédé comprenant les étapes consistant à : - recevoir (101, 200) au niveau dudit serveur de diffusion, des données d'actualisation, lesdites données d'actualisation comprenant au moins un attribut dudit au moins un paramètre ; - comparer lesdites données d'actualisation avec au moins une partie dudit carnet d'ordre originel ; -identifier, en fonction de ladite comparaison, au moins un index (IND) dudit au moins un attribut desdites données d'actualisation, ainsi qu'une première action relative audit carnet d'ordre originel au niveau dudit index (IND) ; - transmettre à au moins un poste client (3a, 3b, 3c), ledit index ainsi que ladite première action relative audit carnet d'ordre originel au niveau dudit index. De préférence, ladite première action est déterminée parmi une suppression, une insertion, ou une modification dans ledit carnet d'ordre originel. Le paramètre correspond par exemple au prix de vente ou d'achat et permet d'indexer le carnet d'ordre, chaque ligne du carnet correspondant à un index unique. Selon un premier mode de réalisation, lesdites données d'actualisation comprennent au moins une seconde action d'actualisation associée audit au moins un attribut dudit au moins un paramètre, ladite première action relative audit carnet d'ordre originel au niveau dudit index (IND) étant identique à ladite seconde action. Dans ce cas, on reçoit des données d'actualisation par exemple sous la forme d'un ordre d'insertion à un prix donné correspondant à la seconde action d'actualisation. Selon l'invention, on détermine alors l'index auquel doit avoir lieu cette insertion, et on transmet au client cet index ainsi que l'ordre d'insertion au niveau de cet index. Selon l'invention, si un ordre de type insertion est reçu, ce même type d'action d'insertion est transmis au client. Selon un second mode de réalisation, lesdites données d'actualisation comprennent un carnet d'ordre actualisé, ladite première action relative audit carnet d'ordre originel au niveau dudit index étant déterminée par différence entre ledit carnet d'ordre actualisé et ledit carnet d'ordre originel. Dans ce cas, la bourse transmet des données sous la forme d'une image correspondant directement au carnet d'ordre actualisé. Ce carnet d'ordre actualisé est alors reçu au niveau du serveur de diffusion. Dans ce cas, on compare les attributs actualisés et les attributs du carnet d'ordre originel de sorte à déterminer les différences et on déduit des différences, les actions, par exemple de type insertion, modification ou suppression, associées aux différences. Ces différences forment donc une action au niveau d'un index qui sera transmis aux postes clients. On comprendra mieux l'invention à l'aide de la description, faite ci-après à titre purement explicatif, d'un mode de réalisation de l'invention, en référence aux figures annexées : - la figure 1 illustre une architecture de diffusion entre une bourse et une pluralité de clients connue selon l'art antérieur. La figure 2 illustre un exemple de structure d'un carnet d'ordre connu en soi, stocké au niveau d'un serveur de diffusion. - La figure 3 illustre un exemple de mise en oeuvre du procédé selon l'invention selon un premier mode de réalisation. - La figure 4 illustre un exemple de mise en oeuvre du procédé selon l'invention selon un second mode de réalisation. - La figure 5 représente un premier exemple de données d'actualisation reçues au niveau du serveur de diffusion qui sera traité selon un premier mode de réalisation de l'invention. La figure 6 représente second exemple de données d'actualisation reçues au niveau du serveur de diffusion qui sera traité selon un second mode de réalisation de l'invention. On définit les termes suivants dans le cadre de la présente demande : Une opération de bourse par différentiel correspond à une mise à jour, une insertion ou une suppression de ligne. Une opération de bourse par image correspond à la réception d'une image de carnet d'ordre actualisé. II est également entendu qu'au sens de la présente demande, les transmissions entre différentes stations informatiques peuvent être réalisées par un réseau de transmission. En particulier, les transmissions entre la bourse et le serveur de diffusion sont de préférence réalisée par un réseau de transmission de données, et les transmissions entre le serveur de diffusion et les stations clientes sont de préférence réalisées par un réseau de transmission de données. La figure 2 illustre un carnet d'ordre de type connu en soi comprenant des attributs, avec par exemple les attributs : Quantité Prix Horodatage Code Agent Type de prix Il comprend aussi des lignes composées d'attributs. On peut également définir un paramètre Clef correspondant à un ensemble d'attributs qui permet d'identifier de manière unique une ligne On définit également l'index de ligne 1 , 2, 3 .. n correspondant à la position de la ligne dans un ensemble de lignes. Dans le domaine de la transmission des données de bourse, 20 les lignes sont toujours classées par prix puis par ordre d'insertion. Les prix sont classés par ordre croissant à l'Achat et par ordre décroissant à la Vente. Dans le cas d'égalité de prix, le classement se fait par ordre croissant d'insertion pour l'achat et pour la vente. Ces attributs forment un paramètre d'indexation et permettent donc l'indexation du carnet 25 d'ordre. II est entendu que d'autres paramètres d'indexation sont envisageable selon l'invention. Le carnet d'ordre est finalement l'ensemble des ordres à l'achat et à la vente Illustré figure 3, selon un premier mode de réalisation de l'invention, les données d'actualisation correspondent à une opération de bourse par différentiel et comprennent un type d'action, un sens désignant les lignes à l'Achat ou à la Vente, et un ensemble d'attributs. 30 La liste des attributs fournis par la bourse varie suivant le type d'action à appliquer. Certains de ces attributs sont nécessaires au bon déroulement de l'action et ne peuvent être omis : action de création de ligne : l'ensemble des attributs constituant une ligne (incluant de ce fait le ou les champs permettant la construction du paramètre clef) doivent être nécessairement fournis. action de suppression de ligne : le ou les attributs permettant la constitution du paramètre Clef doivent être fournis. • action de modification de ligne : le ou les attributs permettant la constitution du paramètre clef doivent être fournis en plus de ceux à modifier. Le paramètre Clef est constitué d'un ou plusieurs attributs d'une ligne permettant d'identifier celle-ci tout au long de sa durée de vie (de sa création à sa suppression en passant par des modifications). Ce paramètre Clef correspond selon l'invention à un paramètre d'indexation des lignes du carnet d'ordre. Exemple d'une Clef de ligne composée de 3 attributs: Clef (Prix, Quantité, Horodatage) Exemple de construction de la Clef à l'aide d'attributs: Construit Clef (Clef, Prix, Quantité, Horodatage) Clef. Prix = Prix Clef. Quantité = Quantité Clef. Horodatage = Horodatage Le type d'action à appliquer est soit une insertion de ligne, soit une modification de ligne, soit une suppression de ligne. Un traitement spécifique est dédié à chacune de ces actions. Selon l'invention, on recherche la ligne correspondant à l'action à appliquer. La détermination de l'index de ligne se fait dans la liste des lignes pour un sens donné (Achat ou Vente). Il s'agit de reconstruire pour chacune des lignes parcourues une clef dite clef actualisée , qui sera ensuite comparée à la Clef précédemment construite dite clef originelle . L'index choisi est alors l'index de la ligne dont la clef est identique à celle fournie. L'algorithme suivant est un exemple de recherche d'index de ligne avec le paramètre Clef : CherchelndexLigne(Index, Clef, Lignes) nombreMaxlndex = Lignes.NombreDeLignes-1 POUR tous les index de 0 à nombreMaxlndex ligne = Lignes[index] ConstruitClef(clefLigne, ligne. Prix, ligne. Quantité, ligne.Horodatage) SI clefLigne == Clef Retourne index FINSI FINPOUR Retourne NON TROUVE La détermination de l'index de ligne se fait dans la liste des lignes pour un sens donné (Achat ou Vente). L'algorithme suivant est un exemple de recherche d'index de ligne avec le paramètre prix dédié au sens à l'Achat : CherchelndexPourinsertionAchat(lndex, Prix, Lignes) nombreMaxlndex = Lignes.NombreDeLignes-1 POUR tous les index de 0 à nombreMaxlndex ligne = Lignes[index] SI ligne. prix > prix Retourne index FINS/ FINPOUR Retourne nombreMaxlndex+l L'algorithme suivant est un exemple de recherche d'index de ligne avec le paramètre prix dédié au sens à la Vente : CherchelndexPourinsertionVente(Index, Prix, Lignes) nombreMaxlndex = Lignes. NombreDeLignes-1 POUR tous les index de 0 à nombreMaxlndex ligne = Lignes[index] SI ligne. prix L'algorithme suivant est un exemple de suppression d'une limite : SupprimeLimite(Index, Lignes) nombreMaxlndex = Lignes. NombreDeLignes-1 SI nombreMaxlndex > Index POUR tous les indexSuivant de index à nombreMaxlndex Lignes(indexSuivant] = Lignes[indexSuivant+1] FINPOUR FINSI supprime Lignes (nombreMaxlndex] 8 La modification des attributs d'une ligne se fait en sélectionnant la ligne via son index pour un sens donnée (Achat ou Vente), puis en modifiant celle-ci avec les nouveaux attributs fournis. L'algorithme suivant est un exemple de modification de l'attribut Quantité d'une ligne: ModifieLigne(Index, Lignes, quantité) ligne = Lignes[index] ligne.quantite = quantité L'insertion d'une ligne consiste à créer une nouvelle ligne avec les attributs reçus puis à insérer cette ligne dans la liste des lignes pour un sens donné (Achat ou Vente). Chacune des lignes suivant l'insertion de la nouvelle ligne, si elles existent, verront leur index augmenté d'une position. Le nombre total d'index de la liste augmente de ce fait d'une unité. L'algorithme suivant est un exemple d'insertion d'une ligne : lnsereLigne(lndex, Lignes, prix, quantité, horodatage, typePrix) NouvelleLigne. prix = prix NouvelleLigne.quantité = quantité NouvelleLigne.horodatage = horodatage NouvelleLigne. typePrix = typePrix nombreMaxlndex = Lignes. NombreDeLignes-1 SI Index On donne maintenant un exemple de transmission de données actualisées dans le carnet d'ordre originel tel qu'illustré figure 1. Pour cela, on suppose que les données d'actualisation reçues au niveau du 10 serveur de diffusion 2 sont celles illustrées figure 5. Selon l'invention, on va alors comparer cette donnée d'actualisation d'insertion, au carnet d'ordre de vente de la figure 1. On en déduit que cette donnée doit être insérée à la ligne 2 du carnet d'ordre de vente. On transmet alors aux stations clientes l'information d'insertion d'un prix de 3.19 dans le 15 carnet d'ordre de vente, à la ligne 2. Illustré figure 4, selon un second mode de réalisation, une photographie complète du carnet d'ordre est reçue de la bourse (ensemble de lignes à l'Achat et à la Vente). Ce mode d'actualisation 20 est une opération de bourse par image. Le traitement des données actualisées diffère si des données originelles existent dans la base du serveur de diffusion de prix. 25 Cette méthode a pour but de définir un ensemble d'action (création, modification, suppression). Ces actions une fois appliquées aux données originelles permettent de constituer le carnet d'ordre actualisé. L'ensemble des actions regroupées dans un ordre bien précis constitue les données actualisées. 30 La comparaison des deux carnets d'ordre se fait respectivement pour les lignes dites à l'achat et celles dites à la vente. Les lignes à l'achat des données originelles sont comparées avec les lignes à l'achat des données actualisées. Il en est de même pour la vente. Les lignes sont comparées à index équivalent. Après 5 comparaison, une action constituant une future donnée actualisée peut être générée : - la ligne actualisée est identique à la ligne originelle. Aucune action n'est générée. - la ligne actualisée est différente de la ligne originelle. Une 10 action de modification est alors générée sur la ligne identifiée. - la ligne actualisée est présente mais pas la ligne originelle. Une action d'insertion est alors générée sur la ligne identifiée. - la ligne originelle est présente mais pas la ligne actualisée. Une action de suppression est alors générée sur la ligne identifiée. 15 L'algorithme suivant est un exemple de comparaison d'une ligne : CompareUneLigne(NouvelleLigne, AncienneLigne) SI NouvelleLigne.Prix != AncienneLigne.Prix Retourn DIFFERENT ; FINS/ SI NouvelleLigne. Quantité == AncienneLigne. Quantité ET NouvelleLigne.Horodatage == AncienneLigne.Horodatage Retourne IDENTIQUE FIN SI Retourne DIFFERENT La comparaison se fait en 2 temps pour une notion 30 d'optimisation. Un premier test consiste à ne comparer que les prix des limites. Si cette comparaison s'avère positive, l'ensemble des attributs constituant la limites seront comparées. 20 25 L'algorithme suivant est un exemple de comparaison de Limites pour génération d'actions : CompareLignes(ListeActions, NouvelleLignes, AncienneLignes) SI NouvelleLignes.NombreLigne > AncienneLignes.NombreLigne indexEnCommun = NouvelleLignes.NombreLigne-1 FINSI SINON indexEnCommun = AncienneLignes.NombreLigne-1 FINS/ POUR tous les indexSuivant de 0 à indexEnCommun SI CompareUneLigne(NouvelleLignes[i], AncienneLigne[i]) == DIFFERENT ListeActions. Ajoute(indexSuivant, MODFICATION, NouvelleLignes.Quantité, .) FINS/ FI NPO UR..DTD: SI NouvelleLignes. NombreLigne > AncienneLignes. NombreLigne POUR tous les indexSuivant de indexEnCommun +1 à NouvelleLignes.NombreLigne-1 ListeActions.Ajoute(indexSuivant, INSERTION, NouvelleLignes) FINS/ 25 SINON POUR tous les indexSuivant de indexEnCommun +1 à AncienneLignes.NombreLigne-1 ListeActions.Ajoute(indexSuivant, SUPPRESSION) FINS/ Si aucune action n'est générée, les données originelles sont strictement identiques aux données actualisées. Dans ce cas, aucune information d'actualisation n'est envoyée aux applications clientes car 10 15 20 30 aucune donnée ne doit être actualisée. Les données originelles ne sont pas non plus mises à jour. Si aucune donnée originelle n'est présente, l'action de suppression de l'ensemble du carnet est alors émis aux applications clientes. A ce stade, nous avons la certitude que les applications clientes ont un carnet d'ordre identique à celui du serveur. Les données originelles (présentes ou non) sont ensuite 10 remplacées par les données actualisées. Les données actualisées émises aux applications clientes résultent de la phase de comparaison 202. Ces données peuvent comprendre des actions de type insertion, suppression ou modification. 15 Ces données actualisées résultent de la comparaison entre l'image du carnet d'ordre reçu et le carnet d'ordre originel. Chacune de ces action est optimisée puisque l'index de ligne est fourni. Ces applications clientes tout comme dans le mode de réalisation précédemment décrit, se consacreront uniquement aux étapes 107 à 109. Comme dans le 20 mode de réalisation précédent, les index des lignes à insérer, supprimer ou modifier déterminés au moment de la comparaison entre les lignes, sont transmises aux postes clients. Si les données actualisées émises aux applications clientes 25 comprennent des actions de type insertion uniquement, les applications clientes se consacreront uniquement à l'étape 109 du mode de réalisation précédent. On donne maintenant un exemple de transmission de données 30 actualisées dans le carnet d'ordre originel tel qu'illustré figure 1. Pour cela, on suppose que les données d'actualisation reçues au niveau du serveur de diffusion 2 sont celles illustrées figure 6. Selon l'invention, on va alors comparer cette donnée d'actualisation, au carnet d'ordre de vente de la figure 1. On en déduit que l'action associée à ce carnet d'ordre actualisé correspond à une insertion à la ligne 2 du carnet d'ordre de vente pour un prix de 3.19. On transmet alors simplement aux stations clientes l'information d'insertion d'un prix de 3.19 dans le carnet d'ordre de vente, à la ligne 2.5 REVENDICATIONS 1. Procédé pour actualiser à distance un carnet d'ordre originel comprenant des données d'ordre indexées en fonction d'au moins un paramètre stockés au niveau d'un serveur de diffusion (2), le procédé comprenant les étapes consistant à : - recevoir (101, 200) au niveau dudit serveur de diffusion, des données d'actualisation, lesdites données d'actualisation comprenant au moins un attribut dudit au moins un paramètre ; - comparer lesdites données d'actualisation avec au moins une partie dudit carnet d'ordre originel ; - identifier, en fonction de ladite comparaison, au moins un index (IND) dudit au moins un attribut desdites données 15 d'actualisation, ainsi qu'une première action relative audit carnet d'ordre originel au niveau dudit index (IND) ; - transmettre à au moins un poste client (3a, 3b, 3c), ledit index ainsi que ladite première action relative audit carnet d'ordre originel au niveau dudit index. 20 2. Procédé selon la revendication 1, dans lequel ladite première action est déterminée parmi une suppression, une insertion, ou une modification dans ledit carnet d'ordre originel. 25 3. Procédé selon la revendication 1 ou 2, dans lequel lesdites données d'actualisation comprennent au moins une seconde action d'actualisation associée audit au moins un attribut dudit au moins un paramètre, ladite première action relative audit carnet d'ordre originel au niveau dudit index (IND) étant identique à ladite seconde 30 action. 4. Procédé selon la revendication 1 ou 2, dans lequel lesdites données d'actualisation comprennent un carnet d'ordre actualisé, ladite première action relative audit carnet d'ordre originel auniveau dudit index étant déterminée par différence entre ledit carnet d'ordre actualisé et ledit carnet d'ordre originel. 5. Procédé selon l'une quelconque des revendications 5 précédente dans lequel ledit carnet d'ordre est un tableau de données indexé en ligne ou en colonne en fonction d'au moins un paramètre.