Beispiel #1
0
        public void TestLoadQuotesFromServer()
        {
            GapMap.Instance.Clear();
            // найти в истории гэпы
            var gaps = FileGapActualizator.VerifyTickerHistory(Ticker, timeHistStart, quoteFolder, null, timeNow);

            Assert.NotNull(gaps, "VerifyHistory: gaps is not null");
            Assert.Greater(gaps.Count, 0, "VerifyHistory: gaps is not empty");

            // подкачать котировки
            FileGapActualizator.FillGapsByTicker(Ticker, timeHistStart, gaps, quoteFolder, null,
                                                 (s, list) => {});
            // сравнить количество свечек "на клиенте" и "на сервере"
            var clientCandles = AtomCandleStorage.Instance.GetAllMinuteCandles(Ticker);

            Assert.Greater(clientCandles.Count, 0, "VerifyHistory: client candles are loaded");

            var serverCandlesPacked = QuoteStorage.Instance.proxy.GetMinuteCandlesPacked(Ticker, timeHistStart, DateTime.Now);
            var serverCandles       = serverCandlesPacked.GetCandles();
            var lastServerTime      = serverCandles[serverCandles.Count - 1].timeOpen;
            var lastClientTime      = clientCandles[clientCandles.Count - 1].timeOpen;

            Assert.AreEqual(lastServerTime, lastClientTime, "VerifyHistory: last candle is loaded");

            // убедиться в том, что дырок больше нет
            var gapsNew = FileGapActualizator.VerifyTickerHistory(Ticker, timeHistStart, quoteFolder, null, timeNow);
            var gapsNewThatIsNotOnServer = gapsNew.Count(g => !serverGaps.Any(sg => sg.AreEqual(g.start, g.end)));

            Assert.AreEqual(0, gapsNewThatIsNotOnServer, "VerifyHistory: no gaps left");

            // нет повторяющихся свечей
            var hasDouble = false;

            for (var i = 1; i < clientCandles.Count; i++)
            {
                if (clientCandles[i].timeOpen <= clientCandles[i - 1].timeOpen)
                {
                    hasDouble = true;
                    break;
                }
            }
            Assert.AreEqual(false, hasDouble, "VerifyHistory: no doubled candles");

            // повторно подкачать гэпы - убедиться, что новых обращений к серверу не было,
            // ибо вся необходимая история серверных гэпов сохранена
            FileGapActualizator.FillGapsByTicker(Ticker, timeHistStart, gapsNew, quoteFolder, null,
                                                 (s, list) =>
            {
                Assert.Fail("VerifyHistory: no redundant calls to server");
            });

            //moq.Verify(lw => lw.GetMinuteCandlesPacked(It.IsAny<string>(),
            //                                           It.IsAny<DateTime>(), It.IsAny<DateTime>()),
            //           Times.Exactly(gaps.Count), "VerifyHistory: no redundant calls to server");
        }
        private void VerifyTickerHistory(string ticker, DateTime timeStart)
        {
            var gaps = FileGapActualizator.VerifyTickerHistory(ticker, timeStart,
                                                               ExecutablePath.ExecPath + TerminalEnvironment.QuoteCacheFolder, worker);

            if (worker.CancellationPending)
            {
                return;
            }
            // обновить контрол
            UpdateControlSafe(ticker, gaps);
        }
Beispiel #3
0
        public void TestLoadQuotesFromServerFast()
        {
            var gaps = FileGapActualizator.VerifyTickerHistory(Ticker, timeHistStart, quoteFolder, null, timeNow);

            FileGapActualizator.FillGapsByTickerFast(Ticker, timeHistStart, timeNow, gaps, quoteFolder, null,
                                                     (s, list) =>
            {
                Console.WriteLine("--------------");
                foreach (var gap in list)
                {
                    Console.WriteLine("Gap progress: {0}", gap);
                }
            });

            // закачка в целом успешна
            var clientCandles = AtomCandleStorage.Instance.GetAllMinuteCandles(Ticker);

            Assert.Greater(clientCandles.Count, 0, "TestLoadQuotesFromServerFast: client candles not loaded");

            var serverCandlesPacked = QuoteStorage.Instance.proxy.GetMinuteCandlesPacked(Ticker, timeHistStart, DateTime.Now);
            var serverCandles       = serverCandlesPacked.GetCandles();
            var lastServerTime      = serverCandles[serverCandles.Count - 1].timeOpen;
            var lastClientTime      = clientCandles[clientCandles.Count - 1].timeOpen;

            Assert.AreEqual(lastServerTime, lastClientTime, "TestLoadQuotesFromServerFast: last candle not loaded");

            // сравнить количество свечек на клиенте и на сервере

            /*var maxIndex = Math.Min(clientCandles.Count, serverCandles.Count);
             * for (var index = 0; index < maxIndex; index++)
             * {
             *  Assert.AreEqual(clientCandles[index].timeOpen, serverCandles[index].timeOpen, "TestLoadQuotesFromServerFast: candles not equal");
             * }
             * Assert.GreaterOrEqual(clientCandles.Count, serverCandles.Count, "TestLoadQuotesFromServerFast: client candles lost");*/

            // убедиться в том, что дырок больше нет
            var gapsNew = FileGapActualizator.VerifyTickerHistory(Ticker, timeHistStart, quoteFolder, null, timeNow);
            var gapsNewThatIsNotOnServer = gapsNew.Count(g => !serverGaps.Any(sg => sg.AreEqual(g.start, g.end)));

            Assert.AreEqual(0, gapsNewThatIsNotOnServer, "TestLoadQuotesFromServerFast: gaps still found");

            // свечи упорядочены по возрастанию, дубликатов нет
            var hasDouble = false;

            for (var i = 1; i < clientCandles.Count; i++)
            {
                if (clientCandles[i].timeOpen <= clientCandles[i - 1].timeOpen)
                {
                    hasDouble = true;
                    break;
                }
            }
            Assert.AreEqual(false, hasDouble, "TestLoadQuotesFromServerFast: double candles found");

            // повторно подкачать гэпы - убедиться, что новых обращений к серверу не было
            FileGapActualizator.FillGapsByTickerFast(Ticker, timeHistStart, timeNow, gapsNew, quoteFolder, null,
                                                     (s, list) =>
            {
                Assert.Fail("VerifyHistory: redundant server call");
            });
        }