diff --git a/src/Managing.Api/Controllers/BacktestController.cs b/src/Managing.Api/Controllers/BacktestController.cs index 4f76b07..e75d508 100644 --- a/src/Managing.Api/Controllers/BacktestController.cs +++ b/src/Managing.Api/Controllers/BacktestController.cs @@ -63,7 +63,7 @@ public class BacktestController : BaseController public async Task>> Backtests() { var user = await GetUser(); - return Ok(await _backtester.GetBacktestsByUser(user)); + return Ok(_backtester.GetBacktestsByUser(user)); } /// diff --git a/src/Managing.Application.Abstractions/Services/IBacktester.cs b/src/Managing.Application.Abstractions/Services/IBacktester.cs index ea47f85..2bd197c 100644 --- a/src/Managing.Application.Abstractions/Services/IBacktester.cs +++ b/src/Managing.Application.Abstractions/Services/IBacktester.cs @@ -44,7 +44,7 @@ namespace Managing.Application.Abstractions.Services // Additional methods for backtest management bool DeleteBacktest(string id); bool DeleteBacktests(); - Task> GetBacktestsByUser(User user); + IEnumerable GetBacktestsByUser(User user); Backtest GetBacktestByIdForUser(User user, string id); bool DeleteBacktestByUser(User user, string id); bool DeleteBacktestsByUser(User user); diff --git a/src/Managing.Application/Backtesting/Backtester.cs b/src/Managing.Application/Backtesting/Backtester.cs index 86a7c16..5458c07 100644 --- a/src/Managing.Application/Backtesting/Backtester.cs +++ b/src/Managing.Application/Backtesting/Backtester.cs @@ -284,14 +284,14 @@ namespace Managing.Application.Backtesting var score = backtest.Score; var tradeCount = backtest.Positions?.Count ?? 0; var winRate = backtest.WinRate; - + // Calculate risk-reward ratio from money management settings var riskRewardRatio = 0.0; if (backtest.Config.MoneyManagement != null) { var stopLoss = (double)backtest.Config.MoneyManagement.StopLoss; var takeProfit = (double)backtest.Config.MoneyManagement.TakeProfit; - + if (stopLoss > 0 && takeProfit > 0) { riskRewardRatio = takeProfit / stopLoss; @@ -388,35 +388,9 @@ namespace Managing.Application.Backtesting } } - public async Task> GetBacktestsByUser(User user) + public IEnumerable GetBacktestsByUser(User user) { var backtests = _backtestRepository.GetBacktestsByUser(user).ToList(); - - foreach (var backtest in backtests) - { - if (backtest.Candles == null || backtest.Candles.Count == 0 || backtest.Candles.Count < 10) - { - try - { - var candles = await _exchangeService.GetCandlesInflux( - user.Accounts.First().Exchange, - backtest.Config.Ticker, - backtest.StartDate, - backtest.Config.Timeframe, - backtest.EndDate); - - if (candles != null && candles.Count > 0) - { - backtest.Candles = candles; - } - } - catch (Exception ex) - { - _logger.LogError(ex, "Failed to retrieve candles for backtest {Id}", backtest.Id); - } - } - } - return backtests; } diff --git a/src/Managing.Domain/Backtests/Backtest.cs b/src/Managing.Domain/Backtests/Backtest.cs index dcd7984..80bac87 100644 --- a/src/Managing.Domain/Backtests/Backtest.cs +++ b/src/Managing.Domain/Backtests/Backtest.cs @@ -17,12 +17,12 @@ public class Backtest TradingBotConfig config, List positions, List signals, - List candles) + List candles = null) { Config = config; Positions = positions; Signals = signals; - Candles = candles; + Candles = candles != null ? candles : new List(); WalletBalances = new List>(); IndicatorsValues = new Dictionary(); diff --git a/src/Managing.Infrastructure.Database/MongoDb/Collections/BacktestDto.cs b/src/Managing.Infrastructure.Database/MongoDb/Collections/BacktestDto.cs index dd99108..50be1ec 100644 --- a/src/Managing.Infrastructure.Database/MongoDb/Collections/BacktestDto.cs +++ b/src/Managing.Infrastructure.Database/MongoDb/Collections/BacktestDto.cs @@ -14,7 +14,6 @@ namespace Managing.Infrastructure.Databases.MongoDb.Collections public TradingBotConfigDto Config { get; set; } public List Positions { get; set; } public List Signals { get; set; } - public List Candles { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public MoneyManagementDto MoneyManagement { get; internal set; } diff --git a/src/Managing.Infrastructure.Database/MongoDb/MongoMappers.cs b/src/Managing.Infrastructure.Database/MongoDb/MongoMappers.cs index 1aa1296..0b6bde9 100644 --- a/src/Managing.Infrastructure.Database/MongoDb/MongoMappers.cs +++ b/src/Managing.Infrastructure.Database/MongoDb/MongoMappers.cs @@ -137,8 +137,7 @@ public static class MongoMappers var bTest = new Backtest( config, b.Positions?.Select(p => Map(p)).ToList() ?? new List(), - b.Signals?.Select(s => Map(s)).ToList() ?? new List(), - b.Candles?.Select(c => Map(c)).ToList() ?? new List()) + b.Signals?.Select(s => Map(s)).ToList() ?? new List()) { FinalPnl = b.FinalPnl, WinRate = b.WinRate, @@ -171,7 +170,6 @@ public static class MongoMappers Config = Map(result.Config), Positions = Map(result.Positions), Signals = result.Signals.Select(s => Map(s)).ToList(), - Candles = result.Candles.Select(c => Map(c)).ToList(), MoneyManagement = Map(result.Config.MoneyManagement), OptimizedMoneyManagement = Map(result.OptimizedMoneyManagement), User = Map(result.User), diff --git a/src/Managing.WebApp/src/components/mollecules/Table/Table.tsx b/src/Managing.WebApp/src/components/mollecules/Table/Table.tsx index c9cf88a..2c76f44 100644 --- a/src/Managing.WebApp/src/components/mollecules/Table/Table.tsx +++ b/src/Managing.WebApp/src/components/mollecules/Table/Table.tsx @@ -2,7 +2,7 @@ import {ArrowDownIcon, ArrowUpIcon} from '@heroicons/react/solid' import React from 'react' import {useExpanded, useFilters, usePagination, useSortBy, useTable,} from 'react-table' -import type {TableInstanceWithHooks} from '../../../global/type' +import type {TableInstanceWithHooks} from '../../../global/type.tsx' // Define a default UI for filtering function DefaultColumnFilter({