internal void GivenTickDataRequest_WithNoTicks_ReturnsQueryFailedMessage() { // Arrange var provider = new TickProvider( this.container, this.messagingAdapter, this.repository, this.tickSerializer, new TradeTickSerializer()); provider.Start().Wait(); var symbol = new Symbol("AUD/USD", new Venue("FXCM")); var query = new Dictionary <string, string> { { "DataType", "Tick[]" }, { "Symbol", symbol.Value }, { "FromDateTime", StubZonedDateTime.UnixEpoch().ToIso8601String() }, { "ToDateTime", StubZonedDateTime.UnixEpoch().ToIso8601String() }, { "Limit", "0" }, }; var request = new DataRequest( query, Guid.NewGuid(), StubZonedDateTime.UnixEpoch()); // Act var response = (QueryFailure)provider.FindData(request); // Assert Assert.Equal(typeof(QueryFailure), response.Type); }
/// <summary> /// Convert numbers to spark chart strings. /// </summary> /// <param name="data">List or Array of numbers</param> /// <returns>empty string if <paramref name="data"/>is <code>null</code> or empty.</returns> public static string Render(IList <double> data) { var ticks = TickProvider.Ticks; if (data == null || data.Count == 0) { return(string.Empty); } char[] res = new char[data.Count()]; double min = data.Min(); double max = data.Max(); double step = (max - min) / (ticks.Length - 1); if (step.Equals(0d)) { step = 1; } for (var i = 0; i < data.Count(); i++) { var val = data[i]; double d = (val - min) / step; // if it's 10^-10 close to its rounded, round; floor otherwise int tick = (int)((Math.Abs(Math.Round(d) - d) < 1e-10) ? Math.Round(d) : Math.Floor((val - min) / step)); res[i] = ticks[tick]; } return(TickProvider.Assemble(res)); }
private void TestAdd(TickProvider provider) { Assert.AreEqual(200, provider.AddTicks(100, 100)); Assert.AreEqual(900, provider.AddTicks(1000, -100)); long tickStart = provider.GetMaxTick() - 1000; Assert.AreEqual(1000, provider.AddTicks(tickStart, 2001)); }
private void TestElapsed(TickProvider provider) { Assert.AreEqual(100, provider.GetElapsedTicks(100, 200)); Assert.AreEqual(-100, provider.GetElapsedTicks(200, 100)); long tickStart = provider.GetMaxTick() - 1000; long tickStop = 1000; Assert.AreEqual(2001, provider.GetElapsedTicks(tickStart, tickStop)); }
public ISyncTickProvider GetTickProvider(SdataContext context) { ISyncTickProvider tickProvider; string connectionString = ConnStringFactory.GetConnectionString(context); if (!ContextStoreResolver.TryResolve <ISyncTickProvider>(context, out tickProvider)) { IJetConnectionProvider connectionProvider = new SimpleJetConnectionProvider(connectionString); tickProvider = new TickProvider(connectionProvider, context); ContextStoreResolver.Register <ISyncTickProvider>(context, tickProvider); } return(tickProvider); }
internal void GivenTickDataRequest_WithTicks_ReturnsValidTickDataResponse() { // Arrange var provider = new TickProvider( this.container, this.messagingAdapter, this.repository, this.tickSerializer, new TradeTickSerializer()); provider.Start().Wait(); var datetimeFrom = StubZonedDateTime.UnixEpoch() + Duration.FromMinutes(1); var datetimeTo = datetimeFrom + Duration.FromMinutes(1); var symbol = new Symbol("AUD/USD", new Venue("FXCM")); var tick1 = new QuoteTick( symbol, Price.Create(1.00000m), Price.Create(1.00000m), Quantity.One(), Quantity.One(), datetimeFrom); var tick2 = new QuoteTick( symbol, Price.Create(1.00010m), Price.Create(1.00020m), Quantity.One(), Quantity.One(), datetimeTo); this.repository.Ingest(tick1); this.repository.Ingest(tick2); var query = new Dictionary <string, string> { { "DataType", "QuoteTick[]" }, { "Symbol", symbol.Value }, { "FromDateTime", StubZonedDateTime.UnixEpoch().ToIso8601String() }, { "ToDateTime", StubZonedDateTime.UnixEpoch().ToIso8601String() }, { "Limit", "0" }, }; var request = new DataRequest( query, Guid.NewGuid(), StubZonedDateTime.UnixEpoch()); // Act var response = (DataResponse)provider.FindData(request); var ticks = this.tickSerializer.DeserializeBlob(response.Data); // Assert Assert.Equal(typeof(DataResponse), response.Type); Assert.Equal(2, ticks.Length); Assert.Equal(tick1, ticks[0]); Assert.Equal(tick2, ticks[1]); }