Beispiel #1
0
        public OrderMatcher(OrderRequest orderRequest, EffectProcessorsContainer effectsContainer)
        {
            resultEffects = effectsContainer;

            takerOrder = new Order
            {
                OrderId        = OrderIdConverter.FromRequest(orderRequest, effectsContainer.Apex),
                AccountWrapper = orderRequest.AccountWrapper,
                Amount         = orderRequest.Amount,
                Price          = orderRequest.Price
            };
            timeInForce = orderRequest.TimeInForce;

            //parse data from the ID of the newly arrived order
            var orderData = OrderIdConverter.Decode(takerOrder.OrderId);

            asset = orderData.Asset;
            side  = orderData.Side;
            //get asset orderbook
            market    = effectsContainer.Context.Exchange.GetMarket(asset);
            orderbook = market.GetOrderbook(side.Inverse());
            //fetch balances
            if (!takerOrder.AccountWrapper.Account.HasBalance(asset))
            {
                resultEffects.AddBalanceCreate(orderRequest.AccountWrapper, asset);
            }
        }
Beispiel #2
0
 /// <summary>
 /// Sends envelope and all effects to specified callback
 /// </summary>
 public void Complete()
 {
     //TODO: find more elegant way to handle this scenario
     //we mustn't save orders that were closed immediately without adding to order-book
     if (Quantum is RequestQuantum request &&
         request.RequestMessage is OrderRequest orderRequest &&
         !OrderWasPlaced)
     {
         PendingDiffObject.Orders.Remove(OrderIdConverter.FromRequest(orderRequest, Quantum.Apex));
     }
     QuantumModel.Complete(QuantumModelExtensions.FromQuantum(Envelope));
     PendingDiffObject.Quanta.Add(QuantumModel);
 }