private async Task BackgroundProcessing(CancellationToken stoppingToken)
        {
            foreach (var exchange in ProjectOrbit.Exchanges)
            {
                var subscriptionManager = new SubscriptionManager(_factory, _factory.CreateLogger <SubscriptionManager>(), exchange);
                await subscriptionManager.StartAsync(stoppingToken);

                var clientManager = new ClientManager(_factory, _factory.CreateLogger <ClientManager>(), exchange);
                await clientManager.StartAsync(stoppingToken);

                var calculator = new TriangleCalculator(_factory.CreateLogger <TriangleCalculator>(), exchange);
                await calculator.StartAsync(stoppingToken);

                var queueMonitor = new QueueMonitor(_factory, _factory.CreateLogger <QueueMonitor>(), exchange);
                await queueMonitor.StartAsync(stoppingToken);

                var subscriber = new OrderbookSubscriber(_factory, _factory.CreateLogger <OrderbookSubscriber>(), exchange);
                await subscriber.StartAsync(stoppingToken);

                var statsMonitor = new StatisticsMonitor(_factory.CreateLogger <StatisticsMonitor>(), exchange);
                await statsMonitor.StartAsync(stoppingToken);

                var activityMonitor = new ActivityMonitor(_factory, _factory.CreateLogger <ActivityMonitor>(), exchange);
                await activityMonitor.StartAsync(stoppingToken);

                //_logger.LogInformation($"there are {exchange.TradedMarkets.Count} markets traded on {exchange.ExchangeName}. Of these markets, {exchange.TriarbEligibleMarkets.Count} markets interact to form {exchange.UniqueTriangleCount} triangular arbitrage opportunities");
            }
        }
Ejemplo n.º 2
0
 private async Task BackgroundProcessing(CancellationToken stoppingToken)
 {
     while (!stoppingToken.IsCancellationRequested)
     {
         if (Exchange.TrianglesToRecalculate.Count > Exchange.SubscribedMarkets.Count && CalculatorCount < MaxTriangleCalculators)//start a new calculator if the queue is >75% its theoretical maximum
         {
             //TODO: implement average queue size metric to decrement TriangleCalculators.
             CalculatorCount++;
             var newCalc = new TriangleCalculator(_factory.CreateLogger <TriangleCalculator>(), CalculatorCount, Exchange);
             await newCalc.StartAsync(stoppingToken);
         }
         await Task.Delay(5000);
     }
 }