public void WhenPriceGoesUpAndThenDownThenTakesTheMinimumSustainedIncrease() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 1.5M }; stopLossManager.Consume(priceUpdated); priceUpdated = new PriceUpdated { Price = 1.2M }; stopLossManager.Consume(priceUpdated); bus.Clear(); priceUpdated = new PriceUpdated { Price = 1.5M }; var sendToMeInX = new SendToMeInX <PriceUpdated>(10.0M, priceUpdated); stopLossManager.Consume(sendToMeInX); var targetUpdated = bus.GetLastMessage <TargetUpdated>(); Assert.NotNull(targetUpdated); Assert.Equal(targetUpdated.TargetPrice, 1.1M); }
public void WhenPriceGoesDownAndIsNotSustainedForLongerThan7SecondsThenDoesntTriggerStopLoss() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 0.89M }; stopLossManager.Consume(priceUpdated); var priceUpdated2 = new PriceUpdated { Price = 0.91M }; stopLossManager.Consume(priceUpdated2); var sendToMeInX = new SendToMeInX <PriceUpdated>(7.0M, priceUpdated); stopLossManager.Consume(sendToMeInX); var stopLossTriggered = bus.GetLastMessage <StopLossTriggered>(); Assert.Null(stopLossTriggered); }
public void WhenPriceUpdatedAfterThresholdThenTargetUpdatedWithNewPriceWithoutObsoletePricesAffectingIt() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 1.0M }; stopLossManager.Consume(priceUpdated); var priceUpdated2 = new PriceUpdated { Price = 1.2M }; stopLossManager.Consume(priceUpdated2); bus.Clear(); stopLossManager.Consume(new SendToMeInX <PriceUpdated>(10.0M, priceUpdated)); stopLossManager.Consume(new SendToMeInX <PriceUpdated>(10.0M, priceUpdated2)); var targetUpdated = bus.GetLastMessage <TargetUpdated>(); Assert.NotNull(targetUpdated); Assert.Equal(targetUpdated.TargetPrice, 1.1M); }
public void AfterSellingDoesntSellAgain() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 0.89M }; stopLossManager.Consume(priceUpdated); var priceUpdated2 = new PriceUpdated { Price = 0.5M }; stopLossManager.Consume(priceUpdated); stopLossManager.Consume(new SendToMeInX <PriceUpdated>(7.0M, priceUpdated)); bus.Clear(); stopLossManager.Consume(new SendToMeInX <PriceUpdated>(7.0M, priceUpdated2)); var stopLossTriggered = bus.GetLastMessage <StopLossTriggered>(); Assert.Null(stopLossTriggered); }
public void WhenPriceUpdatedWithinTenSecondsThenRaisesTwoSendInX() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 1.5M }; stopLossManager.Consume(priceUpdated); var events = bus.GetMessages().OfType <SendToMeInX <PriceUpdated> >().ToArray(); Assert.Equal(events.Length, 2); var sendToMeInX1 = events.First(); var sendToMeInX2 = events.Last(); Assert.NotNull(sendToMeInX1); Assert.Equal(sendToMeInX1.Message, priceUpdated); Assert.Equal(sendToMeInX1.X, 10.0M); Assert.NotNull(sendToMeInX2); Assert.Equal(sendToMeInX2.Message, priceUpdated); Assert.Equal(sendToMeInX2.X, 7.0M); }
public void WhenPriceNotSustainedForLongerThan10SecondsThenTargetNotUpdated() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 0.8M }; stopLossManager.Consume(priceUpdated); bus.Clear(); priceUpdated = new PriceUpdated { Price = 1.5M }; var sendToMeInX = new SendToMeInX <PriceUpdated>(10.0M, priceUpdated); stopLossManager.Consume(sendToMeInX); var targetUpdated = bus.GetLastMessage <TargetUpdated>(); Assert.Null(targetUpdated); }
public void WhenPositionAcquiredThenTargetUpdated() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var events = bus.GetMessages(); var targetUpdated = events.First() as TargetUpdated; Assert.That(targetUpdated, Is.Not.Null, "Should be TargetUpdated"); Assert.That(targetUpdated.TargetPrice, Is.EqualTo(0.9M)); }
public void WhenPositionAcquiredThenTargetUpdated() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var events = bus.GetMessages(); var targetUpdated = events.First() as TargetUpdated; Assert.That(targetUpdated, Is.Not.Null, "Should be TargetUpdated"); Assert.That(targetUpdated.TargetPrice, Is.EqualTo(0.9M)); }
public void WhenPositionAcquiredThenTargetUpdated() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var events = bus.GetMessages(); var targetUpdated = events.First() as TargetUpdated; Assert.NotNull(targetUpdated); Assert.Equal(targetUpdated.TargetPrice, 0.9M); }
public void AquirePosition(PositionAcquired newPosition) { if (newPosition == null) { throw new ArgumentNullException("newPosition"); } if (newPosition.Price <= 0) { throw new ArgumentException("Price must be > 0 (zero)", "newPosition"); } _state = _stateProvider.CalculateState(newPosition.Price, newPosition.Price); }
public void WhenPriceSustainedForLongerThan10SecondsThenTargetUpdated() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 1.5M }; stopLossManager.Consume(priceUpdated); var sendToMeInX = new SendToMeInX<PriceUpdated>(10.0M, priceUpdated); stopLossManager.Consume(sendToMeInX); var targetUpdated = bus.GetLastMessage<TargetUpdated>(); Assert.That(targetUpdated, Is.Not.Null); Assert.That(targetUpdated.TargetPrice, Is.EqualTo(1.4M)); }
public void Handle(PositionAcquired message) { _price10SecondWindow.Add(message.Price); _price13SecondWindow.Add(message.Price); UpdateStopLossPrice(); _publisher.Publish(new SendToMeIn { DelayInSeconds = 10, Inner = new RemoveFrom10SecondWindow { Price = message.Price } }); _publisher.Publish(new SendToMeIn { DelayInSeconds = 13, Inner = new RemoveFrom13SecondWindow { Price = message.Price } }); }
public void WhenPriceSustainedForLongerThan10SecondsThenTargetUpdated() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 1.5M }; stopLossManager.Consume(priceUpdated); var sendToMeInX = new SendToMeInX <PriceUpdated>(10.0M, priceUpdated); stopLossManager.Consume(sendToMeInX); var targetUpdated = bus.GetLastMessage <TargetUpdated>(); Assert.That(targetUpdated, Is.Not.Null); Assert.That(targetUpdated.TargetPrice, Is.EqualTo(1.4M)); }
public void Handle(PositionAcquired message) { _possibleStopLossPrices.Add(message.Price); _currentPrices.Add(message.Price); UpdateStopLossPrice(); _publisher.Publish(new StopLossPriceUpdated { Price = _currentStopLossPrice }); _publisher.Publish(new SendMessageIn { MessageToSend = new PriceExpiredFromStopLossWindow { Price = message.Price } }); _publisher.Publish(new SendMessageIn { MessageToSend = new PriceExpiredFromStopLossHitWindow { Price = message.Price } }); }
public void WhenPriceUpdatedWithinTenSecondsThenRaisesTwoSendInX() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated {Price = 1.5M}; stopLossManager.Consume(priceUpdated); var events = bus.GetMessages().OfType<SendToMeInX<PriceUpdated>>().ToArray(); Assert.That(events, Has.Length.EqualTo(2)); var sendToMeInX1 = events.First(); var sendToMeInX2 = events.Last(); Assert.That(sendToMeInX1, Is.Not.Null); Assert.That(sendToMeInX1.Message, Is.EqualTo(priceUpdated)); Assert.That(sendToMeInX1.X, Is.EqualTo(10.0M)); Assert.That(sendToMeInX2, Is.Not.Null); Assert.That(sendToMeInX2.Message, Is.EqualTo(priceUpdated)); Assert.That(sendToMeInX2.X, Is.EqualTo(7.0M)); }
public void WhenPriceGoesUpAndThenDownThenTakesTheMinimumSustainedIncrease() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 1.5M }; stopLossManager.Consume(priceUpdated); priceUpdated = new PriceUpdated { Price = 1.2M }; stopLossManager.Consume(priceUpdated); bus.Clear(); priceUpdated = new PriceUpdated { Price = 1.5M }; var sendToMeInX = new SendToMeInX<PriceUpdated>(10.0M, priceUpdated); stopLossManager.Consume(sendToMeInX); var targetUpdated = bus.GetLastMessage<TargetUpdated>(); Assert.That(targetUpdated, Is.Not.Null); Assert.That(targetUpdated.TargetPrice, Is.EqualTo(1.1M)); }
public void WhenPriceGoesDownAndIsNotSustainedForLongerThan7SecondsThenDoesntTriggerStopLoss() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 0.89M }; stopLossManager.Consume(priceUpdated); var priceUpdated2 = new PriceUpdated { Price = 0.91M }; stopLossManager.Consume(priceUpdated2); var sendToMeInX = new SendToMeInX<PriceUpdated>(7.0M, priceUpdated); stopLossManager.Consume(sendToMeInX); var stopLossTriggered = bus.GetLastMessage<StopLossTriggered>(); Assert.That(stopLossTriggered, Is.Null); }
public void WhenPriceUpdatedAfterThresholdThenTargetUpdatedWithNewPriceWithoutObsoletePricesAffectingIt() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 1.0M }; stopLossManager.Consume(priceUpdated); var priceUpdated2 = new PriceUpdated { Price = 1.2M }; stopLossManager.Consume(priceUpdated2); bus.Clear(); stopLossManager.Consume(new SendToMeInX<PriceUpdated>(10.0M, priceUpdated)); stopLossManager.Consume(new SendToMeInX<PriceUpdated>(10.0M, priceUpdated2)); var targetUpdated = bus.GetLastMessage<TargetUpdated>(); Assert.That(targetUpdated, Is.Not.Null); Assert.That(targetUpdated.TargetPrice, Is.EqualTo(1.1M)); }
public void AfterSellingDoesntSellAgain() { var positionAcquired = new PositionAcquired(1.0M); stopLossManager.Consume(positionAcquired); var priceUpdated = new PriceUpdated { Price = 0.89M }; stopLossManager.Consume(priceUpdated); var priceUpdated2 = new PriceUpdated { Price = 0.5M }; stopLossManager.Consume(priceUpdated); stopLossManager.Consume(new SendToMeInX<PriceUpdated>(7.0M, priceUpdated)); bus.Clear(); stopLossManager.Consume(new SendToMeInX<PriceUpdated>(7.0M, priceUpdated2)); var stopLossTriggered = bus.GetLastMessage<StopLossTriggered>(); Assert.That(stopLossTriggered, Is.Null); }