@using TradingBot.Models @using TradingBot.Services @inject TradingBotService BotService
@code { [Parameter] public bool IsOpen { get; set; } [Parameter] public string? Symbol { get; set; } [Parameter] public EventCallback OnClose { get; set; } private AssetConfiguration? Config { get; set; } protected override void OnParametersSet() { if (IsOpen && !string.IsNullOrEmpty(Symbol)) { LoadConfiguration(); } } private void LoadConfiguration() { if (BotService.AssetConfigurations.TryGetValue(Symbol!, out var config)) { // Create a copy to avoid modifying the original until saved Config = new AssetConfiguration { Symbol = config.Symbol, Name = config.Name, IsEnabled = config.IsEnabled, InitialBalance = config.InitialBalance, CurrentBalance = config.CurrentBalance, CurrentHoldings = config.CurrentHoldings, AverageEntryPrice = config.AverageEntryPrice, StrategyName = config.StrategyName, StrategyParameters = new Dictionary(config.StrategyParameters), MaxPositionSize = config.MaxPositionSize, StopLossPercentage = config.StopLossPercentage, TakeProfitPercentage = config.TakeProfitPercentage, MinTradeAmount = config.MinTradeAmount, MaxTradeAmount = config.MaxTradeAmount, MaxDailyTrades = config.MaxDailyTrades, LastTradeTime = config.LastTradeTime, DailyTradeCount = config.DailyTradeCount, DailyTradeCountReset = config.DailyTradeCountReset }; } } private void UpdateStrategyParameter(string key, object? value) { if (Config != null && value != null) { if (value is string strValue) { if (decimal.TryParse(strValue, out var decValue)) { Config.StrategyParameters[key] = decValue; } else if (int.TryParse(strValue, out var intValue)) { Config.StrategyParameters[key] = intValue; } } } } private void ResetToDefaults() { if (Config != null) { Config.InitialBalance = 1000m; Config.StopLossPercentage = 5m; Config.TakeProfitPercentage = 10m; Config.MaxPositionSize = 100m; Config.MinTradeAmount = 10m; Config.MaxTradeAmount = 500m; Config.MaxDailyTrades = 10; Config.StrategyParameters = new Dictionary { { "ShortPeriod", 10 }, { "LongPeriod", 30 }, { "SignalThreshold", 0.5m } }; } } private async Task SaveSettings() { if (Config != null && !string.IsNullOrEmpty(Symbol)) { BotService.UpdateAssetConfiguration(Symbol, Config); await Close(); } } private async Task Close() { IsOpen = false; await OnClose.InvokeAsync(); } }