private TradeResult PlacePendingOrder(PendingOrderParameters parameters) { double price = parameters.Symbol.GetPrice(parameters.TradeType); bool isPriceValid = true; switch (parameters.OrderType) { case OrderType.Limit: isPriceValid = parameters.TradeType == TradeType.Buy ? parameters.TargetPrice <price : parameters.TargetPrice> price; break; case OrderType.Stop: isPriceValid = parameters.TradeType == TradeType.Buy ? parameters.TargetPrice > price : parameters.TargetPrice < price; break; } if (isPriceValid) { var order = new PendingOrder(parameters, Server.CurrentTime); AddOrder(order); return(new TradeResult(order)); } return(new TradeResult(OrderErrorCode.InvalidTargetPrice)); }
public void CancelPendingOrderTest() { (_symbol as OhlcSymbol).PublishBar(new Bar(DateTimeOffset.Now, 1, 1, 1, 1.5, 1000)); var orderParameters = new PendingOrderParameters(OrderType.Limit, _symbol) { Volume = 1000, TargetPrice = 1, TradeType = TradeType.Buy, StopLossPrice = .95, TakeProfitPrice = 1.05, }; var result = _tradeEngine.Execute(orderParameters); Assert.IsTrue(result.IsSuccessful); Assert.IsTrue(_tradeEngine.Orders.Contains(result.Order)); _tradeEngine.CancelPendingOrder(result.Order as PendingOrder); Assert.IsTrue(!_tradeEngine.Orders.Contains(result.Order)); }