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