Esempio n. 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");
        }
Esempio n. 2
0
        private void DoLoadQuotesFromTradeSharp(BackgroundWorkerTask taskParam)
        {
            var folder     = (string)taskParam.DataParam;
            var totalCount = Directory.GetFiles(folder, "*.quote").Count();
            var count      = 0;

            workerQuote.ReportProgress(0);
            foreach (var fileName in Directory.GetFiles(folder, "*.quote"))
            {
                var lastDate = GetFileLastDate(fileName);
                if (!lastDate.HasValue)
                {
                    continue;
                }

                var existFileName = fileName + ".temp";
                File.Move(fileName, existFileName);

                var ticker = Path.GetFileNameWithoutExtension(fileName).ToUpper();
                FileGapActualizator.FillGapsByTicker(ticker, lastDate.Value,
                                                     new List <GapInfo>
                {
                    new GapInfo
                    {
                        start  = lastDate.Value.AddMinutes(1),
                        end    = DateTime.Now,
                        status = GapInfo.GapStatus.Gap
                    }
                }, folder, workerQuote,
                                                     (s, list) => { });

                QuoteDownloader.Merge2Files(existFileName, fileName);

                workerQuote.ReportProgress(100 * (count++) / totalCount);
            }
        }