Documentation for QuickFIX/C++ (with Python and Ruby)

Working With Messages

Sending Messages

Messages can be sent to a counterparty with the static Session::sendToTarget methods.

C++
// send a message that already contains a BeginString, SenderCompID, and a TargetCompID
static bool sendToTarget( Message&, const std::string& qualifier = "" )
  throw(SessionNotFound&);

// send a message based on the sessionID, convenient for use
// in fromApp since it provides a session ID for incoming
// messages
static bool sendToTarget( Message&, const SessionID& )
  throw(SessionNotFound&);

// append a SenderCompID and TargetCompID before sending
static bool sendToTarget( Message&, const SenderCompID&, const TargetCompID&, const std::string& qualifier = "" )
  throw(SessionNotFound&);

// pass SenderCompID and TargetCompID in as strings
static bool sendToTarget( Message&, const std::string&, const std::string&, const std::string& qualifier = "" )
  throw(SessionNotFound&);
Python
def sendToTarget(message):

def sendToTarget(message, qualifier):

def sendToTarget(message, sessionID):

def sendToTarget(message, senderCompID, targetCompID):

def sendToTarget(message, senderCompID, targetCompID, qualifier):
Ruby
def sendToTarget(message)

def sendToTarget(message, qualifier)

def sendToTarget(message, sessionID)

def sendToTarget(message, senderCompID, targetCompID)

def sendToTarget(message, senderCompID, targetCompID, qualifier)

Type Safe Messages and Fields

Message constructors take in all required fields and adds the correct MsgType and BeginString for you. With the set method, the compiler will not let you add a field that is not a part of a message as defined by the spec.

C++
void sendOrderCancelRequest()
{
  FIX41::OrderCancelRequest message(
    FIX::OrigClOrdID("123"),
    FIX::ClOrdID("321"),
    FIX::Symbol("LNUX"),
    FIX::Side(FIX::Side_BUY));

  message.set(FIX::Text("Cancel My Order!"));

  FIX::Session::sendToTarget(message, SenderCompID("TW"), TargetCompID("TARGET"));
}

Type Safe Field Only

The setField method allows you to add any field to any message.

C++
void sendOrderCancelRequest()
{
  FIX::Message message;
  FIX::Header header& = message.getHeader();

  header.setField(FIX::BeginString("FIX.4.2"));
  header.setField(FIX::SenderCompID(TW));
  header.setField(FIX::TargetCompID("TARGET"));
  header.setField(FIX::MsgType(FIX::MsgType_OrderCancelRequest));
  message.setField(FIX::OrigClOrdID("123"));
  message.setField(FIX::ClOrdID("321"));
  message.setField(FIX::Symbol("LNUX"));
  message.setField(FIX::Side(FIX::Side_BUY));
  message.setField(FIX::Text("Cancel My Order!"));

  FIX::Session::sendToTarget(message);
}
Python
from quickfix import *

def sendOrderCancelRequest:
        message = quickfix.Message();
        header = message.getHeader();

        header.setField(quickfix.BeginString("FIX.4.2"))
        header.setField(quickfix.SenderCompID(TW))
        header.setField(quickfix.TargetCompID("TARGET"))
        header.setField(quickfix.MsgType("D"))
        message.setField(quickfix.OrigClOrdID("123"))
        message.setField(quickfix.ClOrdID("321"))
        message.setField(quickfix.Symbol("LNUX"))
        message.setField(quickfix.Side(Side_BUY))
        message.setField(quickfix.Text("Cancel My Order!"))

        Session.sendToTarget(message)
Ruby
require 'quickfix_ruby'

def sendOrderCancelRequest
  message = Quickfix::Message.new();
  header = message.getHeader();

  header.setField(Quickfix::BeginString.new("FIX.4.2"))
  header.setField(Quickfix::SenderCompID.new(TW))
  header.setField(Quickfix::TargetCompID.new("TARGET"))
  header.setField(Quickfix::MsgType.new("D"))
  message.setField(Quickfix::OrigClOrdID.new("123"))
  message.setField(Quickfix::ClOrdID.new("321"))
  message.setField(Quickfix::Symbol.new("LNUX"))
  message.setField(Quickfix::Side.new(Side.BUY))
  message.setField(Quickfix::Text.new("Cancel My Order!"))

  Quickfix::Session.sendToTarget(message)
end

No Type Safety

You can also use setField to pass in primitives.

C++
void sendOrderCancelRequest()
{
  FIX::Message message;
  // BeginString
  message.getHeader().setField(8, "FIX.4.2");
  // SenderCompID
  message.getHeader().setField(49, "TW");
  // TargetCompID, with enumeration
  message.getHeader().setField(FIX::FIELD::TargetCompID, "TARGET");
  // MsgType
  message.getHeader().setField(35, 'F');
  // OrigClOrdID
  message.setField(41, "123");
  // ClOrdID
  message.setField(11, "321");
  // Symbol
  message.setField(55, "LNUX");
  // Side, with value enumeration
  message.setField(54, FIX::Side_BUY);
  // Text
  message.setField(58, "Cancel My Order!");

  FIX::Session::sendToTarget(message);
}
Python
from quickfix import *

def sendOrderCancelRequest:
        message = quickfix.Message()
        # BeginString
        message.getHeader().setField(quickfix.StringField(8, "FIX.4.2"))
        # SenderCompID
        message.getHeader().setField(quickfix.StringField(49, "TW"))
        # TargetCompID, with enumeration
        message.getHeader().setField(quickfix.StringField(56, "TARGET"))
        # MsgType
        message.getHeader().setField(quickfix.CharField(35, 'F'))
        # OrigClOrdID
        message.setField(quickfix.StringField(41, "123"))
        # ClOrdID
        message.setField(quickfix.StringField(11, "321"))
        # Symbol
        message.setField(quickfix.StringField(55, "LNUX"))
        # Side, with value enumeration
        message.setField(quickfix.CharField(54, quickfix.Side_BUY))
        # Text
        message.setField(quickfix.StringField(58, "Cancel My Order!"))

        Session.sendToTarget(message);
Ruby
require 'quickfix_ruby'

def sendOrderCancelRequest
  message = Quickfix::Message.new()
  # BeginString
  message.getHeader().setField(Quickfix::StringField.new(8, "FIX.4.2"))
  # SenderCompID
  message.getHeader().setField(Quickfix::StringField.new(49, "TW"))
  # TargetCompID, with enumeration
  message.getHeader().setField(Quickfix::StringField.new(56, "TARGET"))
  # MsgType
  message.getHeader().setField(Quickfix::CharField.new(35, 'F'))
  # OrigClOrdID
  message.setField(Quickfix::StringField.new(41, "123"))
  # ClOrdID
  message.setField(Quickfix::StringField.new(11, "321"))
  # Symbol
  message.setField(Quickfix::StringField.new(55, "LNUX"))
  # Side, with value enumeration
  message.setField(Quickfix::CharField.new(54, quickfix.Side_BUY))
  # Text
  message.setField(Quickfix::StringField.new(58, "Cancel My Order!"))

  Quickfix::Session.sendToTarget(message)
end