Add updates scenario and strategy

This commit is contained in:
2025-02-26 20:37:32 +07:00
parent 4302bb8435
commit 655ebb6df0
7 changed files with 120 additions and 4 deletions

View File

@@ -62,6 +62,13 @@ public class ScenarioController : ControllerBase
return Ok(_scenarioService.DeleteScenario(name));
}
// Update scenario
[HttpPut]
public ActionResult UpdateScenario(string name, List<string> strategies, int? loopbackPeriod = null)
{
return Ok(_scenarioService.UpdateScenario(name, strategies, loopbackPeriod));
}
/// <summary>
/// Retrieves all strategies.
/// </summary>
@@ -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));
}
}

View File

@@ -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);
}

View File

@@ -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<Position> GetPositions(PositionInitiator positionInitiator);
IEnumerable<Position> GetPositions();
IEnumerable<Position> GetPositionsByStatus(Enums.PositionStatus positionStatus);
IEnumerable<Position> GetPositionsByStatus(PositionStatus positionStatus);
Task<Position> ManagePosition(Account account, Position position);
void UpdateFee(TradingExchanges evm);
decimal GetFee(Account account, bool isForPaperTrading = false);
Task WatchTrader();
IEnumerable<Trader> GetTradersWatch();
void UpdateDeltaNeutralOpportunities();
void UpdateScenario(Scenario scenario);
void UpdateStrategy(Strategy strategy);
}

View File

@@ -26,5 +26,9 @@ namespace Managing.Application.Abstractions
bool DeleteStrategies();
bool DeleteScenarios();
bool UpdateScenario(string name, List<string> 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);
}
}

View File

@@ -138,5 +138,53 @@ namespace Managing.Application.Scenarios
return true;
}
public bool UpdateScenario(string name, List<string> 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;
}
}
}
}

View File

@@ -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<Ticker> tickers)
{
var shortAddress = a.Account.Address.Substring(0, 6);

View File

@@ -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);
}
}