2016-05-09 20 views
0

Ich habe vor kurzem die Aufgabe erhalten, eine grundlegende Handelsplattform für neue Händler zu machen. Ich verbinde mich mit einer Bank FIX 4.4 Implementierung.Senden einer Nachricht an eine bestimmte Sitzung in QUICKFIX N

Die Bank hat 2 Sitzungen angegeben. Eine für Angebotsdaten und eine für Handelsausführungen.

Ich verwende QuickfixN und Codierung in C#

Ich habe meine Initiator Session Config beiden Sitzungen haben darin einzurichten. Der Port ist anders und die Zielkompo- nenten und Absenderkompendenten sind unterschiedlich. Ich kann beides verbinden. Worum ich mich ärgere, ist herauszufinden, wie ich meine Bestellanforderungen über eine Sitzung und nicht über die andere senden kann.

Beide Sitzungen erfordern FIX 4.4. Standardmäßig verwendet es nur die erste Sitzung.

Antwort

3

Wenn Sie die Initiatoren zu erstellen, die Session-Objekte in Variablen speichern. (Vielleicht über die OnCreate Rückruf, wie getan here.)

Machen Sie diese Variablen für die Nachrichten senden Klasse zugänglich.

Dann Nachrichten zu senden, rufen Sie einfach eines der folgenden:

quoteSession.send(msg) 
tradeSession.send(msg) 
+1

Danke! Der onCreate war der Teil, den ich brauchte! – Brett

0

Nun, Sie müssen die SessionId der Sitzung multiplexen, auf die eine Nachricht gesendet werden soll, und den Nachrichtenkopf einrichten. Etwas wie folgt aus (in Java):

public void mySend (Message m) throws FieldNotFound 
{  
    String beginString = "FIX.4.4"; 
    String sender = "SENDER"; 
    String target = "TARGET"; 

    // Set the message headers 
    m.getHeader().setField(new SenderCompID(sender)); 
    m.getHeader().setField(new TargetCompID(target)); 

    // Set the correct session for the initiator to send out to 
    SessionID s = new SessionID(beginString, sender, target); 

    // Lookup the relevant QF session 
    _session = Session.lookupSession(s); 

    // Send the FIX message 
    try 
    { 
      if (_session != null) 
      { 
       _session.send(m); 
      } 
      else 
      { 
       log("Can't send message: FIX session not created."); 
       log(" " + m.toString()); 
      } 
    } 
    catch (Exception e) 
    { 
      errorHandler(e); 
    } 
} 
+1

die Header Einstellung hier ist nutzlos; Sie werden während '_session.send (m)' mit den Session-Werten geplagt. Außerdem ist es unnötig, eine Sitzungssuche für jeden Sendevorgang durchzuführen. besser, um die Sessions nur in extern sichtbaren vars zu speichern und den Anrufer entscheiden zu lassen, was zu verwenden ist. –

+0

Danke, ich wusste nicht, dass die Absender-Comp-ID und die Ziel-Comp-ID-Tags für eine QF-Nachricht überschrieben würden, indem sie send aufrufen würden. Recht? Code ähnlich wie oben sollte eine schnelle Möglichkeit sein, das Multiplexen zwischen vielen verschiedenen Akzeptor- und Initiatorsitzungen zu lösen (dh für die Preisverteilung und Aktualisierungen für viele FIX-Clients) und yeah das Verwalten einer Art von internem Array von Sitzungen ist ein besserer Weg, dies zu tun (Sie wissen nicht, wie viele Sitzungen dynamisch verbunden/disco'd usw. sind) – rupweb

+0

Richtig. Die meiste Zeit werden Sie eine Nachricht erstellen, ohne irgendwelche Headerfelder zu setzen. Sie verlassen sich nur auf die Engine, um es für Sie basierend auf der Sitzung zu tun. In QuickFIX/n wird die BeginString/SenderCompID/TargetCompID alle geplottert. In Java bin ich mir nicht 100% ig sicher, aber ich vermute, es ist dasselbe. –

Verwandte Themen