Remove candle from getBacktestsForUser

This commit is contained in:
2025-07-09 16:55:47 +07:00
parent b2ccd63201
commit 387948a107
7 changed files with 9 additions and 38 deletions

View File

@@ -63,7 +63,7 @@ public class BacktestController : BaseController
public async Task<ActionResult<IEnumerable<Backtest>>> Backtests() public async Task<ActionResult<IEnumerable<Backtest>>> Backtests()
{ {
var user = await GetUser(); var user = await GetUser();
return Ok(await _backtester.GetBacktestsByUser(user)); return Ok(_backtester.GetBacktestsByUser(user));
} }
/// <summary> /// <summary>

View File

@@ -44,7 +44,7 @@ namespace Managing.Application.Abstractions.Services
// Additional methods for backtest management // Additional methods for backtest management
bool DeleteBacktest(string id); bool DeleteBacktest(string id);
bool DeleteBacktests(); bool DeleteBacktests();
Task<IEnumerable<Backtest>> GetBacktestsByUser(User user); IEnumerable<Backtest> GetBacktestsByUser(User user);
Backtest GetBacktestByIdForUser(User user, string id); Backtest GetBacktestByIdForUser(User user, string id);
bool DeleteBacktestByUser(User user, string id); bool DeleteBacktestByUser(User user, string id);
bool DeleteBacktestsByUser(User user); bool DeleteBacktestsByUser(User user);

View File

@@ -284,14 +284,14 @@ namespace Managing.Application.Backtesting
var score = backtest.Score; var score = backtest.Score;
var tradeCount = backtest.Positions?.Count ?? 0; var tradeCount = backtest.Positions?.Count ?? 0;
var winRate = backtest.WinRate; var winRate = backtest.WinRate;
// Calculate risk-reward ratio from money management settings // Calculate risk-reward ratio from money management settings
var riskRewardRatio = 0.0; var riskRewardRatio = 0.0;
if (backtest.Config.MoneyManagement != null) if (backtest.Config.MoneyManagement != null)
{ {
var stopLoss = (double)backtest.Config.MoneyManagement.StopLoss; var stopLoss = (double)backtest.Config.MoneyManagement.StopLoss;
var takeProfit = (double)backtest.Config.MoneyManagement.TakeProfit; var takeProfit = (double)backtest.Config.MoneyManagement.TakeProfit;
if (stopLoss > 0 && takeProfit > 0) if (stopLoss > 0 && takeProfit > 0)
{ {
riskRewardRatio = takeProfit / stopLoss; riskRewardRatio = takeProfit / stopLoss;
@@ -388,35 +388,9 @@ namespace Managing.Application.Backtesting
} }
} }
public async Task<IEnumerable<Backtest>> GetBacktestsByUser(User user) public IEnumerable<Backtest> GetBacktestsByUser(User user)
{ {
var backtests = _backtestRepository.GetBacktestsByUser(user).ToList(); 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; return backtests;
} }

View File

@@ -17,12 +17,12 @@ public class Backtest
TradingBotConfig config, TradingBotConfig config,
List<Position> positions, List<Position> positions,
List<Signal> signals, List<Signal> signals,
List<Candle> candles) List<Candle> candles = null)
{ {
Config = config; Config = config;
Positions = positions; Positions = positions;
Signals = signals; Signals = signals;
Candles = candles; Candles = candles != null ? candles : new List<Candle>();
WalletBalances = new List<KeyValuePair<DateTime, decimal>>(); WalletBalances = new List<KeyValuePair<DateTime, decimal>>();
IndicatorsValues = new Dictionary<IndicatorType, IndicatorsResultBase>(); IndicatorsValues = new Dictionary<IndicatorType, IndicatorsResultBase>();

View File

@@ -14,7 +14,6 @@ namespace Managing.Infrastructure.Databases.MongoDb.Collections
public TradingBotConfigDto Config { get; set; } public TradingBotConfigDto Config { get; set; }
public List<PositionDto> Positions { get; set; } public List<PositionDto> Positions { get; set; }
public List<SignalDto> Signals { get; set; } public List<SignalDto> Signals { get; set; }
public List<CandleDto> Candles { get; set; }
public DateTime StartDate { get; set; } public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; } public DateTime EndDate { get; set; }
public MoneyManagementDto MoneyManagement { get; internal set; } public MoneyManagementDto MoneyManagement { get; internal set; }

View File

@@ -137,8 +137,7 @@ public static class MongoMappers
var bTest = new Backtest( var bTest = new Backtest(
config, config,
b.Positions?.Select(p => Map(p)).ToList() ?? new List<Position>(), b.Positions?.Select(p => Map(p)).ToList() ?? new List<Position>(),
b.Signals?.Select(s => Map(s)).ToList() ?? new List<Signal>(), b.Signals?.Select(s => Map(s)).ToList() ?? new List<Signal>())
b.Candles?.Select(c => Map(c)).ToList() ?? new List<Candle>())
{ {
FinalPnl = b.FinalPnl, FinalPnl = b.FinalPnl,
WinRate = b.WinRate, WinRate = b.WinRate,
@@ -171,7 +170,6 @@ public static class MongoMappers
Config = Map(result.Config), Config = Map(result.Config),
Positions = Map(result.Positions), Positions = Map(result.Positions),
Signals = result.Signals.Select(s => Map(s)).ToList(), Signals = result.Signals.Select(s => Map(s)).ToList(),
Candles = result.Candles.Select(c => Map(c)).ToList(),
MoneyManagement = Map(result.Config.MoneyManagement), MoneyManagement = Map(result.Config.MoneyManagement),
OptimizedMoneyManagement = Map(result.OptimizedMoneyManagement), OptimizedMoneyManagement = Map(result.OptimizedMoneyManagement),
User = Map(result.User), User = Map(result.User),

View File

@@ -2,7 +2,7 @@ import {ArrowDownIcon, ArrowUpIcon} from '@heroicons/react/solid'
import React from 'react' import React from 'react'
import {useExpanded, useFilters, usePagination, useSortBy, useTable,} from 'react-table' 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 // Define a default UI for filtering
function DefaultColumnFilter({ function DefaultColumnFilter({