Postgres (#30)

* Add postgres

* Migrate users

* Migrate geneticRequest

* Try to fix Concurrent call

* Fix asyncawait

* Fix async and concurrent

* Migrate backtests

* Add cache for user by address

* Fix backtest migration

* Fix not open connection

* Fix backtest command error

* Fix concurrent

* Fix all concurrency

* Migrate TradingRepo

* Fix scenarios

* Migrate statistic repo

* Save botbackup

* Add settings et moneymanagement

* Add bot postgres

* fix a bit more backups

* Fix bot model

* Fix loading backup

* Remove cache market for read positions

* Add workers to postgre

* Fix workers api

* Reduce get Accounts for workers

* Migrate synth to postgre

* Fix backtest saved

* Remove mongodb

* botservice decorrelation

* Fix tradingbot scope call

* fix tradingbot

* fix concurrent

* Fix scope for genetics

* Fix account over requesting

* Fix bundle backtest worker

* fix a lot of things

* fix tab backtest

* Remove optimized moneymanagement

* Add light signal to not use User and too much property

* Make money management lighter

* insert indicators to awaitable

* Migrate add strategies to await

* Refactor scenario and indicator retrieval to use asynchronous methods throughout the application

* add more async await

* Add services

* Fix and clean

* Fix bot a bit

* Fix bot and add message for cooldown

* Remove fees

* Add script to deploy db

* Update dfeeploy script

* fix script

* Add idempotent script and backup

* finish script migration

* Fix did user and agent name on start bot
This commit is contained in:
Oda
2025-07-27 15:42:17 +02:00
committed by GitHub
parent 361bfbf6e8
commit 422fecea7b
294 changed files with 23953 additions and 7272 deletions

View File

@@ -5,12 +5,15 @@ using Managing.Application.Abstractions.Repositories;
using Managing.Application.Abstractions.Services;
using Managing.Application.Backtesting;
using Managing.Application.Bots.Base;
using Managing.Application.Hubs;
using Managing.Application.ManageBot;
using Managing.Core;
using Managing.Domain.Backtests;
using Managing.Domain.Bots;
using Managing.Domain.Candles;
using Managing.Domain.MoneyManagements;
using Managing.Domain.Scenarios;
using Microsoft.AspNetCore.SignalR;
using Moq;
using Newtonsoft.Json;
using Xunit;
@@ -35,6 +38,8 @@ namespace Managing.Application.Tests
var scenarioService = new Mock<IScenarioService>().Object;
var messengerService = new Mock<IMessengerService>().Object;
var kaigenService = new Mock<IKaigenService>().Object;
var backupBotService = new Mock<IBackupBotService>().Object;
var hubContext = new Mock<IHubContext<BacktestHub>>().Object;
var tradingBotLogger = TradingBaseTests.CreateTradingBotLogger();
var backtestLogger = TradingBaseTests.CreateBacktesterLogger();
var botService = new Mock<IBotService>().Object;
@@ -44,9 +49,9 @@ namespace Managing.Application.Tests
discordService,
_accountService.Object,
_tradingService.Object,
botService);
botService, backupBotService);
_backtester = new Backtester(_exchangeService, _botFactory, backtestRepository, backtestLogger,
scenarioService, _accountService.Object, messengerService, kaigenService);
scenarioService, _accountService.Object, messengerService, kaigenService, hubContext);
_elapsedTimes = new List<double>();
// Initialize cross-platform file paths

View File

@@ -1,6 +1,5 @@
using Managing.Application.Abstractions.Services;
using Managing.Domain.Accounts;
using Managing.Domain.Strategies;
using Managing.Domain.Strategies.Signals;
using Managing.Domain.Strategies.Trends;
using Xunit;
@@ -26,7 +25,7 @@ namespace Managing.Application.Tests
// Arrange
var rsiStrategy = new RsiDivergenceIndicator("unittest", 5);
var candles = _exchangeService.GetCandles(account, ticker, DateTime.Now.AddDays(-50), timeframe).Result;
var resultSignal = new List<Signal>();
var resultSignal = new List<LightSignal>();
// Act
foreach (var candle in candles)
@@ -39,7 +38,7 @@ namespace Managing.Application.Tests
resultSignal.AddRange(rsiStrategy.Signals);
// Assert
Assert.IsType<List<Signal>>(resultSignal);
Assert.IsType<List<LightSignal>>(resultSignal);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Long);
}
@@ -60,7 +59,7 @@ namespace Managing.Application.Tests
var account = GetAccount(exchange);
var rsiStrategy = new RsiDivergenceIndicator("unittest", 5);
var candles = _exchangeService.GetCandles(account, ticker, DateTime.Now.AddDays(-50), timeframe).Result;
var resultSignal = new List<Signal>();
var resultSignal = new List<LightSignal>();
// Act
foreach (var candle in candles)
@@ -73,7 +72,7 @@ namespace Managing.Application.Tests
resultSignal.AddRange(rsiStrategy.Signals);
// Assert
Assert.IsType<List<Signal>>(resultSignal);
Assert.IsType<List<LightSignal>>(resultSignal);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Short);
}
@@ -87,7 +86,7 @@ namespace Managing.Application.Tests
var account = GetAccount(exchange);
var rsiStrategy = new MacdCrossIndicator("unittest", 12, 26, 9);
var candles = await _exchangeService.GetCandles(account, ticker, DateTime.Now.AddDays(days), timeframe);
var resultSignal = new List<Signal>();
var resultSignal = new List<LightSignal>();
// Act
foreach (var candle in candles)
@@ -100,7 +99,7 @@ namespace Managing.Application.Tests
resultSignal.AddRange(rsiStrategy.Signals);
// Assert
Assert.IsType<List<Signal>>(resultSignal);
Assert.IsType<List<LightSignal>>(resultSignal);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Short);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Long);
}
@@ -114,7 +113,7 @@ namespace Managing.Application.Tests
var account = GetAccount(exchange);
var superTrendStrategy = new SuperTrendIndicator("unittest", 10, 3);
var candles = _exchangeService.GetCandles(account, ticker, DateTime.Now.AddDays(days), timeframe).Result;
var resultSignal = new List<Signal>();
var resultSignal = new List<LightSignal>();
// Act
foreach (var candle in candles)
@@ -127,7 +126,7 @@ namespace Managing.Application.Tests
resultSignal.AddRange(superTrendStrategy.Signals);
// Assert
Assert.IsType<List<Signal>>(resultSignal);
Assert.IsType<List<LightSignal>>(resultSignal);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Short);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Long);
}
@@ -142,7 +141,7 @@ namespace Managing.Application.Tests
var chandelierExitStrategy = new ChandelierExitIndicator("unittest", 22, 3);
var candles = _exchangeService.GetCandles(account, ticker, DateTime.Now.AddDays(days), timeframe, false)
.Result;
var resultSignal = new List<Signal>();
var resultSignal = new List<LightSignal>();
// Act
foreach (var candle in candles)
@@ -155,7 +154,7 @@ namespace Managing.Application.Tests
resultSignal.AddRange(chandelierExitStrategy.Signals);
// Assert
Assert.IsType<List<Signal>>(resultSignal);
Assert.IsType<List<LightSignal>>(resultSignal);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Short);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Long);
}
@@ -169,7 +168,7 @@ namespace Managing.Application.Tests
var account = GetAccount(exchange);
var emaTrendSrategy = new EmaTrendIndicator("unittest", 200);
var candles = _exchangeService.GetCandles(account, ticker, DateTime.Now.AddDays(days), timeframe).Result;
var resultSignal = new List<Signal>();
var resultSignal = new List<LightSignal>();
// Act
foreach (var candle in candles)
@@ -182,7 +181,7 @@ namespace Managing.Application.Tests
resultSignal.AddRange(emaTrendSrategy.Signals);
// Assert
Assert.IsType<List<Signal>>(resultSignal);
Assert.IsType<List<LightSignal>>(resultSignal);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Short);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Long);
}
@@ -197,7 +196,7 @@ namespace Managing.Application.Tests
var account = GetAccount(exchange);
var stochRsiStrategy = new StochRsiTrendIndicator("unittest", 14, 14, 3, 1);
var candles = _exchangeService.GetCandles(account, ticker, DateTime.Now.AddDays(days), timeframe).Result;
var resultSignal = new List<Signal>();
var resultSignal = new List<LightSignal>();
// var json = JsonConvert.SerializeObject(candles);
// File.WriteAllText($"{ticker.ToString()}-{timeframe.ToString()}-candles.json", json);
@@ -214,7 +213,7 @@ namespace Managing.Application.Tests
resultSignal.AddRange(stochRsiStrategy.Signals);
// Assert
Assert.IsType<List<Signal>>(resultSignal);
Assert.IsType<List<LightSignal>>(resultSignal);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Short);
Assert.Contains(resultSignal, s => s.Direction == TradeDirection.Long);
}

View File

@@ -51,7 +51,8 @@ public class PositionTests : BaseTests
Open = openTrade
};
var command = new ClosePositionCommand(position);
_ = _tradingService.Setup(m => m.GetPositionByIdentifier(It.IsAny<string>())).Returns(position);
_ = _tradingService.Setup(m => m.GetPositionByIdentifierAsync(It.IsAny<string>())).ReturnsAsync(position);
_ = _tradingService.Setup(m => m.GetPositionByIdentifierAsync(It.IsAny<string>())).ReturnsAsync(position);
var handler = new ClosePositionCommandHandler(
_exchangeService,