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