Beispiel #1
0
        public void ProcessOrderCommands(MarketMakerOrderCommandsBatchMessage batch)
        {
            batch.AssetPairId.RequiredNotNullOrWhiteSpace(nameof(batch.AssetPairId));
            batch.Commands.RequiredNotNull(nameof(batch.Commands));

            if (_maintenanceModeService.CheckIsEnabled())
            {
                return;
            }

            if (_assetPairDayOffService.IsAssetTradingDisabled(batch.AssetPairId))
            {
                return;
            }

            var model = new SetOrderModel {
                MarketMakerId = batch.MarketMakerId
            };

            ConvertCommandsToOrders(batch, model);
            if (model.OrdersToAdd?.Count > 0 || model.DeleteByInstrumentsBuy?.Count > 0 ||
                model.DeleteByInstrumentsSell?.Count > 0)
            {
                _matchingEngine.SetOrders(model);
            }
        }
Beispiel #2
0
        /// <summary>
        /// 订单生成
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static SetOrderResult Setorder_json(SetOrderModel data)
        {
            var result = service.Setorder_json(data.user, data.token, data.name, data.mobile, data.address, data.zipcode, data.ordercode, data.sex, data.bosscard, data.useraccount, data.paycode, data.paymoney, data.ispay, data.state, data.remark, data.thfs, data.hotelcode, data.sessionid, data.totalprice, data.oid, data.tjcode);

            result = CommonFunction.Replacebracket(result);
            var obj = JsonConvert.DeserializeObject <List <SetOrderResult> >(result)[0];

            return(obj);
        }
Beispiel #3
0
        public static void SetOrders(this IMarketMakerMatchingEngine matchingEngine, string marketMakerId, LimitOrder[] ordersToAdd = null, string[] orderIdsToDelete = null, bool deleteAll = false)
        {
            var model = new SetOrderModel
            {
                MarketMakerId    = marketMakerId,
                OrdersToAdd      = ordersToAdd,
                OrderIdsToDelete = orderIdsToDelete
            };

            if (deleteAll)
            {
                model.DeleteAllBuy  = true;
                model.DeleteAllSell = true;
            }
            matchingEngine.SetOrders(model);
        }
Beispiel #4
0
        public IActionResult SetOrder([FromBody] SetOrderModel model)
        {
            try
            {
                //var userId = 2;
                var orderMap = _mapper.Map <SetOrderDto>(model);

                var command = new SetOrderCommand(orderMap);
                _commandDispatcher.DispatchCommand(command);

                return(new OkObjectResult("OK"));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Beispiel #5
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);
                }
            }
        }
Beispiel #6
0
        private static void AddOrdersToDelete(MarketMakerOrderCommandsBatchMessage batch, SetOrderModel model)
        {
            var directions = batch.Commands.Where(c => c.CommandType == MarketMakerOrderCommandType.DeleteOrder).Select(c => c.Direction).Distinct().ToList();

            model.DeleteByInstrumentsBuy  = directions.Where(d => d == OrderDirection.Buy || d == null).Select(d => batch.AssetPairId).ToList();
            model.DeleteByInstrumentsSell = directions.Where(d => d == OrderDirection.Sell || d == null).Select(d => batch.AssetPairId).ToList();
        }
Beispiel #7
0
        private void ConvertCommandsToOrders(MarketMakerOrderCommandsBatchMessage batch, SetOrderModel model)
        {
            var setCommands = batch.Commands.Where(c => c.CommandType == MarketMakerOrderCommandType.SetOrder && c.Direction != null).ToList();

            model.OrdersToAdd = setCommands
                                .Select(c => new LimitOrder
            {
                Id            = Guid.NewGuid().ToString("N"),
                MarketMakerId = batch.MarketMakerId,
                CreateDate    = DateTime.UtcNow,
                Instrument    = batch.AssetPairId,
                Price         = c.Price.RequiredNotNull(nameof(c.Price)),
                Volume        = c.Direction.RequiredNotNull(nameof(c.Direction)) == OrderDirection.Buy
                        ? c.Volume.Value
                        : -c.Volume.Value
            }).ToList();

            AddOrdersToDelete(batch, model);
        }