public void When_low_price_is_not_sustained_below_trigger_we_do_nothing() { var bus = new FakeBus(); var processManager = new StoplossProcess(bus); processManager.Handle(new PositionAcquired { Price = 1, Symbol = "ABC" }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 0.89m }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 0.90m }); var first = (WakeMeUpIn15Seconds)bus.PublishedMessages.First(); bus.PublishedMessages.Clear(); processManager.Handle((ShouldWeSell)first.Message); Assert.That(bus.SentMessages.Count, Is.EqualTo(0)); }
public void When_high_price_is_not_sustained_trigger_stays_the_same() { var bus = new FakeBus(); var processManager = new StoplossProcess(bus); processManager.Handle(new PositionAcquired { Price = 1, Symbol = "ABC" }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.01m }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 0.99m }); var fisrt = (WakeMeUpIn15Seconds)bus.PublishedMessages[0]; var second = (WakeMeUpIn20Seconds)bus.PublishedMessages[1]; bus.PublishedMessages.Clear(); processManager.Handle((ShouldWeSell)fisrt.Message); processManager.Handle((ShouldWeMoveTriggerPrice)second.Message); Assert.That(bus.PublishedMessages.Count, Is.EqualTo(0)); }
public void When_high_price_is_sustained_with_a_dip_trigger_value_goes_up() { var bus = new FakeBus(); var processManager = new StoplossProcess(bus); processManager.Handle(new PositionAcquired { Price = 1, Symbol = "ABC" }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.1m }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.2m }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.15m }); var fisrt = (WakeMeUpIn15Seconds)bus.PublishedMessages[0]; var second = (WakeMeUpIn20Seconds)bus.PublishedMessages[1]; bus.PublishedMessages.Clear(); processManager.Handle((ShouldWeSell)fisrt.Message); processManager.Handle((ShouldWeMoveTriggerPrice)second.Message); Assert.That(bus.PublishedMessages.Count, Is.EqualTo(1)); var triggerValueRaised = (TriggerValueRaised)bus.PublishedMessages[0]; Assert.That(triggerValueRaised.TriggerValue, Is.EqualTo(1.0m)); }
public void When_value_many_dips_occur_only_lastsustained_price_isaccounted_for() { var bus = new FakeBus(); var processManager = new StoplossProcess(bus); processManager.Handle(new PositionAcquired { Price = 1, Symbol = "ABC" }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.1m }); //this price holds processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.2m }); //does not hold processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.15m }); //holds processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.25m }); //holds processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.30m }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.27m }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 1.27m }); var wakeMeUpIn20Secondses = bus.PublishedMessages.OfType<WakeMeUpIn20Seconds>().Take(4).ToArray(); bus.PublishedMessages.Clear(); //processManager.Handle((ShouldWeSell)fisrt.Message); foreach (var wakeMeUpIn20Seconds in wakeMeUpIn20Secondses) { processManager.Handle((ShouldWeMoveTriggerPrice)wakeMeUpIn20Seconds.Message); } Assert.That(bus.PublishedMessages.Count, Is.EqualTo(3)); var triggerValueRaised = (TriggerValueRaised)bus.PublishedMessages[0]; Assert.That(triggerValueRaised.TriggerValue, Is.EqualTo(1m)); var triggerValueRaised2 = (TriggerValueRaised)bus.PublishedMessages[1]; Assert.That(triggerValueRaised2.TriggerValue, Is.EqualTo(1.05m)); var triggerValueRaised3 = (TriggerValueRaised)bus.PublishedMessages[2]; Assert.That(triggerValueRaised3.TriggerValue, Is.EqualTo(1.15m)); }
public void When_position_is_acquired() { var bus = new FakeBus(); var processManager = new StoplossProcess(bus); processManager.Handle(new PositionAcquired { Price = 15, Symbol = "ABC" }); Assert.That(bus.PublishedMessages.Count, Is.EqualTo(0)); }
public void When_low_price_is_sustained_with_a_small_spike_still_sells() { var bus = new FakeBus(); var processManager = new StoplossProcess(bus); processManager.Handle(new PositionAcquired { Price = 1, Symbol = "ABC" }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 0.89m }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 0.8m }); processManager.Handle(new PriceChanged { Symbol = "ABC", Price = 0.85m }); var fisrt = (WakeMeUpIn15Seconds)bus.PublishedMessages[0]; var second = (WakeMeUpIn15Seconds)bus.PublishedMessages[1]; bus.PublishedMessages.Clear(); processManager.Handle((ShouldWeSell)fisrt.Message); processManager.Handle((ShouldWeSell)second.Message); Assert.That(bus.SentMessages.Count, Is.EqualTo(1)); var sellPosition = (SellPosition)bus.SentMessages[0]; Assert.That(sellPosition.Price, Is.EqualTo(0.89m)); }