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
....).
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.
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 –