Beispiel #1
0
        /// <summary>
        /// Called when order execution is receievd
        /// </summary>
        /// <param name="execution">Contains execution details</param>
        private void OnExecutionArrived(Execution execution)
        {
            OrderExecutionProvider provider;

            // Get Order Execution Provider
            if (_providersMap.TryGetValue(execution.OrderExecutionProvider, out provider))
            {
                OrderDetails orderDetails = null;

                // Find 'Order Details' object
                foreach (OrderDetails tempOrderDetails in provider.OrdersCollection)
                {
                    if (tempOrderDetails.ID.Equals(execution.Order.OrderID))
                    {
                        orderDetails = tempOrderDetails;
                        break;
                    }
                }

                // Update order parameters
                if (orderDetails != null)
                {
                    orderDetails.Status = execution.Order.OrderStatus;

                    // Create fill information
                    var fillDetail = new FillDetail();

                    fillDetail.FillId       = execution.Fill.ExecutionId;
                    fillDetail.FillPrice    = execution.Fill.ExecutionPrice;
                    fillDetail.FillQuantity = execution.Fill.ExecutionSize;
                    fillDetail.FillDatetime = execution.Fill.ExecutionDateTime;
                    fillDetail.FillType     = execution.Fill.ExecutionType;

                    // Add to order details object
                    provider.AddFill(orderDetails, fillDetail);

                    // Use incoming information to update position statistics
                    provider.UpdatePosition(orderDetails);
                }
            }
        }
Beispiel #2
0
        private FillDetail[] GetOrderFills(
            OrderType type,
            OrderDirection direction,
            Stock stock,
            int quantity,
            decimal?price = null)
        {
            var totalFilled  = 0;
            var filledOrders = new List <FillDetail>();

            var orders = type == OrderType.Market
                ? GetMarketOrders(direction, stock)
                : GetLimitOrders(direction, stock, price.Value);

            foreach (var o in orders)
            {
                var fill = new FillDetail
                {
                    OrderId  = o.OrderId,
                    Owner    = o.Owner,
                    Stock    = o.Stock,
                    Quantity = 0,
                    Price    = o.Price ?? _sharesProvider.GetLastPrice(stock)
                };
                filledOrders.Add(fill);

                for (int i = 0; i < o.Quantity; i++)
                {
                    if (totalFilled >= quantity)
                    {
                        return(filledOrders.ToArray());
                    }

                    fill.Quantity++;
                    totalFilled++;
                }
            }
            return(filledOrders.ToArray());
        }