2010-01-31 6 views
2

Je suis nouveau avec les trucs quickfix et moi avons plusieurs questions concernant la bibliothèque quickfix, et je serai plus qu'heureux d'obtenir des réponses de votre part:questions bibliothèque quickfix

Je prévois de développer serveur correctif obtient la demande FIX de plusieurs clients simultanément. A ce propos,

a) Quelle est la signification exacte de TargetID (c'est-à-dire CLIENT1) si j'ai besoin de distinguer une requête de différents clients (comment puis-je distinguer ces demandes l'une de l'autre)?

b) Quelle est généralement la signification de TargetID concernant le serveur/client?

c) Comment ajouter des champs personnalisés et des messages personnalisés et quelle est la connexion exacte à l'objet de message cracker?

Cordialement,

Mordechai Yaakobi

+0

pour ajouter des messages personnalisés et des champs suivez ces étapes simples http://adding-custom-fields-messages-in-qf-6-easy-steps.32054.n6.nabble.com –

Répondre

8
  1. TargetID est le nom de la boîte à l'endroit où vous l'envoi de messages, si vous devez distinguer les sessions pour plusieurs clients (je suppose en un serveur) juste donner à chaque client différents SenderCompID.

    Sur votre serveur, vous devez configurer une session pour chaque client.

    Exemple pour une session client-serveur:

    Sur votre serveur (INCa):

    [SESSION] 
    BeginString=FIX.4.0 
    SenderCompID=INCA 
    TargetCompID=CLIENT1 
    

    Sur votre client (CLIENT1):

    [SESSION] 
    BeginString=FIX.4.0 
    SenderCompID=CLIENT1 
    TargetCompID=INCA 
    

    quickfixengine distingue la session (serveur -client connection) basé sur ces 3 valeurs: (BeginString, TargetCompID, SenderCompID)

    Lorsque vous envoyez un message, vous mettez votre ID comp comme sendercompid et la cible à l'endroit où vous envoyez le message comme targetcompid. Vous spécifiez beginstring basé sur le correctif version que vous souhaitez utiliser pour communiquer (FIX4.0/FIX4.2 ....).

  2. Je suppose que c'est expliqué ci-dessus, TargetID est l'ID de la boîte où vous envoyer des messages. Lorsque le serveur répondant retour au client il mis SenderCompID comme il est (serveur) id et TargetCompID sera réglé sur le client à l'endroit où est l'envoi de la réponse.

  3. Les zones personnalisées dépendent de ce qui est exactement requis .protocole FIX spécifie champs personnalisés ceux qui FieldID plus grand que la gamme réservée, de sorte que vos champs personnalisés peuvent commencer par FieldID 5000.

    Il y a deux options sur comment s'y prendre. Le plus simple consiste simplement à utiliser la valeur numérique du message et à l'ajouter au message (I supposons que vous utilisez C++ mais il est similaire à avec d'autres langues).

    Quelque chose comme:

    msg.setField(5000,"SomeValue"); 
    

    Ce champ personnalisé ne sera pas automatiquement validée car FIX ne sait pas. FIX utilise xml fichiers où chaque message et champ est spécifié.

    Il y a une procédure à ajouter un nouveau message aux spécifications XML puis Régénérer code quickfixengine pour générer de nouvelles structures sur le terrain, mais si Jusqu'à présent, je ne l'ai pas besoin de le faire.

    pirate message est juste une méthode qui prend pointeur vers message générique et il regarde l'ID de message (si je me souviens) et appelle gestionnaire approprié.

    Il est une grande instruction if avec beaucoup des opérations de chaîne si parfois il est préférable de faire la vous vérifier, mais vous devriez être correct de utiliser.

    Voici comment la méthode ressemble, vous aurez l'idée:

    void crack(const Message& message, 
         const FIX::SessionID& sessionID) 
    { 
    const std::string& msgTypeValue 
         = message.getHeader().getField(FIX::FIELD::MsgType);   
    if(msgTypeValue == "0") 
        onMessage((const Heartbeat&)message, sessionID); 
    else 
    if(msgTypeValue == "A") 
        onMessage((const Logon&)message, sessionID); 
    else 
    if(msgTypeValue == "1") 
        onMessage((const TestRequest&)message, sessionID); 
    else 
    

    Vous pouvez ensuite mettre en œuvre généralement la méthode appropriée comme par exemple si vous ne vous préoccupez ExecutionReport s vous implémentez dans votre code:

    virtual void onMessage(ExecutionReport&, const FIX::SessionID&); 
    

    Ensuite, votre application obtenir le ExecutionReport afin que vous puissiez le traiter. Les onMessage méthodes pour les messages que vous n'avez pas implémentent simplement ne rien faire et retour si le message ne parviendra jamais à votre application.

Si vous avez besoin d'ajouter des messages personnalisés/champs que j'ai trouvé this useful, je l'ai pas utilisé bien.