コード例 #1
0
ファイル: FieldConverter.cs プロジェクト: MarvelFisher/midas
        public static ExecType?convert(ExecTypeEnum execType, Order order)
        {
            switch (execType)
            {
            case ExecTypeEnum.etCanceled:
                return(ExecType.Canceled);

            case ExecTypeEnum.etNew:
                return(ExecType.New);

            case ExecTypeEnum.etReplaced:
                return(ExecType.Replace);

            case ExecTypeEnum.etRejected:
                return(ExecType.Rejected);

            case ExecTypeEnum.etPartiallyFilled:
                if (PriceUtils.EqualGreaterThan(order.cumQty, order.quantity))
                {
                    return(ExecType.Filled);
                }
                else
                {
                    return(ExecType.PartiallyFilled);
                }
            }

            return(null);
        }
コード例 #2
0
ファイル: FieldConverter.cs プロジェクト: MarvelFisher/midas
        public static OrdStatus?convert(OrderStatusEnum ordStatus, Order order)
        {
            switch (ordStatus)
            {
            case OrderStatusEnum.osCanceled:
                return(OrdStatus.Canceled);

            case OrderStatusEnum.osNew:
                return(OrdStatus.New);

            case OrderStatusEnum.osReplaced:
                return(OrdStatus.Replaced);

            case OrderStatusEnum.osRejected:
                if (order.ordStatus == OrdStatus.PendingNew)
                {
                    return(OrdStatus.Rejected);
                }

                return(order.ordStatus);

            case OrderStatusEnum.osPartiallyFilled:
                if (PriceUtils.EqualGreaterThan(order.cumQty, order.quantity))
                {
                    return(OrdStatus.Filled);
                }
                else
                {
                    return(OrdStatus.PartiallyFilled);
                }
            }

            return(null);
        }
コード例 #3
0
        public void amendOrder(String exchangeOrderId, double price, double qty)
        {
            logger.Info("Amend Order: " + "exchangeOrderId=" + exchangeOrderId + "; price=" + price + "; qty=" + qty);
            Order order;

            if (!orders.TryGetValue(exchangeOrderId, out order))
            {
                throw new DownStreamException("Amend order not found: " + exchangeOrderId);
            }

            if (PriceUtils.EqualGreaterThan(qty, order.quantity))
            {
                throw new DownStreamException("Can't amend quantity up: " + exchangeOrderId);
            }

            if (PriceUtils.EqualLessThan(qty, order.cumQty))
            {
                throw new DownStreamException("Can't amend quantity to equal or less than filled quantity: " + exchangeOrderId);
            }

            if (!PriceUtils.isZero(price) && !PriceUtils.Equal(price, order.price) &&
                !PriceUtils.isZero(qty) && !PriceUtils.Equal(qty, order.quantity))
            {
                throw new DownStreamException("Can't amend both price and quantity: " + exchangeOrderId);
            }

            if (price == order.price && qty == order.quantity)
            {
                throw new DownStreamException("Can't amend price and qty to same value: " + exchangeOrderId);
            }

            OrderMessage.ReplaceOrderMessage replaceOrderMessage = new OrderMessage.ReplaceOrderMessage();
            replaceOrderMessage.AE       = user;
            replaceOrderMessage.Account  = account;
            replaceOrderMessage.BrokerID = brokerID;
            replaceOrderMessage.Symbol   = order.symbol;
            replaceOrderMessage.OrderID  = order.exchangeOrderId;
            replaceOrderMessage.Side     = FieldConverter.convert(order.orderSide);
            if (!PriceUtils.isZero(price) && !PriceUtils.Equal(price, order.price))
            {
                replaceOrderMessage.Price = price;
            }

            if (!PriceUtils.isZero(qty) && !PriceUtils.Equal(qty, order.quantity))
            {
                replaceOrderMessage.OrderQty = (int)qty;
            }
            replaceOrderMessage.Data = formatData(replaceOrderMessage.OrderQty, order.account);

            replaceOrderMessage.NID = exchangeConnection.GenerateUniqueID(this.market, OrderMessage.MessageTypeEnum.mtReplace);
            exchangeConnection.ReplaceOrder(replaceOrderMessage);
        }