# 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