432 lines
11 KiB
Markdown
432 lines
11 KiB
Markdown
# **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`**
|
|
```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`**
|
|
```xml
|
|
<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`**
|
|
```ini
|
|
# 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`**
|
|
```yaml
|
|
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`**
|
|
```markdown
|
|
# 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**
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
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** |