Exemple #1
0
        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));
        }
Exemple #2
0
        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));
        }