public void TestOrderCanceledTriggeredAfterNotSendingOrder() { var orderCreator = new OrderCreator(); var manager = new StrategyManager(orderCreator); using var monitoredManager = manager.Monitor(); orderCreator.Limit(new SOrderParameters()).Send(20); manager.TriggerOrders(new Bar() { Low = 21 }); orderCreator.Limit(new SOrderParameters()).Send(20); manager.TriggerOrders(new Bar() { Low = 22 }); monitoredManager.Should() .Raise("OrderValidated") .WithArgs <OrderInfo>(info => info.Price == 20) .OnlyOnce(); monitoredManager.Should().NotRaise("OrderCanceled"); Assert.Equal(0, manager.StrategyInfo.MarketPosition); // If we don't send the order again, it should be canceled manager.TriggerOrders(new Bar() { Low = 23 }); monitoredManager.Should().Raise("OrderCanceled"); Assert.Equal(0, manager.StrategyInfo.MarketPosition); }
public void TestOrderValidatedTriggeredAgain() { var orderCreator = new OrderCreator(); var manager = new StrategyManager(orderCreator); using var monitoredManager = manager.Monitor(); orderCreator.Limit(new SOrderParameters()).Send(20); manager.TriggerOrders(new Bar() { Low = 19 }); Assert.Equal(100, manager.StrategyInfo.MarketPosition); monitoredManager.Should() .Raise("OrderValidated") .WithArgs <OrderInfo>(info => info.Price == 20) .OnlyOnce() .Reset(); // The same order is allowed to be sent again after being filled orderCreator.Limit(new SOrderParameters()).Send(20); monitoredManager.Should() .Raise("OrderValidated") .WithArgs <OrderInfo>(info => info.Price == 20) .OnlyOnce(); }
public void TestOrderValidatedTriggeredOnlyOnce() { var orderCreator = new OrderCreator(); var manager = new StrategyManager(orderCreator); using var monitoredManager = manager.Monitor(); orderCreator.Limit(new SOrderParameters()).Send(20); orderCreator.Limit(new SOrderParameters()).Send(20); monitoredManager.Should() .Raise("OrderValidated") .WithArgs <OrderInfo>(info => info.Price == 20) .OnlyOnce(); }
public void TestLimitOrderNotTriggeredImmediately() { var orderCreator = new OrderCreator(); var manager = new StrategyManager(orderCreator); orderCreator.Limit(new SOrderParameters(EOrderAction.Buy)).Send(40); Assert.Equal(0, manager.StrategyInfo.MarketPosition); }
public void TestLimitBuyOrderTriggered() { var orderCreator = new OrderCreator(); var manager = new StrategyManager(orderCreator); orderCreator.Limit(new SOrderParameters(EOrderAction.Buy)).Send(40); manager.TriggerOrders(new Bar() { Low = 39 }); Assert.Equal(100, manager.StrategyInfo.MarketPosition); }
public void TestLimitSellOrderTriggered() { var orderCreator = new OrderCreator(); var manager = new StrategyManager(orderCreator); orderCreator.Limit(new SOrderParameters(EOrderAction.SellShort)).Send(40); manager.TriggerOrders(new Bar() { High = 41 }); Assert.Equal(-100, manager.StrategyInfo.MarketPosition); }
public void TestLimit() { var orderCreator = new OrderCreator(); using var monitoredOrderCreator = orderCreator.Monitor(); var order = orderCreator.Limit(new SOrderParameters(EOrderAction.Buy)); order.Send(15); monitoredOrderCreator .Should().Raise("OrderSent") .WithArgs <OrderInfo>(info => info.Order == order) .WithArgs <OrderInfo>(info => info.Price == 15) .WithArgs <OrderInfo>(info => info.OrderAction == EOrderAction.Buy) .WithArgs <OrderInfo>(info => info.Size == 100); }