private void Trade(OrderStackRow osr, MarketSide side) { if (osr == null) { throw new ArgumentNullException("osr"); } // The server currently does not support click trading, so we fake // it here by adding a matching order to the other side of the market. // If the server supported ImmediateOrCancel then we'd use that. var isBid = side == MarketSide.Bid; var matchingOrderDetails = new OrderRecord { ClOrdID = _clOrdIDGenerator.CreateClOrdID(), LastUpdateTime = DateTime.UtcNow, OrderID = string.Empty, // Set by server OrdType = OrderType.Limit, Price = decimal.Parse(isBid ? osr.BidPrice : osr.AskPrice), Quantity = decimal.Parse(isBid ? osr.BidQty : osr.AskQty), Side = isBid ? MarketSide.Ask : MarketSide.Bid, Symbol = osr.Symbol, Status = OrderStatus.New }; _serverFacade.CreateOrder(matchingOrderDetails); }
private static List <OrderStackRow> CreateOrderStackRows( string symbol, OrderStack stack, Color rowColour) { var bids = stack.GetBids(); var asks = stack.GetAsks(); var maxSize = Math.Max(bids.Count, asks.Count); var rows = new List <OrderStackRow>(); for (var i = 0; i < maxSize; ++i) { var bid = bids.ElementAtOrDefault(i); var ask = asks.ElementAtOrDefault(i); Debug.Assert(bid != null || ask != null); var osr = new OrderStackRow { Symbol = symbol, RowColor = rowColour }; if (bid != null) { osr.BidClOrdID = bid.ClOrdID; osr.BidStatus = bid.Status.ToString(); osr.BidPrice = bid.Price.ToString(CultureInfo.CurrentUICulture); osr.BidQty = bid.Quantity.ToString(CultureInfo.CurrentUICulture); } if (ask != null) { osr.AskClOrdID = ask.ClOrdID; osr.AskStatus = ask.Status.ToString(); osr.AskPrice = ask.Price.ToString(CultureInfo.CurrentUICulture); osr.AskQty = ask.Quantity.ToString(CultureInfo.CurrentUICulture); } rows.Add(osr); } return(rows); }
private static List<OrderStackRow> CreateOrderStackRows( string symbol, OrderStack stack, Color rowColour) { var bids = stack.GetBids(); var asks = stack.GetAsks(); var maxSize = Math.Max(bids.Count, asks.Count); var rows = new List<OrderStackRow>(); for (var i = 0; i < maxSize; ++i) { var bid = bids.ElementAtOrDefault(i); var ask = asks.ElementAtOrDefault(i); Debug.Assert(bid != null || ask != null); var osr = new OrderStackRow { Symbol = symbol, RowColor = rowColour }; if (bid != null) { osr.BidClOrdID = bid.ClOrdID; osr.BidStatus = bid.Status.ToString(); osr.BidPrice = bid.Price.ToString(CultureInfo.CurrentUICulture); osr.BidQty = bid.Quantity.ToString(CultureInfo.CurrentUICulture); } if (ask != null) { osr.AskClOrdID = ask.ClOrdID; osr.AskStatus = ask.Status.ToString(); osr.AskPrice = ask.Price.ToString(CultureInfo.CurrentUICulture); osr.AskQty = ask.Quantity.ToString(CultureInfo.CurrentUICulture); } rows.Add(osr); } return rows; }
public void SellOrder(OrderStackRow osr) { Trade(osr, MarketSide.Ask); }
public void BuyOrder(OrderStackRow osr) { Trade(osr, MarketSide.Bid); }
private void Trade(OrderStackRow osr, MarketSide side) { if (osr == null) throw new ArgumentNullException("osr"); // The server currently does not support click trading, so we fake // it here by adding a matching order to the other side of the market. // If the server supported ImmediateOrCancel then we'd use that. var isBid = side == MarketSide.Bid; var matchingOrderDetails = new OrderRecord { ClOrdID = _clOrdIDGenerator.CreateClOrdID(), LastUpdateTime = DateTime.UtcNow, OrderID = string.Empty, // Set by server OrdType = OrderType.Limit, Price = decimal.Parse(isBid ? osr.BidPrice : osr.AskPrice), Quantity = decimal.Parse(isBid ? osr.BidQty : osr.AskQty), Side = isBid ? MarketSide.Ask : MarketSide.Bid, Symbol = osr.Symbol, Status = OrderStatus.New }; _serverFacade.CreateOrder(matchingOrderDetails); }