* Start building with orlean * Add missing file * Serialize grain state * Remove grain and proxies * update and add plan * Update a bit * Fix backtest grain * Fix backtest grain * Clean a bit
189 lines
10 KiB
Markdown
189 lines
10 KiB
Markdown
Todo List
|
|
Phase 1: Keep TradingBotBase Unchanged (Composition Approach) ✅ COMPLETE
|
|
[✅] File: src/Managing.Application/Bots/TradingBotBase.cs
|
|
[✅] Keep class as concrete (not abstract)
|
|
[✅] No Orleans-specific methods needed
|
|
[✅] Preserve all existing functionality
|
|
[✅] Ensure it remains reusable for direct instantiation and Orleans composition
|
|
|
|
Phase 2: Create Orleans Wrapper Grains (Composition)
|
|
[✅] File: src/Managing.Application/Bots/Grains/LiveTradingBotGrain.cs
|
|
[✅] Inherit from Grain<TradingBotGrainState> and implement ITradingBotGrain
|
|
[✅] Use composition: private TradingBotBase _tradingBot
|
|
[✅] Implement Orleans lifecycle methods (OnActivateAsync, OnDeactivateAsync)
|
|
[✅] Delegate trading operations to _tradingBot instance
|
|
[✅] Handle Orleans timer management for bot execution
|
|
[✅] Implement state persistence between grain state and TradingBotBase
|
|
[✅] Add configuration validation for live trading
|
|
[✅] Implement all ITradingBotGrain methods as wrappers
|
|
|
|
[✅] File: src/Managing.Application/Bots/Grains/BacktestTradingBotGrain.cs
|
|
[✅] Inherit from Grain<TradingBotGrainState> and implement IBacktestTradingBotGrain
|
|
[✅] Use composition: private TradingBotBase _tradingBot
|
|
[✅] Implement Orleans lifecycle methods for backtest execution
|
|
[✅] Delegate trading operations to _tradingBot instance
|
|
[✅] Handle backtest-specific candle processing (no timer)
|
|
[✅] Implement state persistence for backtest scenarios
|
|
[✅] Add configuration validation for backtesting
|
|
[✅] Implement all ITradingBotGrain methods as wrappers
|
|
[✅] Add backtest-specific methods: RunBacktestAsync, GetBacktestProgressAsync (following GetBacktestingResult pattern)
|
|
[✅] Stateless design - no state persistence, fresh TradingBotBase instance per backtest
|
|
[✅] Simplified interface - Start/Stop are no-ops, other methods throw exceptions for backtest mode
|
|
[✅] StatelessWorker attribute - grain doesn't inherit from Grain<T> but implements interface
|
|
[✅] Config passed as parameter - no state dependency, config passed to RunBacktestAsync method
|
|
[✅] **NEW: Orleans Serialization Support**
|
|
[✅] Return LightBacktest instead of Backtest for safe Orleans serialization
|
|
[✅] Add ConvertToLightBacktest method to map Backtest to LightBacktest
|
|
[✅] Handle type conversions (decimal? to double? for SharpeRatio, etc.)
|
|
[✅] Ensure all properties are Orleans-serializable
|
|
|
|
[✅] File: src/Managing.Domain/Backtests/LightBacktest.cs
|
|
[✅] **NEW: Add Orleans Serialization Attributes**
|
|
[✅] Add [GenerateSerializer] attribute for Orleans serialization
|
|
[✅] Add [Id(n)] attributes to all properties for proper serialization
|
|
[✅] Add using Orleans; statement
|
|
[✅] Ensure all property types are Orleans-serializable
|
|
[✅] Match property types with LightBacktestResponse for consistency
|
|
|
|
[✅] File: src/Managing.Application.Abstractions/Grains/IBacktestTradingBotGrain.cs
|
|
[✅] **NEW: Update Interface for LightBacktest**
|
|
[✅] Change RunBacktestAsync return type from Backtest to LightBacktest
|
|
[✅] Update method documentation to reflect LightBacktest usage
|
|
[✅] Ensure interface is Orleans-compatible
|
|
|
|
[✅] File: src/Managing.Application/Backtesting/Backtester.cs
|
|
[✅] Inject IGrainFactory dependency
|
|
[✅] Update RunBacktestWithCandles to use Orleans grain instead of direct bot creation
|
|
[✅] Remove GetBacktestingResult method (logic moved to grain)
|
|
[✅] Remove helper methods (AggregateValues, GetIndicatorsValues) - moved to grain
|
|
[✅] Simplified backtesting flow - Backtester orchestrates, grain executes
|
|
[✅] Fixed Orleans serialization issue - CreateCleanConfigForOrleans method removes FixedSizeQueue objects
|
|
[✅] Created LightIndicator and LightScenario classes for Orleans serialization
|
|
[✅] Updated TradingBotConfig to use LightScenario instead of Scenario
|
|
[✅] Simplified serialization - no more FixedSizeQueue or User properties in Orleans data
|
|
[✅] Updated all application code to use LightScenario conversions
|
|
[✅] Main application builds successfully with Orleans integration
|
|
[✅] **NEW: Update for LightBacktest Integration**
|
|
[✅] Update interface to return LightBacktest instead of Backtest
|
|
[✅] Update RunTradingBotBacktest methods to return LightBacktest
|
|
[✅] Remove conversion methods (no longer needed)
|
|
[✅] Simplify Orleans grain calls to return LightBacktest directly
|
|
[✅] Update all dependent services to work with LightBacktest
|
|
|
|
[✅] File: src/Managing.Application.Abstractions/Services/IBacktester.cs
|
|
[✅] **NEW: Update Interface for LightBacktest**
|
|
[✅] Change main backtest methods to return LightBacktest
|
|
[✅] Keep full Backtest methods for database retrieval
|
|
[✅] Update method documentation for LightBacktest usage
|
|
[✅] Ensure backward compatibility where needed
|
|
|
|
[✅] File: src/Managing.Api/Controllers/BacktestController.cs
|
|
[✅] **NEW: Update Controller for LightBacktest**
|
|
[✅] Update Run method to return LightBacktest instead of Backtest
|
|
[✅] Update method documentation to explain LightBacktest usage
|
|
[✅] Remove unused notification method (handled in Orleans grain)
|
|
[✅] Update variable declarations and return statements
|
|
[✅] Ensure API responses are consistent with LightBacktest structure
|
|
|
|
[✅] File: src/Managing.Application.Workers/StatisticService.cs
|
|
[✅] **NEW: Update for LightBacktest Compatibility**
|
|
[✅] Update GetSignals method to handle LightBacktest (no signals data)
|
|
[✅] Add warning log when signals data is not available
|
|
[✅] Return empty list for signals (full data available via database lookup)
|
|
|
|
[✅] File: src/Managing.Application/GeneticService.cs
|
|
[✅] **NEW: Update for LightBacktest Compatibility**
|
|
[✅] Update TradingBotFitness.Evaluate to work with LightBacktest
|
|
[✅] Update CalculateFitness method to accept LightBacktest
|
|
[✅] Ensure genetic algorithm works with lightweight backtest data
|
|
|
|
[ ] File: src/Managing.Application/Bots/Grains/TradingBotGrainProxy.cs
|
|
[ ] Fix remaining test compilation errors (6 scenario conversion errors in BotsTests.cs)
|
|
[ ] Create proxy class that implements ITradingBot interface
|
|
[ ] Wrap Orleans grain calls for seamless integration
|
|
[ ] Maintain compatibility with existing ITradingBot consumers
|
|
[ ] Handle async/await conversion between Orleans and synchronous calls
|
|
|
|
Phase 3: Update BotService for Conditional Instantiation
|
|
[ ] File: src/Managing.Application/ManageBot/BotService.cs
|
|
[ ] Remove _botTasks dictionary (replaced by Orleans grain management)
|
|
[ ] Remove BotTaskWrapper class (no longer needed)
|
|
[ ] Inject IGrainFactory for Orleans grain creation
|
|
[ ] Update CreateTradingBot() with conditional logic:
|
|
[ ] If IsForBacktest: return new TradingBotBase() (direct instantiation)
|
|
[ ] If live trading: return new TradingBotGrainProxy(grain) (Orleans wrapper)
|
|
[ ] Update CreateBacktestTradingBot() with same conditional logic
|
|
[ ] Update all bot management methods to work with both direct and grain instances
|
|
[ ] Use Guid for grain identification
|
|
|
|
Phase 4: Update Orleans Interface and State
|
|
[ ] File: src/Managing.Application.Abstractions/Grains/ITradingBotGrain.cs
|
|
[ ] Update to use IGrainWithGuidKey
|
|
[ ] Add InitializeAsync(TradingBotConfig config) method
|
|
[ ] Add RestartAsync() method
|
|
[ ] Add DeleteAsync() method
|
|
[ ] Add GetBotDataAsync() method
|
|
[ ] Ensure all methods are async and Orleans-compatible
|
|
|
|
[ ] File: src/Managing.Application/Bots/TradingBotGrainState.cs
|
|
[ ] Ensure all properties are Orleans-serializable
|
|
[ ] Add methods for state synchronization with TradingBotBase
|
|
[ ] Implement backup/restore functionality
|
|
[ ] Add validation for state consistency
|
|
|
|
Phase 5: Update Dependencies and Configuration
|
|
[ ] File: src/Managing.Bootstrap/ApiBootstrap.cs
|
|
[ ] Register Orleans grains (LiveTradingBotGrain, BacktestTradingBotGrain)
|
|
[ ] Keep existing bot service registrations for backward compatibility
|
|
[ ] Add grain factory registration
|
|
[ ] Configure Orleans clustering and persistence
|
|
|
|
Phase 6: Testing and Validation
|
|
[ ] Test direct TradingBotBase instantiation (backtesting)
|
|
[ ] Test LiveTradingBotGrain functionality (live trading)
|
|
[ ] Test BacktestTradingBotGrain functionality (Orleans backtesting)
|
|
[ ] Test BotService conditional instantiation
|
|
[ ] Test Orleans reminder functionality
|
|
[ ] Test grain lifecycle management
|
|
[ ] Test state persistence and recovery
|
|
[ ] Test TradingBotGrainProxy compatibility
|
|
[✅] **NEW: Test LightBacktest Serialization**
|
|
[✅] Verify Orleans serialization works correctly
|
|
[✅] Test LightBacktest to Backtest conversion (if needed)
|
|
[✅] Verify API responses with LightBacktest data
|
|
[✅] Test genetic algorithm with LightBacktest
|
|
|
|
Benefits of Composition Approach
|
|
✅ TradingBotBase remains concrete and reusable
|
|
✅ No Orleans-specific code in core trading logic
|
|
✅ Backward compatibility maintained
|
|
✅ Clean separation of concerns
|
|
✅ Easier testing and maintenance
|
|
✅ Follows SOLID principles
|
|
✅ Flexible architecture for future changes
|
|
✅ **NEW: Orleans Serialization Benefits**
|
|
✅ LightBacktest provides efficient serialization
|
|
✅ Reduced memory footprint for Orleans communication
|
|
✅ Safe type serialization with GenerateSerializer attributes
|
|
✅ Consistent data structure across Orleans grains and API responses
|
|
|
|
Implementation Order
|
|
Phase 1: Keep TradingBotBase unchanged (preserve existing functionality) ✅ COMPLETE
|
|
Phase 2: Create Orleans wrapper grains (composition approach) ✅ COMPLETE
|
|
Phase 3: Update BotService for conditional instantiation
|
|
Phase 4: Update Orleans interface and state management
|
|
Phase 5: Update dependencies and configuration
|
|
Phase 6: Testing and validation
|
|
|
|
Current Status
|
|
✅ Orleans infrastructure setup
|
|
✅ TradingBotBase contains all core logic (keep as-is)
|
|
✅ LiveTradingBot.cs exists (will be replaced by grain)
|
|
✅ Phase 1 Complete - TradingBotBase ready for composition approach
|
|
✅ Phase 2 Complete - Orleans wrapper grains created and working
|
|
✅ **NEW: LightBacktest Orleans Serialization Complete**
|
|
✅ BacktestTradingBotGrain returns LightBacktest for safe serialization
|
|
✅ All interfaces and services updated to use LightBacktest
|
|
✅ API controllers updated for LightBacktest responses
|
|
✅ Application builds successfully with Orleans integration
|
|
✅ Ready to start Phase 3 (update BotService for conditional instantiation) |