public void AccountPositionModificationUpdatesPM() { var accountPositionService = new MockAccountPositionService(); var marketFeedService = new MockMarketFeedService(); marketFeedService.SetPrice("FUND0", 20.00m); accountPositionService.AddPosition("FUND0", 150.00m, 100); ObservablePosition position = new ObservablePosition(accountPositionService, marketFeedService, CreateEventAggregator()); bool itemUpdated = false; position.Items.First(p => p.TickerSymbol == "FUND0").PropertyChanged += delegate { itemUpdated = true; }; AccountPosition accountPosition = accountPositionService.GetAccountPositions().First <AccountPosition>(p => p.TickerSymbol == "FUND0"); accountPosition.Shares += 11; accountPosition.CostBasis = 25.00m; Assert.IsTrue(itemUpdated); Assert.AreEqual(111, position.Items.First(p => p.TickerSymbol == "FUND0").Shares); Assert.AreEqual(25.00m, position.Items.First(p => p.TickerSymbol == "FUND0").CostBasis); }
public void MarketUpdatesPositionUpdatesButCollectionDoesNot() { var accountPositionService = new MockAccountPositionService(); var marketFeedService = new MockMarketFeedService(); var eventAggregator = CreateEventAggregator(); var marketPricesUpdatedEvent = eventAggregator.GetEvent <MarketPricesUpdatedEvent>() as MockMarketPricesUpdatedEvent; marketFeedService.SetPrice("FUND1", 20.00m); accountPositionService.AddPosition("FUND1", 15.00m, 100); ObservablePosition position = new ObservablePosition(accountPositionService, marketFeedService, eventAggregator); bool itemsCollectionUpdated = false; position.Items.CollectionChanged += delegate { itemsCollectionUpdated = true; }; bool itemUpdated = false; position.Items.First(p => p.TickerSymbol == "FUND1").PropertyChanged += delegate { itemUpdated = true; }; marketPricesUpdatedEvent.SubscribeArgumentAction(new Dictionary <string, decimal> { { "FUND1", 50m } }); Assert.IsFalse(itemsCollectionUpdated); Assert.IsTrue(itemUpdated); }
public void GeneratesModelFromPositionAndMarketFeeds() { var accountPositionService = new MockAccountPositionService(); var marketFeedService = new MockMarketFeedService(); accountPositionService.AddPosition(new AccountPosition("FUND0", 300m, 1000)); accountPositionService.AddPosition(new AccountPosition("FUND1", 200m, 100)); marketFeedService.SetPrice("FUND0", 30.00m); marketFeedService.SetPrice("FUND1", 20.00m); ObservablePosition position = new ObservablePosition(accountPositionService, marketFeedService, CreateEventAggregator()); Assert.AreEqual <decimal>(30.00m, position.Items.First(x => x.TickerSymbol == "FUND0").CurrentPrice); Assert.AreEqual <long>(1000, position.Items.First(x => x.TickerSymbol == "FUND0").Shares); Assert.AreEqual <decimal>(20.00m, position.Items.First(x => x.TickerSymbol == "FUND1").CurrentPrice); Assert.AreEqual <long>(100, position.Items.First(x => x.TickerSymbol == "FUND1").Shares); }
/// <inheritdoc /> public override void Start() { base.Start(); var observablePosition = new ObservablePosition() { ToggleEnabledKey = Keys.D1, IsEnabled = true, }; var camera = this.SceneSystem.SceneInstance.RootScene.Entities.First(entity => entity.Name == "Camera"); camera.Add(observablePosition); ////camera.Transform.Position += new Vector3(0, 0, 0); camera.Transform.Position += new Vector3(0, 256, 0); this.stage = new InterestStage <ChunkKey, bool, Entity>( Factory.From((ChunkKey key) => new Entity()), SingleInterest.Merger); ////var meshFactory = StreamingStageMeshFactory.CreateCubes(); ////var meshFactory = StreamingStageMeshFactory.CreateCubeOutlines(); ////var meshFactory = StreamingStageMeshFactory.CreateNoise(); var meshFactory = StreamingStageMeshFactory.CreateSkyIsland(); var viewDiameter = meshFactory.ChunkLength * ViewDiameterInChunks; var converter = new TwoWayTypeConverter <Index3D, ChunkKey>( index => new ChunkKey(index), key => key.Index); AreaOfInterest.CreateCenteredSpiral( new ConverterInterestMap <ChunkKey, Index3D, bool>(this.stage.Interests, converter), true, observablePosition.PositionChanged.ToMono(), new SphereMask <bool>(viewDiameter), meshFactory.ChunkLength); var stageEntity = new Entity("Stage"); stageEntity.Add(new StreamingChunkGeneratorScript(this.stage.Chunks, meshFactory)); this.SceneSystem.SceneInstance.RootScene.Entities.Add(stageEntity); }
public void ShouldUpdateDataWithMarketUpdates() { var accountPositionService = new MockAccountPositionService(); var marketFeedService = new MockMarketFeedService(); var eventAggregator = CreateEventAggregator(); var marketPricesUpdatedEvent = eventAggregator.GetEvent <MarketPricesUpdatedEvent>() as MockMarketPricesUpdatedEvent; marketFeedService.SetPrice("FUND0", 30.00m); accountPositionService.AddPosition("FUND0", 25.00m, 1000); marketFeedService.SetPrice("FUND1", 20.00m); accountPositionService.AddPosition("FUND1", 15.00m, 100); ObservablePosition position = new ObservablePosition(accountPositionService, marketFeedService, eventAggregator); var updatedPriceList = new Dictionary <string, decimal> { { "FUND0", 50.00m } }; Assert.IsNotNull(marketPricesUpdatedEvent.SubscribeArgumentAction); Assert.AreEqual(ThreadOption.UIThread, marketPricesUpdatedEvent.SubscribeArgumentThreadOption); marketPricesUpdatedEvent.SubscribeArgumentAction(updatedPriceList); Assert.AreEqual <decimal>(50.00m, position.Items.First(x => x.TickerSymbol == "FUND0").CurrentPrice); }