Example #1
0
        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);
        }
Example #2
0
        /// <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));
        }
Example #5
0
        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);
        }
Example #6
0
        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]);
        }