# FIX API
This document provides an overview of the FIX API provided by the FIX-FastTrade system. The FIX API allows external trading systems to integrate with FIX-FastTrade using the Financial Information eXchange (FIX) protocol.
SessionID Class
The SessionID class represents a unique identifier for FIX sessions.
Constructors
// Default constructor SessionID();
// Constructor from string (for backward compatibility) SessionID(const std::string& sessionId);
// Constructor with FIX version, sender, and target SessionID(const std::string& beginString, const std::string& senderCompID, const std::string& targetCompID);
// Copy constructor SessionID(const SessionID& other);
Methods
// String conversion std::string toString() const; operator std::string() const;
// Getters const std::string& getBeginString() const; const std::string& getSenderCompID() const; const std::string& getTargetCompID() const;
// Comparison operators bool operator==(const SessionID& other) const; bool operator!=(const SessionID& other) const; bool operator<(const SessionID& other) const;
Session Management
The enhanced Session class provides high-performance FIX session management with connection pooling and optimizations.
Session Configuration
- struct SessionConfig {
// Connection settings std::string host; uint16_t port; std::vector<std::pair<std::string, uint16_t>> backupHosts;
// Performance settings size_t sendQueueSize = 10000; size_t receiveQueueSize = 10000; bool useZeroCopy = true; bool enableConnectionPool = true; size_t connectionPoolSize = 5;
// Timing settings std::chrono::milliseconds heartbeatInterval{30000}; std::chrono::milliseconds reconnectInterval{5000}; std::chrono::milliseconds responseTimeout{5000};
// Threading settings int sendThreadCPU = -1; // CPU core for send thread (-1 = no affinity) int receiveThreadCPU = -1; // CPU core for receive thread
// Monitoring settings bool enableLatencyTracking = true; size_t latencyHistorySize = 10000;
};
Session Initialization
To create a FIX session, use the Session constructor:
- Session(const Config& config,
const SessionConfig& sessionConfig, Application& application);
config: The FIX configuration objectsessionConfig: Enhanced session configuration with performance settingsapplication: The application object implementing theApplicationinterface
Connection Management
// Connect to the FIX endpoint bool connect();
// Check if session is connected bool isConnected() const;
// Check if session is logged on bool isLoggedOn() const;
// Disconnect from the FIX endpoint void disconnect();
Message Handling
The FIX API provides high-performance functions to send and receive FIX messages with zero-copy optimization.
Sending Messages
// Send a message (zero-copy if possible) bool send(const Message& message);
// Send a pre-formatted message buffer bool sendRaw(const char* buffer, size_t length);
Receiving Messages
// Receive a message (blocking) bool receive(Message& message,
std::optional<std::chrono::milliseconds> timeout = std::nullopt);
// Try to receive a message (non-blocking) bool tryReceive(Message& message);
Application Interface
Implement the Application interface to handle session events and messages:
class Application { public:
virtual ~Application() = default;
// Session lifecycle callbacks virtual void onCreate(const SessionID& sessionID) = 0; virtual void onLogon(const SessionID& sessionID) = 0; virtual void onLogout(const SessionID& sessionID) = 0;
// Administrative message callbacks virtual void toAdmin(Message& message, const SessionID& sessionID) = 0; virtual void fromAdmin(const Message& message, const SessionID& sessionID) = 0;
// Application message callbacks virtual void toApp(Message& message, const SessionID& sessionID) = 0; virtual void fromApp(const Message& message, const SessionID& sessionID) = 0;
};
Message Class
The Message class represents FIX messages with field-based access.
Methods
// Field manipulation void setField(int tag, const std::string& value); std::string getField(int tag) const; bool hasField(int tag) const; void removeField(int tag); void clear();
// Access all fields const std::unordered_map<int, std::string>& getFields() const;
Session State Management
Session States
- enum class SessionState {
DISCONNECTED, CONNECTING, CONNECTED, LOGGING_ON, LOGGED_ON, LOGGING_OUT, ERROR
};
State Queries
// Get current session state SessionState getState() const;
// Get session ID const SessionID& getSessionID() const;
Performance Features
Connection Pooling
// Enable/disable connection pooling void setConnectionPoolEnabled(bool enabled);
// Set automatic failover hosts void setFailoverHosts(const std::vector<std::pair<std::string, uint16_t>>& hosts);
Statistics and Monitoring
// Get session statistics std::shared_ptr<SessionStatistics> getStatistics() const;
The SessionStatistics class provides comprehensive metrics including:
* Message counts and rates
* Latency percentiles (min, max, mean, p50, p95, p99, p999)
* Connection statistics
* Error counts
Advanced Features
Zero-Copy Message Handling
The session supports zero-copy message processing for optimal performance when useZeroCopy is enabled in the session configuration.
Thread Affinity
Configure CPU affinity for send and receive threads to optimize performance:
SessionConfig config; config.sendThreadCPU = 2; // Pin send thread to CPU core 2 config.receiveThreadCPU = 3; // Pin receive thread to CPU core 3
Automatic Failover
Configure backup hosts for automatic failover:
SessionConfig config; config.backupHosts = {
{“backup1.example.com”, 9001}, {“backup2.example.com”, 9001}
};
For more detailed information on the FIX API and its usage, please refer to the FIX protocol specification and the FIX-FastTrade documentation.