Update config

This commit is contained in:
2025-06-04 23:15:50 +07:00
parent 756cd5fb11
commit 973a8c7c61
14 changed files with 969 additions and 369 deletions

View File

@@ -1,4 +1,3 @@
using Managing.Application.Bots;
using Managing.Domain.Bots;
using Managing.Domain.Users;
using Managing.Domain.Workflows;
@@ -26,4 +25,5 @@ public interface IBotService
Task<bool> DeleteBot(string botName);
Task<string> RestartBot(string botName);
void ToggleIsForWatchingOnly(string botName);
Task<bool> UpdateBotConfiguration(string identifier, TradingBotConfig newConfig);
}

View File

@@ -666,7 +666,7 @@ public class TradingBot : Bot, ITradingBot
$"Signal {signal.Identifier} will wait for position to become profitable before flipping.");
// Keep signal in waiting status to check again on next execution
SetSignalStatus(signal.Identifier, SignalStatus.WaitingForPosition);
SetSignalStatus(signal.Identifier, SignalStatus.Expired);
return;
}
}
@@ -1180,6 +1180,7 @@ public class TradingBot : Bot, ITradingBot
MaxLossStreak = Config.MaxLossStreak,
MaxPositionTimeHours = Config.MaxPositionTimeHours ?? 0m,
FlipOnlyWhenInProfit = Config.FlipOnlyWhenInProfit,
CloseEarlyWhenProfitable = Config.CloseEarlyWhenProfitable,
};
BotService.SaveOrUpdateBotBackup(User, Identifier, Config.BotType, Status, JsonConvert.SerializeObject(data));
}
@@ -1202,6 +1203,7 @@ public class TradingBot : Bot, ITradingBot
MaxLossStreak = data.MaxLossStreak,
MaxPositionTimeHours = data.MaxPositionTimeHours == 0m ? null : data.MaxPositionTimeHours,
FlipOnlyWhenInProfit = data.FlipOnlyWhenInProfit,
CloseEarlyWhenProfitable = data.CloseEarlyWhenProfitable,
Name = data.Name
};
@@ -1429,7 +1431,8 @@ public class TradingBot : Bot, ITradingBot
MaxPositionTimeHours = Config.MaxPositionTimeHours,
FlipOnlyWhenInProfit = Config.FlipOnlyWhenInProfit,
FlipPosition = Config.FlipPosition,
Name = Config.Name
Name = Config.Name,
CloseEarlyWhenProfitable = Config.CloseEarlyWhenProfitable
};
}
}
@@ -1453,4 +1456,5 @@ public class TradingBotBackup
public int MaxLossStreak { get; set; }
public decimal MaxPositionTimeHours { get; set; }
public bool FlipOnlyWhenInProfit { get; set; }
public bool CloseEarlyWhenProfitable { get; set; }
}

View File

@@ -142,7 +142,8 @@ namespace Managing.Application.ManageBot
MaxPositionTimeHours = scalpingBotData.MaxPositionTimeHours == 0m ? null : scalpingBotData.MaxPositionTimeHours,
FlipOnlyWhenInProfit = scalpingBotData.FlipOnlyWhenInProfit,
IsForBacktest = false,
FlipPosition = false
FlipPosition = false,
CloseEarlyWhenProfitable = scalpingBotData.CloseEarlyWhenProfitable
};
bot = CreateScalpingBot(scalpingConfig);
@@ -171,7 +172,8 @@ namespace Managing.Application.ManageBot
MaxPositionTimeHours = flippingBotData.MaxPositionTimeHours == 0m ? null : flippingBotData.MaxPositionTimeHours,
FlipOnlyWhenInProfit = flippingBotData.FlipOnlyWhenInProfit,
IsForBacktest = false,
FlipPosition = true
FlipPosition = true,
CloseEarlyWhenProfitable = flippingBotData.CloseEarlyWhenProfitable
};
bot = CreateFlippingBot(flippingConfig);
@@ -263,6 +265,23 @@ namespace Managing.Application.ManageBot
}
}
/// <summary>
/// Updates the configuration of an existing bot without stopping and restarting it.
/// </summary>
/// <param name="identifier">The bot identifier</param>
/// <param name="newConfig">The new configuration to apply</param>
/// <returns>True if the configuration was successfully updated, false otherwise</returns>
public async Task<bool> UpdateBotConfiguration(string identifier, TradingBotConfig newConfig)
{
if (_botTasks.TryGetValue(identifier, out var botTaskWrapper) &&
botTaskWrapper.BotInstance is TradingBot tradingBot)
{
return await tradingBot.UpdateConfiguration(newConfig);
}
return false;
}
public ITradingBot CreateScalpingBot(TradingBotConfig config)
{
return new ScalpingBot(

View File

@@ -74,7 +74,8 @@ namespace Managing.Application.ManageBot
MaxPositionTimeHours = request.Config.MaxPositionTimeHours, // Properly handle nullable value
FlipOnlyWhenInProfit = request.Config.FlipOnlyWhenInProfit,
FlipPosition = request.Config.FlipPosition,
Name = request.Config.Name ?? request.Name
Name = request.Config.Name ?? request.Name,
CloseEarlyWhenProfitable = request.Config.CloseEarlyWhenProfitable
};
switch (configToUse.BotType)