public void OrderQuantityIsCeiledToNearestMultipleOfLotSizeWhenShortOrderIsRounded() { //Initializes the transaction handler var transactionHandler = new BrokerageTransactionHandler(); transactionHandler.Initialize(_algorithm, new BacktestingBrokerage(_algorithm), new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[Ticker]; var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, -1600, 0, 0, DateTime.Now, ""); // Mock the the order processor var orderProcessorMock = new Mock<IOrderProcessor>(); orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny<int>())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act var orderTicket = transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); // -1600 after round off becomes -1000 Assert.AreEqual(-1000, orderTicket.Quantity); }
/// <summary> /// Get an instance of the transaction handler set by the task. /// </summary> /// <param name="algorithm">Algorithm instance</param> /// <param name="job">Algorithm job packet</param> /// <param name="brokerage">Brokerage instance to avoid access token duplication</param> /// <param name="results">Results array for sending order events.</param> /// <returns>Class matching ITransactionHandler interface</returns> private static ITransactionHandler GetTransactionHandler(IAlgorithm algorithm, IBrokerage brokerage, IResultHandler results, AlgorithmNodePacket job) { ITransactionHandler th; switch (job.TransactionEndpoint) { case TransactionHandlerEndpoint.Brokerage: th = new BrokerageTransactionHandler(algorithm, brokerage); Log.Trace("Engine.GetTransactionHandler(): Selected Brokerage Transaction Models."); break; //Operation from local files: default: th = new BacktestingTransactionHandler(algorithm, brokerage as BacktestingBrokerage); Log.Trace("Engine.GetTransactionHandler(): Selected Backtesting Transaction Models."); break; } return th; }
public void StopMarketOrderPriceIsRounded() { //Initializes the transaction handler var transactionHandler = new BrokerageTransactionHandler(); transactionHandler.Initialize(_algorithm, new BacktestingBrokerage(_algorithm), new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[Ticker]; var price = 1.12129m; security.SetMarketPrice(new Tick(DateTime.Now, security.Symbol, price, price, price)); var orderRequest = new SubmitOrderRequest(OrderType.StopMarket, security.Type, security.Symbol, 1600, 1.12131212m, 1.12131212m, DateTime.Now, ""); // Mock the the order processor var orderProcessorMock = new Mock<IOrderProcessor>(); orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny<int>())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act var orderTicket = transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); // 1600 after round off becomes 1000 Assert.AreEqual(1000, orderTicket.Quantity); // 1.12131212 after round becomes 1.12131 Assert.AreEqual(1.12131m, orderTicket.Get(OrderField.StopPrice)); }
public void OrderIsNotPlacedWhenOrderIsLowerThanLotSize() { //Initializes the transaction handler var transactionHandler = new BrokerageTransactionHandler(); transactionHandler.Initialize(_algorithm, new BacktestingBrokerage(_algorithm), new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[Ticker]; var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 600, 0, 0, DateTime.Now, ""); // Mock the the order processor var orderProcessorMock = new Mock<IOrderProcessor>(); orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny<int>())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act var orderTicket = transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); transactionHandler.HandleOrderRequest(orderRequest); // 600 after round off becomes 0 -> order is not placed Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsError); Assert.IsTrue(orderTicket.Status == OrderStatus.Invalid); }