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