private async Task <bool> StopStrategy(IStrategySettingDTO strat) { IStrategy runningStrategy = this.strategies.FirstOrDefault(x => x.Name == strat.StrategyName); this.PlatformLogService.Log(platformJob.ID, userId, $"Stopping strategy {runningStrategy.Name}", eventType.Info); await runningStrategy.Stop(); return(true); }
private async Task <IEnumerable <IStrategySettingDTO> > StopUpdateStrategies(IEnumerable <IStrategySettingDTO> runningStrats, IEnumerable <IStrategySettingDTO> newStrats) { List <IStrategySettingDTO> toremoveStrats = runningStrats.Where(x => newStrats.Select(y => y.StrategyName).Contains(x.StrategyName)).ToList(); foreach (IStrategySettingDTO strat in newStrats) { IStrategySettingDTO toRemove = toremoveStrats.FirstOrDefault(x => x.StrategyName == strat.StrategyName && x.UpdatedTimeStamp == x.UpdatedTimeStamp); if (toRemove != null) { toremoveStrats.Remove(toRemove); } } await Task.WhenAll(toremoveStrats.Select(x => this.StopStrategy(x)).ToList()); return(toremoveStrats); }
public async Task <IStrategy> CreateStrategy(IStrategySettingDTO s, Dictionary <string, SemaphoreSlim> currencySemaphores, SemaphoreSlim concurrentSemaphore) { IStrategy strat = null; if (s is LimitArbitrageStrategy4SettingsDTO) { var setting = (LimitArbitrageStrategy4SettingsDTO)s; var ex1 = await this.exchangeFactory.GetExchange(setting.Exchange_1); var ex2 = await this.exchangeFactory.GetExchange(setting.Exchange_2); var baseSemapore = this.GetCurrencySemaphore(Currency.GetBaseFromSymbol(setting.Symbol), ref currencySemaphores); var quoteSemapore = this.GetCurrencySemaphore(Currency.GetQuoteFromSymbol(setting.Symbol), ref currencySemaphores); strat = new LimitArbitrage4Strategy(setting, ex1, ex2, this.logService, baseSemapore, quoteSemapore, concurrentSemaphore); } return(strat); }