diff --git a/src/Managing.Api/Controllers/ScenarioController.cs b/src/Managing.Api/Controllers/ScenarioController.cs index 07b380e..83cd7e2 100644 --- a/src/Managing.Api/Controllers/ScenarioController.cs +++ b/src/Managing.Api/Controllers/ScenarioController.cs @@ -62,6 +62,13 @@ public class ScenarioController : ControllerBase return Ok(_scenarioService.DeleteScenario(name)); } + // Update scenario + [HttpPut] + public ActionResult UpdateScenario(string name, List strategies, int? loopbackPeriod = null) + { + return Ok(_scenarioService.UpdateScenario(name, strategies, loopbackPeriod)); + } + /// /// Retrieves all strategies. /// @@ -126,4 +133,32 @@ public class ScenarioController : ControllerBase { return Ok(_scenarioService.DeleteStrategy(name)); } + + // Update strategy + [HttpPut] + [Route("strategy")] + public ActionResult UpdateStrategy( + StrategyType strategyType, + string name, + int? period = null, + int? fastPeriods = null, + int? slowPeriods = null, + int? signalPeriods = null, + double? multiplier = null, + int? stochPeriods = null, + int? smoothPeriods = null, + int? cyclePeriods = null) + { + return Ok(_scenarioService.UpdateStrategy( + strategyType, + name, + period, + fastPeriods, + slowPeriods, + signalPeriods, + multiplier, + stochPeriods, + smoothPeriods, + cyclePeriods)); + } } \ No newline at end of file diff --git a/src/Managing.Application.Abstractions/Repositories/ITradingRepository.cs b/src/Managing.Application.Abstractions/Repositories/ITradingRepository.cs index 5f6b0e1..4a63c84 100644 --- a/src/Managing.Application.Abstractions/Repositories/ITradingRepository.cs +++ b/src/Managing.Application.Abstractions/Repositories/ITradingRepository.cs @@ -26,4 +26,6 @@ public interface ITradingRepository Fee GetFee(TradingExchanges exchange); void InsertFee(Fee fee); void UpdateFee(Fee fee); -} + void UpdateScenario(Scenario scenario); + void UpdateStrategy(Strategy strategy); +} \ No newline at end of file diff --git a/src/Managing.Application.Abstractions/Services/ITradingService.cs b/src/Managing.Application.Abstractions/Services/ITradingService.cs index b8472af..c3fd64d 100644 --- a/src/Managing.Application.Abstractions/Services/ITradingService.cs +++ b/src/Managing.Application.Abstractions/Services/ITradingService.cs @@ -1,5 +1,4 @@ -using Managing.Common; -using Managing.Domain.Accounts; +using Managing.Domain.Accounts; using Managing.Domain.Scenarios; using Managing.Domain.Statistics; using Managing.Domain.Strategies; @@ -26,11 +25,13 @@ public interface ITradingService Position GetPositionByIdentifier(string identifier); IEnumerable GetPositions(PositionInitiator positionInitiator); IEnumerable GetPositions(); - IEnumerable GetPositionsByStatus(Enums.PositionStatus positionStatus); + IEnumerable GetPositionsByStatus(PositionStatus positionStatus); Task ManagePosition(Account account, Position position); void UpdateFee(TradingExchanges evm); decimal GetFee(Account account, bool isForPaperTrading = false); Task WatchTrader(); IEnumerable GetTradersWatch(); void UpdateDeltaNeutralOpportunities(); + void UpdateScenario(Scenario scenario); + void UpdateStrategy(Strategy strategy); } \ No newline at end of file diff --git a/src/Managing.Application/Abstractions/IScenarioService.cs b/src/Managing.Application/Abstractions/IScenarioService.cs index 0152c7e..487dddd 100644 --- a/src/Managing.Application/Abstractions/IScenarioService.cs +++ b/src/Managing.Application/Abstractions/IScenarioService.cs @@ -26,5 +26,9 @@ namespace Managing.Application.Abstractions bool DeleteStrategies(); bool DeleteScenarios(); + bool UpdateScenario(string name, List strategies, int? loopbackPeriod); + + bool UpdateStrategy(StrategyType strategyType, string name, int? period, int? fastPeriods, int? slowPeriods, + int? signalPeriods, double? multiplier, int? stochPeriods, int? smoothPeriods, int? cyclePeriods); } } \ No newline at end of file diff --git a/src/Managing.Application/Scenarios/ScenarioService.cs b/src/Managing.Application/Scenarios/ScenarioService.cs index cd82b9d..bd0666f 100644 --- a/src/Managing.Application/Scenarios/ScenarioService.cs +++ b/src/Managing.Application/Scenarios/ScenarioService.cs @@ -138,5 +138,53 @@ namespace Managing.Application.Scenarios return true; } + + public bool UpdateScenario(string name, List strategies, int? loopbackPeriod) + { + try + { + var scenario = _tradingService.GetScenarioByName(name); + scenario.Strategies.Clear(); + foreach (var strategy in strategies) + { + scenario.AddStrategy(_tradingService.GetStrategyByName(strategy)); + } + + scenario.LoopbackPeriod = loopbackPeriod ?? 1; + _tradingService.UpdateScenario(scenario); + return true; + } + catch (Exception e) + { + Console.WriteLine(e); + return false; + } + } + + public bool UpdateStrategy(StrategyType strategyType, string name, int? period, int? fastPeriods, + int? slowPeriods, + int? signalPeriods, double? multiplier, int? stochPeriods, int? smoothPeriods, int? cyclePeriods) + { + try + { + var strategy = _tradingService.GetStrategyByName(name); + strategy.Type = strategyType; + strategy.Period = period; + strategy.FastPeriods = fastPeriods; + strategy.SlowPeriods = slowPeriods; + strategy.SignalPeriods = signalPeriods; + strategy.Multiplier = multiplier; + strategy.StochPeriods = stochPeriods; + strategy.SmoothPeriods = smoothPeriods; + strategy.CyclePeriods = cyclePeriods; + _tradingService.UpdateStrategy(strategy); + return true; + } + catch (Exception e) + { + Console.WriteLine(e); + return false; + } + } } } \ No newline at end of file diff --git a/src/Managing.Application/Trading/TradingService.cs b/src/Managing.Application/Trading/TradingService.cs index a759998..eacdd4d 100644 --- a/src/Managing.Application/Trading/TradingService.cs +++ b/src/Managing.Application/Trading/TradingService.cs @@ -268,6 +268,16 @@ public class TradingService : ITradingService var fundingRates = _exchangeService.GetFundingRates(); } + public void UpdateScenario(Scenario scenario) + { + _tradingRepository.UpdateScenario(scenario); + } + + public void UpdateStrategy(Strategy strategy) + { + _tradingRepository.UpdateStrategy(strategy); + } + private async Task ManageTrader(TraderFollowup a, List tickers) { var shortAddress = a.Account.Address.Substring(0, 6); diff --git a/src/Managing.Infrastructure.Database/TradingRepository.cs b/src/Managing.Infrastructure.Database/TradingRepository.cs index 337f5ca..dc18f3f 100644 --- a/src/Managing.Infrastructure.Database/TradingRepository.cs +++ b/src/Managing.Infrastructure.Database/TradingRepository.cs @@ -145,4 +145,20 @@ public class TradingRepository : ITradingRepository dto.Id = f.Id; _feeRepository.Update(dto); } + + public void UpdateScenario(Scenario scenario) + { + var s = _scenarioRepository.FindOne(s => s.Name == scenario.Name); + var dto = MongoMappers.Map(scenario); + dto.Id = s.Id; + _scenarioRepository.Update(dto); + } + + public void UpdateStrategy(Strategy strategy) + { + var s = _strategyRepository.FindOne(s => s.Name == strategy.Name); + var dto = MongoMappers.Map(strategy); + dto.Id = s.Id; + _strategyRepository.Update(dto); + } } \ No newline at end of file