Deserialized variant for bundle backtest

This commit is contained in:
2025-10-23 12:31:30 +07:00
parent a1fe7ed3b3
commit 6bfefc91c8
5 changed files with 231 additions and 88 deletions

View File

@@ -1,5 +1,6 @@
using System.Text.Json;
using Managing.Api.Models.Requests;
using Managing.Api.Models.Responses;
using Managing.Application.Abstractions.Services;
using Managing.Application.Abstractions.Shared;
using Managing.Application.Hubs;
@@ -677,75 +678,6 @@ public class BacktestController : BaseController
}
}
/// <summary>
/// Generates individual backtest requests from variant configuration
/// </summary>
/// <param name="request">The bundle backtest request</param>
/// <param name="accountName">The account name to use for all backtests</param>
/// <returns>List of individual backtest requests</returns>
private List<RunBacktestRequest> GenerateBacktestRequests(RunBundleBacktestRequest request, string accountName)
{
var backtestRequests = new List<RunBacktestRequest>();
foreach (var dateRange in request.DateTimeRanges)
{
foreach (var mmVariant in request.MoneyManagementVariants)
{
foreach (var ticker in request.TickerVariants)
{
var config = new TradingBotConfigRequest
{
AccountName = accountName,
Ticker = ticker,
Timeframe = request.UniversalConfig.Timeframe,
IsForWatchingOnly = request.UniversalConfig.IsForWatchingOnly,
BotTradingBalance = request.UniversalConfig.BotTradingBalance,
Name =
$"{request.UniversalConfig.BotName}_{ticker}_{dateRange.StartDate:yyyyMMdd}_{dateRange.EndDate:yyyyMMdd}",
FlipPosition = request.UniversalConfig.FlipPosition,
CooldownPeriod = request.UniversalConfig.CooldownPeriod,
MaxLossStreak = request.UniversalConfig.MaxLossStreak,
Scenario = request.UniversalConfig.Scenario,
ScenarioName = request.UniversalConfig.ScenarioName,
MoneyManagement = mmVariant.MoneyManagement,
MaxPositionTimeHours = request.UniversalConfig.MaxPositionTimeHours,
CloseEarlyWhenProfitable = request.UniversalConfig.CloseEarlyWhenProfitable,
FlipOnlyWhenInProfit = request.UniversalConfig.FlipOnlyWhenInProfit,
UseSynthApi = request.UniversalConfig.UseSynthApi,
UseForPositionSizing = request.UniversalConfig.UseForPositionSizing,
UseForSignalFiltering = request.UniversalConfig.UseForSignalFiltering,
UseForDynamicStopLoss = request.UniversalConfig.UseForDynamicStopLoss
};
var backtestRequest = new RunBacktestRequest
{
Config = config,
StartDate = dateRange.StartDate,
EndDate = dateRange.EndDate,
Balance = request.UniversalConfig.BotTradingBalance,
WatchOnly = request.UniversalConfig.WatchOnly,
Save = request.UniversalConfig.Save,
WithCandles = request.UniversalConfig.WithCandles,
MoneyManagement = mmVariant.MoneyManagement != null
? new MoneyManagement
{
Name = mmVariant.MoneyManagement.Name,
Timeframe = mmVariant.MoneyManagement.Timeframe,
StopLoss = mmVariant.MoneyManagement.StopLoss,
TakeProfit = mmVariant.MoneyManagement.TakeProfit,
Leverage = mmVariant.MoneyManagement.Leverage
}
: null
};
backtestRequests.Add(backtestRequest);
}
}
}
return backtestRequests;
}
/// <summary>
/// Retrieves all bundle backtest requests for the authenticated user.
/// </summary>
@@ -781,7 +713,8 @@ public class BacktestController : BaseController
return NotFound($"Bundle backtest request with ID {id} not found or doesn't belong to the current user.");
}
return Ok(bundleRequest);
var viewModel = BundleBacktestRequestViewModel.FromDomain(bundleRequest);
return Ok(viewModel);
}
/// <summary>