# **Core Interfaces Package** ## **IMPLEMENTATION CHECKLIST** Create these files exactly as specified: ### **File 1: `src/NT8.Core/Common/Interfaces/IStrategy.cs`** ```csharp using NT8.Core.Common.Models; namespace NT8.Core.Common.Interfaces; /// /// Core strategy interface - strategies implement signal generation only /// The SDK handles all risk management, position sizing, and order execution /// public interface IStrategy { /// /// Strategy metadata and configuration /// StrategyMetadata Metadata { get; } /// /// Initialize strategy with configuration and dependencies /// void Initialize(StrategyConfig config, IMarketDataProvider dataProvider, ILogger logger); /// /// Process new bar data and generate trading intent (if any) /// This is the main entry point for strategy logic /// StrategyIntent? OnBar(BarData bar, StrategyContext context); /// /// Process tick data for high-frequency strategies (optional) /// Most strategies can leave this as default implementation /// StrategyIntent? OnTick(TickData tick, StrategyContext context) => null; /// /// Get current strategy parameters for serialization /// Dictionary GetParameters(); /// /// Update strategy parameters from configuration /// void SetParameters(Dictionary parameters); } ``` ### **File 2: `src/NT8.Core/Common/Models/StrategyMetadata.cs`** ```csharp namespace NT8.Core.Common.Models; /// /// Strategy metadata - describes strategy capabilities and requirements /// public record StrategyMetadata( string Name, string Description, string Version, string Author, string[] Symbols, int RequiredBars ); /// /// Strategy configuration passed during initialization /// public record StrategyConfig( string Name, string Symbol, Dictionary Parameters, RiskConfig RiskSettings, SizingConfig SizingSettings ); ``` ### **File 3: `src/NT8.Core/Common/Models/StrategyIntent.cs`** ```csharp namespace NT8.Core.Common.Models; /// /// Strategy trading intent - what the strategy wants to do /// This is the output of strategy logic, input to risk management /// public record StrategyIntent( string Symbol, OrderSide Side, OrderType EntryType, double? LimitPrice, int StopTicks, int? TargetTicks, double Confidence, // 0.0 to 1.0 - strategy confidence level string Reason, // Human-readable reason for trade Dictionary Metadata // Additional strategy-specific data ) { /// /// Unique identifier for this intent /// public string IntentId { get; init; } = Guid.NewGuid().ToString(); /// /// Timestamp when intent was generated /// public DateTime Timestamp { get; init; } = DateTime.UtcNow; /// /// Validate intent has required fields /// public bool IsValid() => !string.IsNullOrEmpty(Symbol) && StopTicks > 0 && Confidence is >= 0.0 and <= 1.0 && Side != OrderSide.Flat && !string.IsNullOrEmpty(Reason); } /// /// Order side enumeration /// public enum OrderSide { Buy = 1, Sell = -1, Flat = 0 // Close position } /// /// Order type enumeration /// public enum OrderType { Market, Limit, StopMarket, StopLimit } ``` ### **File 4: `src/NT8.Core/Common/Models/StrategyContext.cs`** ```csharp namespace NT8.Core.Common.Models; /// /// Context information available to strategies /// public record StrategyContext( string Symbol, DateTime CurrentTime, Position CurrentPosition, AccountInfo Account, MarketSession Session, Dictionary CustomData ); /// /// Current position information /// public record Position( string Symbol, int Quantity, double AveragePrice, double UnrealizedPnL, double RealizedPnL, DateTime LastUpdate ); /// /// Account information /// public record AccountInfo( double Equity, double BuyingPower, double DailyPnL, double MaxDrawdown, DateTime LastUpdate ); /// /// Market session information /// public record MarketSession( DateTime SessionStart, DateTime SessionEnd, bool IsRth, // Regular Trading Hours string SessionName ); ``` ### **File 5: `src/NT8.Core/Common/Models/MarketData.cs`** ```csharp namespace NT8.Core.Common.Models; /// /// Bar data model /// public record BarData( string Symbol, DateTime Time, double Open, double High, double Low, double Close, long Volume, TimeSpan BarSize ); /// /// Tick data model /// public record TickData( string Symbol, DateTime Time, double Price, int Size, TickType Type ); /// /// Order fill model /// public record OrderFill( string OrderId, string Symbol, int Quantity, double FillPrice, DateTime FillTime, double Commission, string ExecutionId ); public enum TickType { Trade, Bid, Ask, Last } /// /// Market data provider interface /// public interface IMarketDataProvider { /// /// Subscribe to bar data /// void SubscribeBars(string symbol, TimeSpan barSize, Action onBar); /// /// Subscribe to tick data /// void SubscribeTicks(string symbol, Action onTick); /// /// Get historical bars /// Task> GetHistoricalBars(string symbol, TimeSpan barSize, int count); /// /// Get current market price /// double? GetCurrentPrice(string symbol); } ``` ### **File 6: `src/NT8.Core/Risk/IRiskManager.cs`** ```csharp using NT8.Core.Common.Models; namespace NT8.Core.Risk; /// /// Risk management interface - validates and potentially modifies trading intents /// This is the gatekeeper between strategy signals and order execution /// public interface IRiskManager { /// /// Validate order intent against risk parameters /// Returns decision with allow/reject and any modifications /// RiskDecision ValidateOrder(StrategyIntent intent, StrategyContext context, RiskConfig config); /// /// Update risk state after order fill /// void OnFill(OrderFill fill); /// /// Update risk state with current P&L /// void OnPnLUpdate(double netPnL, double dayPnL); /// /// Emergency flatten all positions /// Task EmergencyFlatten(string reason); /// /// Get current risk status for monitoring /// RiskStatus GetRiskStatus(); } /// /// Risk validation result /// public record RiskDecision( bool Allow, string? RejectReason, StrategyIntent? ModifiedIntent, // If risk manager modifies size/price RiskLevel RiskLevel, Dictionary RiskMetrics ); /// /// Current risk system status /// public record RiskStatus( bool TradingEnabled, double DailyPnL, double DailyLossLimit, double MaxDrawdown, int OpenPositions, DateTime LastUpdate, List ActiveAlerts ); /// /// Risk level classification /// public enum RiskLevel { Low, // Normal trading Medium, // Elevated caution High, // Limited trading Critical // Trading halted } /// /// Risk configuration parameters /// public record RiskConfig( double DailyLossLimit, double MaxTradeRisk, int MaxOpenPositions, bool EmergencyFlattenEnabled ); ``` ### **File 7: `src/NT8.Core/Sizing/IPositionSizer.cs`** ```csharp using NT8.Core.Common.Models; namespace NT8.Core.Sizing; /// /// Position sizing interface - determines contract quantity /// public interface IPositionSizer { /// /// Calculate position size for trading intent /// SizingResult CalculateSize(StrategyIntent intent, StrategyContext context, SizingConfig config);