Files
nt8-sdk/Specs/SDK/repository_setup_package.md
Billy Valentine 92f3732b3d
Some checks failed
Build and Test / build (push) Has been cancelled
Phase 0 completion: NT8 SDK core framework with risk management and position sizing
2025-09-09 17:06:37 -04:00

11 KiB

Repository Setup Package

SETUP INSTRUCTIONS

Step 1: Create Repository Structure

Create this exact directory structure in your repository:

nt8-institutional-sdk/
├── .gitea/
│   └── workflows/
│       ├── build.yml
│       ├── test.yml
│       └── release.yml
├── .devcontainer/
│   ├── devcontainer.json
│   └── Dockerfile
├── src/
│   ├── NT8.Core/
│   │   ├── Common/
│   │   │   ├── Configuration/
│   │   │   ├── Interfaces/
│   │   │   └── Models/
│   │   ├── Risk/
│   │   ├── Sizing/
│   │   ├── Logging/
│   │   └── OMS/
│   ├── NT8.Adapters/
│   │   └── NinjaTrader/
│   ├── NT8.Strategies/
│   │   └── Examples/
│   └── NT8.Contracts/
│       └── V1/
├── tests/
│   ├── NT8.Core.Tests/
│   ├── NT8.Integration.Tests/
│   └── NT8.Performance.Tests/
├── tools/
│   ├── replay/
│   └── market-data/
├── docs/
│   ├── architecture/
│   ├── api/
│   └── deployment/
├── deployment/
│   ├── dev/
│   ├── staging/
│   └── prod/
├── .gitignore
├── .editorconfig
├── Directory.Build.props
├── NT8-SDK.sln
└── README.md

Step 2: Copy Starter Files

Copy these files to the exact locations shown:

.gitignore

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Oo]ut/
[Ll]og/
[Ll]ogs/

# Visual Studio / VSCode
.vs/
.vscode/settings.json
.vscode/tasks.json
.vscode/launch.json
.vscode/extensions.json
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# Test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
*.VisualState.xml
TestResult.xml
nunit-*.xml
*.trx
*.coverage
*.coveragexml
coverage*.json
coverage*.xml
coverage*.info

# NuGet
*.nupkg
*.snupkg
.nuget/
packages/
!packages/build/
*.nuget.props
*.nuget.targets

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# Development containers
.devcontainer/.env

# Local configuration files
appsettings.local.json
appsettings.*.local.json
config/local.json

# Temporary files
*.tmp
*.temp
.tmp/
.temp/

# IDE specific
*.swp
*.swo
*~

# OS specific
.DS_Store
Thumbs.db

# NinjaTrader specific
*.ninjatrader
*.nt8addon

# Custom tools and scripts output
tools/output/
market-data/*.csv
replay-data/

Directory.Build.props

<Project>
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <LangVersion>10.0</LangVersion>
    <Nullable>enable</Nullable>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <Company>NT8 Institutional</Company>
    <Product>NT8 SDK</Product>
    <Copyright>Copyright © 2025</Copyright>
    <Version>0.1.0</Version>
    <AssemblyVersion>0.1.0.0</AssemblyVersion>
    <FileVersion>0.1.0.0</FileVersion>
    
    <!-- Code Analysis -->
    <EnableNETAnalyzers>true</EnableNETAnalyzers>
    <AnalysisLevel>6.0</AnalysisLevel>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>portable</DebugType>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
  </PropertyGroup>
  
  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>

.editorconfig

# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

[*]
indent_style = space
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.{cs,csx,vb,vbx}]
indent_size = 4
end_of_line = crlf

[*.{json,js,yml,yaml,xml}]
indent_size = 2

[*.md]
trim_trailing_whitespace = false

# C# formatting rules
[*.cs]
# Organize usings
dotnet_sort_system_directives_first = true
dotnet_separate_import_directive_groups = false

# this. preferences
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_event = false:suggestion

# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion

# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
dotnet_style_readonly_field = true:suggestion

# Expression-level preferences
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion

# C# preferences
csharp_prefer_var_for_built_in_types = false:suggestion
csharp_prefer_var_when_type_is_apparent = true:suggestion
csharp_prefer_var_elsewhere = false:suggestion

.gitea/workflows/build.yml

name: Build and Test

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Setup .NET
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: '6.0.x'
        
    - name: Restore dependencies
      run: dotnet restore
      
    - name: Build
      run: dotnet build --no-restore --configuration Release
      
    - name: Test
      run: dotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage"
      
    - name: Upload coverage reports
      uses: codecov/codecov-action@v3
      with:
        files: ./coverage.cobertura.xml

README.md

# NT8 Institutional SDK

Professional-grade algorithmic trading SDK for NinjaTrader 8, built for institutional use with comprehensive risk management and deterministic execution.

## 🚀 Quick Start

### Prerequisites
- .NET 6.0 SDK
- Visual Studio Code + Docker Desktop (recommended)
- Git

### Setup (5 minutes)
```bash
# Clone repository
git clone <repository-url>
cd nt8-institutional-sdk

# Verify setup
dotnet build && dotnet test

📋 Project Structure

src/
├── NT8.Core/           # Core SDK functionality
│   ├── Risk/           # Risk management system
│   ├── Sizing/         # Position sizing algorithms  
│   ├── Logging/        # Structured logging
│   └── Common/         # Shared interfaces and models
├── NT8.Strategies/     # Strategy implementations
├── NT8.Adapters/       # NinjaTrader integration
└── NT8.Contracts/      # API contracts

tests/                  # Comprehensive test suite
tools/                  # Development and deployment tools
docs/                   # Technical documentation

🏗️ Architecture Principles

  • Risk First: All trades pass through risk management before execution
  • Deterministic: Identical inputs produce identical outputs for testing
  • Modular: Strategies are thin plugins, SDK handles infrastructure
  • Observable: Structured logging with correlation IDs throughout

📊 Current Status: Phase 0 Development

Completed

  • Development environment and tooling
  • Core interfaces and models
  • Basic project structure

🚧 In Progress

  • Risk management implementation
  • Position sizing algorithms
  • Basic strategy framework
  • Comprehensive unit testing

📅 Next (Phase 1)

  • Order management system
  • NinjaTrader integration
  • Market data handling
  • Advanced testing and validation

📄 License

Proprietary - Internal use only


### **Step 3: Create Solution and Projects**

Run these commands to create the .NET solution and projects:

```bash
# Create solution file
dotnet new sln -n NT8-SDK

# Create core projects
dotnet new classlib -n NT8.Core -o src/NT8.Core --framework net6.0
dotnet new classlib -n NT8.Adapters -o src/NT8.Adapters --framework net6.0
dotnet new classlib -n NT8.Strategies -o src/NT8.Strategies --framework net6.0
dotnet new classlib -n NT8.Contracts -o src/NT8.Contracts --framework net6.0

# Create test projects
dotnet new xunit -n NT8.Core.Tests -o tests/NT8.Core.Tests --framework net6.0
dotnet new xunit -n NT8.Integration.Tests -o tests/NT8.Integration.Tests --framework net6.0

# Add projects to solution
dotnet sln add src/NT8.Core/NT8.Core.csproj
dotnet sln add src/NT8.Adapters/NT8.Adapters.csproj
dotnet sln add src/NT8.Strategies/NT8.Strategies.csproj
dotnet sln add src/NT8.Contracts/NT8.Contracts.csproj
dotnet sln add tests/NT8.Core.Tests/NT8.Core.Tests.csproj
dotnet sln add tests/NT8.Integration.Tests/NT8.Integration.Tests.csproj

Step 4: Add Required NuGet Packages

# Add packages to NT8.Core
dotnet add src/NT8.Core/NT8.Core.csproj package Microsoft.Extensions.Configuration
dotnet add src/NT8.Core/NT8.Core.csproj package Microsoft.Extensions.Configuration.Json
dotnet add src/NT8.Core/NT8.Core.csproj package Microsoft.Extensions.Logging
dotnet add src/NT8.Core/NT8.Core.csproj package Microsoft.Extensions.DependencyInjection
dotnet add src/NT8.Core/NT8.Core.csproj package Newtonsoft.Json
dotnet add src/NT8.Core/NT8.Core.csproj package FluentValidation

# Add test packages
dotnet add tests/NT8.Core.Tests/NT8.Core.Tests.csproj package FluentAssertions
dotnet add tests/NT8.Core.Tests/NT8.Core.Tests.csproj package Bogus
dotnet add tests/NT8.Core.Tests/NT8.Core.Tests.csproj package Moq

dotnet add tests/NT8.Integration.Tests/NT8.Integration.Tests.csproj package FluentAssertions
dotnet add tests/NT8.Integration.Tests/NT8.Integration.Tests.csproj package Bogus
dotnet add tests/NT8.Integration.Tests/NT8.Integration.Tests.csproj package Moq

Step 5: Validation

Run this command to verify everything is set up correctly:

dotnet build --configuration Release

Expected Result: Build succeeds with 0 warnings and 0 errors

If you see any errors, check:

  1. All directories were created correctly
  2. All files were copied to the right locations
  3. .NET 6.0 SDK is installed
  4. All NuGet packages were added successfully

SUCCESS CRITERIA

Repository structure matches specification exactly
All starter files are in correct locations
Solution builds successfully with 0 warnings
All NuGet packages are properly referenced
CI/CD pipeline configuration is in place

Once this is complete, you're ready for Step 2: Core Interfaces