@page "/trading" @using TradingBot.Models @using TradingBot.Services @inject TradingBotService BotService @implements IDisposable @rendermode InteractiveServer Trading - TradingBot

Asset Monitorati

@foreach (var config in BotService.AssetConfigurations.Values.OrderBy(c => c.Symbol)) { var stats = BotService.AssetStatistics.TryGetValue(config.Symbol, out var s) ? s : null; var latestPrice = BotService.GetLatestPrice(config.Symbol);
@config.Symbol.Substring(0, 1)
@config.Name @config.Symbol
@if (latestPrice != null) {
$@latestPrice.Price.ToString("N2")
@Math.Abs(latestPrice.Change24h).ToString("F2")%
} else {
Loading...
}
Strategia Applicata
@config.StrategyName
Holdings @config.CurrentHoldings.ToString("F4")
Valore $@((config.CurrentBalance + config.CurrentHoldings * (latestPrice?.Price ?? 0)).ToString("N2"))
Profitto $@config.TotalProfit.ToString("N2")
Trades @(stats?.TotalTrades ?? 0)
}

Operazioni Recenti

@if (BotService.Trades.Count == 0) {

Nessuna operazione ancora

Avvia il trading per iniziare a eseguire operazioni

} else {
Asset
Tipo
Quantità
Prezzo
Valore
Strategia
Data/Ora
@foreach (var trade in BotService.Trades.Take(20)) {
@trade.Symbol
@(trade.Type == TradeType.Buy ? "BUY" : "SELL")
@trade.Amount.ToString("F6")
$@trade.Price.ToString("N2")
$@((trade.Amount * trade.Price).ToString("N2"))
@if (trade.IsBot) { @trade.Strategy } else { Manuale }
@trade.Timestamp.ToLocalTime().ToString("dd/MM HH:mm:ss")
}
}
@code { protected override void OnInitialized() { BotService.OnStatusChanged += HandleUpdate; BotService.OnTradeExecuted += HandleTradeExecuted; BotService.OnPriceUpdated += HandlePriceUpdate; if (!BotService.Status.IsRunning) { BotService.Start(); } } private void ToggleBot() { if (BotService.Status.IsRunning) BotService.Stop(); else BotService.Start(); } private void ToggleAsset(string symbol, bool enabled) { BotService.ToggleAsset(symbol, enabled); } private void OpenAssetConfig(string symbol) { // TODO: Open asset configuration modal } private void ViewChart(string symbol) { // TODO: Navigate to market analysis with selected symbol } private void HandleUpdate() => InvokeAsync(StateHasChanged); private void HandleTradeExecuted(Trade trade) => InvokeAsync(StateHasChanged); private void HandlePriceUpdate(string symbol, MarketPrice price) => InvokeAsync(StateHasChanged); public void Dispose() { BotService.OnStatusChanged -= HandleUpdate; BotService.OnTradeExecuted -= HandleTradeExecuted; BotService.OnPriceUpdated -= HandlePriceUpdate; } }