예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }