Fix update money management

This commit is contained in:
2025-04-21 13:02:38 +02:00
parent 868c7bdb65
commit c571130bb0
7 changed files with 38 additions and 9 deletions

View File

@@ -7,6 +7,7 @@ namespace Managing.Application.Abstractions
{ {
Task<MoneyManagement> CreateOrUpdateMoneyManagement(User user, MoneyManagement request); Task<MoneyManagement> CreateOrUpdateMoneyManagement(User user, MoneyManagement request);
Task<MoneyManagement> GetMoneyMangement(User user, string name); Task<MoneyManagement> GetMoneyMangement(User user, string name);
Task<MoneyManagement> GetMoneyMangement(string name);
IEnumerable<MoneyManagement> GetMoneyMangements(User user); IEnumerable<MoneyManagement> GetMoneyMangements(User user);
bool DeleteMoneyManagement(User user, string name); bool DeleteMoneyManagement(User user, string name);
bool DeleteMoneyManagements(User user); bool DeleteMoneyManagements(User user);

View File

@@ -775,7 +775,7 @@ public class TradingBot : Bot, ITradingBot
Signals = data.Signals; Signals = data.Signals;
Positions = data.Positions; Positions = data.Positions;
WalletBalances = data.WalletBalances; WalletBalances = data.WalletBalances;
MoneyManagement = data.MoneyManagement; // MoneyManagement = data.MoneyManagement; => loaded from database
Timeframe = data.Timeframe; Timeframe = data.Timeframe;
Ticker = data.Ticker; Ticker = data.Ticker;
ScenarioName = data.ScenarioName; ScenarioName = data.ScenarioName;

View File

@@ -20,13 +20,14 @@ namespace Managing.Application.ManageBot
private readonly IAccountService _accountService; private readonly IAccountService _accountService;
private readonly ILogger<TradingBot> _tradingBotLogger; private readonly ILogger<TradingBot> _tradingBotLogger;
private readonly ITradingService _tradingService; private readonly ITradingService _tradingService;
private readonly IMoneyManagementService _moneyManagementService;
private ConcurrentDictionary<string, BotTaskWrapper> _botTasks = private ConcurrentDictionary<string, BotTaskWrapper> _botTasks =
new ConcurrentDictionary<string, BotTaskWrapper>(); new ConcurrentDictionary<string, BotTaskWrapper>();
public BotService(IBotRepository botRepository, IExchangeService exchangeService, public BotService(IBotRepository botRepository, IExchangeService exchangeService,
IMessengerService messengerService, IAccountService accountService, ILogger<TradingBot> tradingBotLogger, IMessengerService messengerService, IAccountService accountService, ILogger<TradingBot> tradingBotLogger,
ITradingService tradingService) ITradingService tradingService, IMoneyManagementService moneyManagementService)
{ {
_botRepository = botRepository; _botRepository = botRepository;
_exchangeService = exchangeService; _exchangeService = exchangeService;
@@ -34,6 +35,7 @@ namespace Managing.Application.ManageBot
_accountService = accountService; _accountService = accountService;
_tradingBotLogger = tradingBotLogger; _tradingBotLogger = tradingBotLogger;
_tradingService = tradingService; _tradingService = tradingService;
_moneyManagementService = moneyManagementService;
} }
public async void SaveOrUpdateBotBackup(BotBackup botBackup) public async void SaveOrUpdateBotBackup(BotBackup botBackup)
@@ -125,9 +127,11 @@ namespace Managing.Application.ManageBot
break; break;
case Enums.BotType.ScalpingBot: case Enums.BotType.ScalpingBot:
var scalpingBotData = JsonConvert.DeserializeObject<TradingBotBackup>(backupBot.Data); var scalpingBotData = JsonConvert.DeserializeObject<TradingBotBackup>(backupBot.Data);
var scalpingMoneyManagement =
_moneyManagementService.GetMoneyMangement(scalpingBotData.MoneyManagement.Name).Result;
bot = CreateScalpingBot( bot = CreateScalpingBot(
scalpingBotData.AccountName, scalpingBotData.AccountName,
scalpingBotData.MoneyManagement, scalpingMoneyManagement,
backupBot.Name, backupBot.Name,
scalpingBotData.Ticker, scalpingBotData.Ticker,
scalpingBotData.ScenarioName, scalpingBotData.ScenarioName,
@@ -137,9 +141,11 @@ namespace Managing.Application.ManageBot
break; break;
case Enums.BotType.FlippingBot: case Enums.BotType.FlippingBot:
var flippingBotData = JsonConvert.DeserializeObject<TradingBotBackup>(backupBot.Data); var flippingBotData = JsonConvert.DeserializeObject<TradingBotBackup>(backupBot.Data);
var flippingMoneyManagement =
_moneyManagementService.GetMoneyMangement(flippingBotData.MoneyManagement.Name).Result;
bot = CreateFlippingBot( bot = CreateFlippingBot(
flippingBotData.AccountName, flippingBotData.AccountName,
flippingBotData.MoneyManagement, flippingMoneyManagement,
backupBot.Name, backupBot.Name,
flippingBotData.Ticker, flippingBotData.Ticker,
flippingBotData.ScenarioName, flippingBotData.ScenarioName,

View File

@@ -62,6 +62,11 @@ public class MoneyManagementService : IMoneyManagementService
} }
} }
public async Task<MoneyManagement> GetMoneyMangement(string name)
{
return await _settingsRepository.GetMoneyManagement(name);
}
public IEnumerable<MoneyManagement> GetMoneyMangements(User user) public IEnumerable<MoneyManagement> GetMoneyMangements(User user)
{ {
try try

View File

@@ -86,7 +86,7 @@ namespace Managing.Application.Trading
request.MoneyManagement.Leverage, request.MoneyManagement.Leverage,
TradeType.StopLoss, TradeType.StopLoss,
request.Date, request.Date,
TradeStatus.PendingOpen); TradeStatus.Requested);
position.StopLoss.Fee = TradingHelpers.GetFeeAmount(fee, position.StopLoss.Fee = TradingHelpers.GetFeeAmount(fee,
position.StopLoss.Price * position.StopLoss.Quantity, account.Exchange); position.StopLoss.Price * position.StopLoss.Quantity, account.Exchange);
@@ -100,7 +100,7 @@ namespace Managing.Application.Trading
request.MoneyManagement.Leverage, request.MoneyManagement.Leverage,
TradeType.TakeProfit, TradeType.TakeProfit,
request.Date, request.Date,
TradeStatus.PendingOpen); TradeStatus.Requested);
position.Status = IsOpenTradeHandled(position.Open.Status, account.Exchange) position.Status = IsOpenTradeHandled(position.Open.Status, account.Exchange)
? position.Status ? position.Status

View File

@@ -75,8 +75,13 @@ const MoneyManagementModal: React.FC<IMoneyManagementModalProps> = ({
setLeverage(e.target.value) setLeverage(e.target.value)
} }
function onBalanceAtRiskChange(e: any) {
setBalanceAtRisk(e.target.value)
}
useEffect(() => { useEffect(() => {
if (moneyManagement) { if (moneyManagement) {
console.log(moneyManagement)
setBalanceAtRisk(moneyManagement.balanceAtRisk * 100) setBalanceAtRisk(moneyManagement.balanceAtRisk * 100)
setTakeProfit(moneyManagement.takeProfit * 100) setTakeProfit(moneyManagement.takeProfit * 100)
setStopLoss(moneyManagement.stopLoss * 100) setStopLoss(moneyManagement.stopLoss * 100)
@@ -131,6 +136,18 @@ const MoneyManagementModal: React.FC<IMoneyManagementModalProps> = ({
</select> </select>
</FormInput> </FormInput>
<FormInput label="Balance at risk" htmlFor="balanceAtRisk">
<Slider
id="balanceAtRisk"
value={balanceAtRisk}
onChange={onBalanceAtRiskChange}
step="1"
max="100"
suffixValue="%"
disabled={disableInputs}
></Slider>
</FormInput>
<FormInput label="TP%" htmlFor="takeProfit"> <FormInput label="TP%" htmlFor="takeProfit">
<Slider <Slider
id="takeProfit" id="takeProfit"

View File

@@ -127,8 +127,8 @@ const MoneyManagementTable: React.FC<IMoneyManagementList> = ({ list }) => {
<div className="flex flex-wrap"> <div className="flex flex-wrap">
<Table columns={columns} data={rows} /> <Table columns={columns} data={rows} />
<MoneyManagementModal <MoneyManagementModal
isOpen={showModal} showModal={showModal}
toggleModal={toggleModal} onClose={toggleModal}
moneyManagement={selectedRow} moneyManagement={selectedRow}
/> />
</div> </div>