# NT8 Integration Guidelines for AI Agents ## CRITICAL: NinjaTrader 8 Specific Requirements ### NT8 Environment Constraints - **File Location**: All custom strategies MUST go in `C:\Users\billy\Documents\NinjaTrader 8\bin\Custom\Strategies\` - **Namespace**: MUST use `namespace NinjaTrader.NinjaScript.Strategies` - **Base Class**: Custom strategies MUST inherit from `Strategy` (NinjaTrader's base class) - **Compilation**: Code MUST compile within NT8's NinjaScript Editor ### NT8 Strategy Pattern (REQUIRED) ```csharp using System; using NinjaTrader.Cbi; using NinjaTrader.NinjaScript.Strategies; using NT8.Core.Common.Interfaces; using NT8.Core.Common.Models; namespace NinjaTrader.NinjaScript.Strategies { public class YourStrategyName : Strategy { // 1. NT8 Properties (show in UI) [NinjaScriptProperty] [Display(Name = "Parameter Name", Order = 1)] public int ParameterName { get; set; } = 8; // 2. SDK Components private IStrategy _sdkStrategy; private IRiskManager _riskManager; // 3. NT8 Lifecycle Methods protected override void OnStateChange() { if (State == State.SetDefaults) { // Initialize NT8 strategy settings // Initialize SDK components } } protected override void OnBarUpdate() { // Convert NT8 data → SDK format // Call SDK strategy logic // Convert SDK results → NT8 actions } } } ``` ### Forbidden NT8 Patterns - ❌ DO NOT try to replace NT8's Strategy base class - ❌ DO NOT use different namespaces - ❌ DO NOT bypass NT8's parameter system - ❌ DO NOT access NT8 internals directly ### Required Integration Points #### 1. Data Conversion (NT8 ↔ SDK) ```csharp // Convert NT8 bar to SDK format private BarData ConvertToSdkBar() { return new BarData( symbol: Instrument.MasterInstrument.Name, time: Time[0], open: Open[0], high: High[0], low: Low[0], close: Close[0], volume: Volume[0], barSize: BarsPeriod.Value ); } ``` #### 2. Parameter Mapping (UI → SDK Config) ```csharp private StrategyConfig CreateSdkConfig() { var parameters = new Dictionary(); parameters.Add("StopTicks", StopTicks); parameters.Add("TargetTicks", TargetTicks); return new StrategyConfig(/*...*/); } ``` #### 3. Order Execution (SDK → NT8) ```csharp private void ExecuteInNT8(StrategyIntent intent, SizingResult sizing) { if (intent.Side == OrderSide.Buy) { EnterLong(sizing.Contracts, "SDK_Entry"); SetStopLoss("SDK_Entry", CalculationMode.Ticks, intent.StopTicks); } } ``` ## Implementation Steps for AI Agents ### Step 1: Create NT8 Strategy Wrapper 1. **File**: Create in `NT8Wrappers/` folder in repo 2. **Name**: Use pattern `[StrategyName]NT8Wrapper.cs` 3. **Inherit**: From NinjaTrader's `Strategy` class 4. **Include**: All required NT8 properties and lifecycle methods ### Step 2: Implement Data Conversion Layer 1. **Create**: `NT8DataConverter.cs` utility class 2. **Methods**: Convert between NT8 and SDK data formats 3. **Handle**: Bar data, account info, position data ### Step 3: Create Configuration Bridge 1. **Map**: NT8 parameters to SDK configuration objects 2. **Validate**: All parameters before passing to SDK 3. **Provide**: Sensible defaults for all parameters ### Step 4: Test Integration 1. **Compile**: In NT8 NinjaScript Editor 2. **Test**: On simulation account first 3. **Verify**: All SDK functionality works through NT8 ## File Structure for NT8 Integration ``` nt8-sdk/ ├── src/NT8.Adapters/ │ ├── NinjaTrader/ │ │ ├── NT8DataAdapter.cs │ │ ├── NT8OrderAdapter.cs │ │ └── NT8LoggingAdapter.cs │ └── Wrappers/ │ ├── SimpleORBNT8Wrapper.cs │ └── BaseNT8StrategyWrapper.cs └── deployment/ ├── NT8/ │ ├── Strategies/ # Copy these to NT8 │ └── DLLs/ # Copy SDK DLLs here └── install-instructions.md ``` ## Testing Requirements ### Unit Tests (In Repository) - Test data conversion methods - Test configuration mapping - Test SDK component initialization ### Integration Tests (In NT8) - Compile strategy in NT8 - Run on simulation account - Verify parameter UI works - Test risk controls trigger - Validate position sizing ## Common Pitfalls to Avoid 1. **Wrong Namespace**: Must use `NinjaTrader.NinjaScript.Strategies` 2. **Missing Attributes**: Need `[NinjaScriptProperty]` for UI parameters 3. **Wrong Base Class**: Must inherit from NT8's `Strategy` 4. **File Location**: Must place files in correct NT8 directories 5. **DLL References**: Must copy SDK DLLs to NT8 bin folder ## Success Criteria ### Compilation - [ ] Strategy compiles in NT8 NinjaScript Editor - [ ] No errors or warnings - [ ] All SDK DLLs properly referenced ### UI Integration - [ ] Parameters show up in NT8 strategy properties - [ ] All parameters have proper labels and validation - [ ] Default values are sensible ### Functionality - [ ] Strategy executes trades through SDK framework - [ ] Risk management controls work - [ ] Position sizing calculates correctly - [ ] Logging integrates with NT8 ### Testing - [ ] Works on simulation account - [ ] All test scenarios pass - [ ] Performance is acceptable