Esempio n. 1
0
        private void PlacePendingOrder(Order order)
        {
            var me = _meRouter.GetMatchingEngineForOpen(order);

            order.MatchingEngineMode = me.Mode;

            using (_contextFactory.GetWriteSyncContext($"{nameof(TradingEngine)}.{nameof(PlacePendingOrder)}"))
                _ordersCache.WaitingForExecutionOrders.Add(order);

            _orderPlacedEventChannel.SendEvent(this, new OrderPlacedEventArgs(order));
        }
Esempio n. 2
0
        public void Check_NestedContext_Works()
        {
            using (_contextFactory.GetWriteSyncContext("test1"))
            {
                Console.WriteLine("Enter context");

                using (_contextFactory.GetWriteSyncContext("test2"))
                {
                    Console.WriteLine("Enter nested context");
                }

                Console.WriteLine(VerifyPublishMetrics(TelemetryConstants.WriteTradingContext, "test2", 2, 0, 0));
                Assert.AreEqual(1, _callbacksCount);
            }

            Console.WriteLine(VerifyPublishMetrics(TelemetryConstants.WriteTradingContext, "test1", 1, 0, 0));
            Assert.AreEqual(2, _callbacksCount);
        }
Esempio n. 3
0
        public void SetOrders(SetOrderModel model)
        {
            var updatedInstruments = new List <string>();

            using (_contextFactory.GetWriteSyncContext($"{nameof(MarketMakerMatchingEngine)}.{nameof(SetOrders)}"))
            {
                if (model.DeleteByInstrumentsBuy?.Count > 0)
                {
                    _orderBooks.DeleteAllBuyOrdersByMarketMaker(model.MarketMakerId, model.DeleteByInstrumentsBuy);
                }

                if (model.DeleteByInstrumentsSell?.Count > 0)
                {
                    _orderBooks.DeleteAllSellOrdersByMarketMaker(model.MarketMakerId, model.DeleteByInstrumentsSell);
                }

                if (model.DeleteAllBuy || model.DeleteAllSell)
                {
                    _orderBooks.DeleteAllOrdersByMarketMaker(model.MarketMakerId, model.DeleteAllBuy,
                                                             model.DeleteAllSell);
                }

                if (model.OrderIdsToDelete?.Length > 0)
                {
                    var deletedOrders =
                        _orderBooks.DeleteMarketMakerOrders(model.MarketMakerId, model.OrderIdsToDelete);

                    updatedInstruments.AddRange(deletedOrders.Select(o => o.Instrument).Distinct());
                }

                if (model.OrdersToAdd?.Count > 0)
                {
                    _orderBooks.AddMarketMakerOrders(model.OrdersToAdd);

                    updatedInstruments.AddRange(model.OrdersToAdd.Select(o => o.Instrument).Distinct());
                }

                foreach (var instrument in updatedInstruments.Distinct())
                {
                    ProduceBestPrice(instrument);
                }
            }
        }
Esempio n. 4
0
        public override void Start()
        {
            var state =
                _blobRepository.Read <Dictionary <string, OrderBook> >(LykkeConstants.StateBlobContainer, BlobName)
                ?.ToDictionary(d => d.Key, d => d.Value) ??
                new Dictionary <string, OrderBook>();

            using (_contextFactory.GetWriteSyncContext($"{nameof(OrderBookSaveService)}.{nameof(Start)}"))
            {
                _orderBookList.Init(state);
            }

            base.Start();
        }
Esempio n. 5
0
        public Task Invoke()
        {
            using (_contextFactory.GetWriteSyncContext($"{nameof(PendingMarginInstrumentMigration)}.{nameof(Invoke)}"))
            {
                //open orders from cache
                var allOrders     = _orderCache.GetAll().ToList();
                var pendingOrders = _orderCache.GetPending().Where(x => string.IsNullOrEmpty(x.MarginCalcInstrument)).ToList();
                if (!pendingOrders.Any())
                {
                    return(Task.CompletedTask);
                }

                foreach (var order in pendingOrders)
                {
                    HandleOrder(order);
                }

                //reinit orders cache with modified data
                _orderCache.InitOrders(allOrders);
            }

            return(Task.CompletedTask);
        }