# IOrderManager Interface Design ## Overview The IOrderManager interface is the core contract for the Order Management System (OMS) that defines all functionality required for order submission, management, algorithmic execution, and smart order routing. ## Interface Definition ```csharp using NT8.Core.Common.Models; using NT8.Core.Risk; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace NT8.Core.Orders { /// /// Order management interface - handles order submission, routing, and execution /// public interface IOrderManager { #region Order Submission and Management /// /// Submit a new order for execution /// Task SubmitOrderAsync(OrderRequest request, StrategyContext context); /// /// Cancel an existing order /// Task CancelOrderAsync(string orderId); /// /// Modify an existing order /// Task ModifyOrderAsync(string orderId, OrderModification modification); /// /// Get order status /// Task GetOrderStatusAsync(string orderId); /// /// Get all orders for a symbol /// Task> GetOrdersBySymbolAsync(string symbol); /// /// Get all active orders /// Task> GetActiveOrdersAsync(); #endregion #region Algorithmic Execution /// /// Execute a TWAP order /// Task ExecuteTwapAsync(TwapParameters parameters, StrategyContext context); /// /// Execute a VWAP order /// Task ExecuteVwapAsync(VwapParameters parameters, StrategyContext context); /// /// Execute an Iceberg order /// Task ExecuteIcebergAsync(IcebergParameters parameters, StrategyContext context); #endregion #region Smart Order Routing /// /// Route order based on smart routing logic /// Task RouteOrderAsync(OrderRequest request, StrategyContext context); /// /// Get available execution venues /// List GetAvailableVenues(); /// /// Get routing performance metrics /// RoutingMetrics GetRoutingMetrics(); #endregion #region Risk Integration /// /// Validate order against risk parameters /// Task ValidateOrderAsync(OrderRequest request, StrategyContext context); #endregion #region Configuration and Management /// /// Update routing configuration /// void UpdateRoutingConfig(RoutingConfig config); /// /// Get current routing configuration /// RoutingConfig GetRoutingConfig(); /// /// Update algorithm parameters /// void UpdateAlgorithmParameters(AlgorithmParameters parameters); /// /// Get current algorithm parameters /// AlgorithmParameters GetAlgorithmParameters(); /// /// Reset OMS state /// void Reset(); #endregion #region Monitoring and Metrics /// /// Get OMS performance metrics /// OmsMetrics GetMetrics(); /// /// Check if OMS is healthy /// bool IsHealthy(); #endregion } } ``` ## Supporting Data Models ### OrderRequest ```csharp /// /// Order request parameters /// public record OrderRequest( string Symbol, OrderSide Side, OrderType Type, int Quantity, decimal? LimitPrice, decimal? StopPrice, TimeInForce TimeInForce, string Algorithm, // TWAP, VWAP, Iceberg, or null for regular order Dictionary AlgorithmParameters ); ``` ### OrderResult ```csharp /// /// Order submission result /// public record OrderResult( bool Success, string OrderId, string Message, OrderStatus Status ); ``` ### OrderStatus ```csharp /// /// Current order status /// public record OrderStatus( string OrderId, string Symbol, OrderSide Side, OrderType Type, int Quantity, int FilledQuantity, decimal? LimitPrice, decimal? StopPrice, OrderState State, DateTime CreatedTime, DateTime? FilledTime, List Fills ); ``` ### TwapParameters ```csharp /// /// TWAP algorithm parameters /// public record TwapParameters( string Symbol, OrderSide Side, int TotalQuantity, TimeSpan Duration, int IntervalSeconds, decimal? LimitPrice ); ``` ### VwapParameters ```csharp /// /// VWAP algorithm parameters /// public record VwapParameters( string Symbol, OrderSide Side, int TotalQuantity, DateTime StartTime, DateTime EndTime, decimal? LimitPrice, double ParticipationRate // 0.0 to 1.0 ); ``` ### IcebergParameters ```csharp /// /// Iceberg algorithm parameters /// public record IcebergParameters( string Symbol, OrderSide Side, int TotalQuantity, int VisibleQuantity, decimal? LimitPrice ); ``` ### RoutingResult ```csharp /// /// Order routing result /// public record RoutingResult( bool Success, string OrderId, ExecutionVenue SelectedVenue, string Message, Dictionary RoutingDetails ); ``` ### ExecutionVenue ```csharp /// /// Execution venue information /// public record ExecutionVenue( string Name, string Description, bool IsActive, double CostFactor, // Relative cost (1.0 = baseline) double SpeedFactor, // Relative speed (1.0 = baseline) double ReliabilityFactor // Reliability score (0.0 to 1.0) ); ``` ### RoutingMetrics ```csharp /// /// Routing performance metrics /// public record RoutingMetrics( Dictionary VenuePerformance, int TotalRoutedOrders, double AverageRoutingTimeMs, DateTime LastUpdated ); ``` ### VenueMetrics ```csharp /// /// Metrics for a specific execution venue /// public record VenueMetrics( string VenueName, int OrdersRouted, double FillRate, double AverageSlippage, double AverageExecutionTimeMs, decimal TotalValueRouted ); ``` ### RoutingConfig ```csharp /// /// Routing configuration parameters /// public record RoutingConfig( bool SmartRoutingEnabled, string DefaultVenue, Dictionary VenuePreferences, double MaxSlippagePercent, TimeSpan MaxRoutingTime, bool RouteByCost, bool RouteBySpeed, bool RouteByReliability ); ``` ### AlgorithmParameters ```csharp /// /// Algorithm configuration parameters /// public record AlgorithmParameters( TwapConfig TwapSettings, VwapConfig VwapSettings, IcebergConfig IcebergSettings ); ``` ### OmsMetrics ```csharp /// /// OMS performance metrics /// public record OmsMetrics( int TotalOrders, int ActiveOrders, int FailedOrders, double FillRate, double AverageSlippage, double AverageExecutionTimeMs, decimal TotalValueTraded, DateTime LastUpdated ); ``` ## Enumerations ### OrderType ```csharp /// /// Order type enumeration /// public enum OrderType { Market, Limit, StopMarket, StopLimit } ``` ### OrderState ```csharp /// /// Order state enumeration /// public enum OrderState { New, Submitted, Accepted, PartiallyFilled, Filled, Cancelled, Rejected, Expired } ``` ### TimeInForce ```csharp /// /// Time in force enumeration /// public enum TimeInForce { Day, Gtc, // Good Till Cancelled Ioc, // Immediate Or Cancel Fok // Fill Or Kill } ``` ## Integration Points ### Risk Management The IOrderManager interface integrates with the existing IRiskManager to validate all orders before submission: ```csharp // Before submitting any order, the OMS will call: RiskDecision decision = await _riskManager.ValidateOrder(intent, context, config); if (!decision.Allow) { // Handle rejection } ``` ### Position Sizing The OMS works with the IPositionSizer to determine appropriate order quantities: ```csharp // Order quantities are determined by: SizingResult sizing = _positionSizer.CalculateSize(intent, context, config); int orderQuantity = sizing.Contracts; ``` ## Implementation Requirements 1. **Thread Safety**: All methods must be thread-safe as multiple strategies may submit orders concurrently 2. **Error Handling**: Comprehensive error handling with meaningful error messages 3. **Logging**: Detailed logging of all order activities for audit and debugging 4. **Performance**: Optimized for low-latency order execution 5. **Configuration**: All parameters must be configurable without code changes 6. **Monitoring**: Comprehensive metrics collection for performance monitoring 7. **Testing**: All methods must be unit testable with mock dependencies ## Dependencies 1. NT8.Core.Risk.IRiskManager 2. NT8.Core.Sizing.IPositionSizer 3. NT8.Core.Common.Models.StrategyContext 4. Microsoft.Extensions.Logging.ILogger ## Extension Points The interface is designed to be extensible: - New algorithmic strategies can be added - Additional execution venues can be integrated - Custom routing logic can be implemented - New order types can be supported