Use usdc balance instead usdc value for ensuring balance check

This commit is contained in:
2025-10-05 01:36:25 +07:00
parent 63683d6bdf
commit de0d042254
7 changed files with 72 additions and 96 deletions

View File

@@ -2,7 +2,6 @@
using Managing.Common;
using Managing.Domain.Accounts;
using Managing.Domain.Candles;
using Managing.Domain.Evm;
using Managing.Domain.Statistics;
using Managing.Domain.Trades;
using Microsoft.Extensions.Logging;
@@ -45,21 +44,7 @@ public class EvmProcessor : BaseProcessor
public override async Task<List<Balance>> GetBalances(Account account, bool isForPaperTrading = false)
{
var balances = await _evmManager.GetAllBalancesOnAllChain(account.Key);
return Map(balances);
}
private List<Balance> Map(List<EvmBalance> balances)
{
return balances.ConvertAll(balance => new Balance
{
TokenName = balance.TokenName,
Price = balance.Price,
Value = balance.Value,
Amount = balance.Balance,
TokenAdress = balance.TokenAddress,
Chain = balance.Chain
});
return await _evmManager.GetAllBalancesOnAllChain(account.Key);
}
public override async Task<Candle> GetCandle(Account account, Ticker ticker, DateTime date)
@@ -73,7 +58,8 @@ public class EvmProcessor : BaseProcessor
return await _evmManager.GetCandles(ticker, startDate, interval);
}
public async Task<List<Candle>> GetCandles(Account account, Ticker ticker, DateTime startDate, Timeframe interval, bool isFirstCall)
public async Task<List<Candle>> GetCandles(Account account, Ticker ticker, DateTime startDate, Timeframe interval,
bool isFirstCall)
{
return await _evmManager.GetCandles(ticker, startDate, interval, isFirstCall);
}
@@ -86,11 +72,13 @@ public class EvmProcessor : BaseProcessor
public override async Task<decimal> GetPrice(Account account, Ticker ticker, DateTime date)
{
var candles = await GetCandles(account, ticker, date, Timeframe.OneMinute, true);
if (candles == null || !candles.Any())
{
_logger.LogError($"No candles available for ticker {ticker} at date {date:yyyy-MM-dd HH:mm:ss}. This could indicate a data source issue or invalid ticker.");
throw new InvalidOperationException($"Cannot get price for {ticker} - no candle data available for the requested date {date:yyyy-MM-dd HH:mm:ss}. Please check if the ticker is valid and data source is accessible.");
_logger.LogError(
$"No candles available for ticker {ticker} at date {date:yyyy-MM-dd HH:mm:ss}. This could indicate a data source issue or invalid ticker.");
throw new InvalidOperationException(
$"Cannot get price for {ticker} - no candle data available for the requested date {date:yyyy-MM-dd HH:mm:ss}. Please check if the ticker is valid and data source is accessible.");
}
return candles.Last().Close;
@@ -110,7 +98,7 @@ public class EvmProcessor : BaseProcessor
// Try to get the most recent candle data (last 5 minutes)
var recentDate = DateTime.UtcNow.AddMinutes(-5);
var candles = await GetCandles(account, ticker, recentDate, Timeframe.OneMinute, true);
if (candles != null && candles.Any())
{
var latestCandle = candles.OrderByDescending(c => c.Date).First();
@@ -121,17 +109,19 @@ public class EvmProcessor : BaseProcessor
// Fallback: Try to get price from a broader time range
var fallbackDate = DateTime.UtcNow.AddHours(-1);
var fallbackCandles = await GetCandles(account, ticker, fallbackDate, Timeframe.OneMinute, true);
if (fallbackCandles != null && fallbackCandles.Any())
{
var latestFallbackCandle = fallbackCandles.OrderByDescending(c => c.Date).First();
_logger.LogWarning($"Using fallback price {latestFallbackCandle.Close} for {ticker} from 1-hour old data");
_logger.LogWarning(
$"Using fallback price {latestFallbackCandle.Close} for {ticker} from 1-hour old data");
return latestFallbackCandle.Close;
}
// If all else fails, throw a descriptive error
_logger.LogError($"No price data available for {ticker} from any source");
throw new InvalidOperationException($"Cannot get current price for {ticker} - no price data available from broker. Please check if the ticker is valid and the broker is accessible.");
throw new InvalidOperationException(
$"Cannot get current price for {ticker} - no price data available from broker. Please check if the ticker is valid and the broker is accessible.");
}
catch (Exception ex)
{
@@ -162,7 +152,7 @@ public class EvmProcessor : BaseProcessor
public override async Task<IEnumerable<Position>> GetPositions(Account account)
{
return await _evmManager.GetPositions(account);
return await _evmManager.GetPositions(account);
}
public override decimal GetVolume(Account account, Ticker ticker)