# **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);