public void TestSaveHistoricalDataEmptyFolder()
        {
            var fn = string.Empty;

            _hist = new QuoteBasicFileStore(_exchange, _folder, _numBarsInFile);
            _hist.OnQuoteSaved += (object sender, string exch, string filename) =>
            {
                fn = filename;
            };

            var starttime = _timenow - 10000 * _interval;
            var q         = CreateQuote(starttime, 700);
            var r         = _hist.Save(q);

            Assert.IsTrue(r);

            Assert.IsTrue(fn == this.GetQuoteFileName(_symbol, _interval, 0));

            starttime = q.LastTime + _interval;
            q         = CreateQuote(starttime, 700);
            r         = _hist.Save(q);
            Assert.IsTrue(r);
            Assert.IsTrue(fn == this.GetQuoteFileName(_symbol, _interval, 0));

            starttime = q.LastTime - 100 * _interval;
            q         = CreateQuote(starttime, 700);
            r         = _hist.Save(q);
            Assert.IsTrue(r);
            Assert.IsTrue(fn == this.GetQuoteFileName(_symbol, _interval, 1));
            q = QuoteBasicExension.LoadFile(fn);
            Assert.IsTrue(q.Count == 599);
        }
        public void TestLoadHistoricalDataWithQuote()
        {
            _hist     = new QuoteBasicFileStore(_exchange, _folder, _numBarsInFile);
            _lasttime = _timenow - 10000 * _interval;

            //download 700 bars and save to first file
            var r     = _hist.Update(_moqDownload.Object, _symbol, _interval).Result;
            var quote = _hist.Load(_symbol, _interval, 0, 1000);

            Assert.IsTrue(quote != null && quote.Count == 700);

            //download 700 bars and save to first file
            r     = _hist.Update(_moqDownload.Object, _symbol, _interval).Result;
            quote = _hist.Load(_symbol, _interval, 0, 1000);
            Assert.IsTrue(quote != null && quote.Count == 1000);

            //download 700 bars and save to 2nd file
            r     = _hist.Update(_moqDownload.Object, _symbol, _interval).Result;
            quote = _hist.Load(_symbol, _interval, 0, 1000);
            Assert.IsTrue(quote != null && quote.Count == 700);

            //download 700 bars and save to 2nd file
            r     = _hist.Update(_moqDownload.Object, _symbol, _interval).Result;
            quote = _hist.Load(_symbol, _interval, 0, 1000);
            Assert.IsTrue(quote != null && quote.Count == 1000);
        }
        public void TestLoadHistoricalDataNoQuote()
        {
            _hist = new QuoteBasicFileStore(_exchange, _folder, _numBarsInFile);

            //since no quote in folder, null returned
            var quote = _hist.Load(_symbol, _interval, 0, 1000);

            Assert.IsTrue(quote == null);
        }
        public void Initialize()
        {
            if (Directory.Exists(_folder))
            {
                Directory.Delete(_folder, true);
            }
            Directory.CreateDirectory(_folder);

            _timenow = DateTime.UtcNow.GetUnixTimeFromUTC() / _interval * _interval;

            _moqDownload.Setup(d => d.Exchange).Returns(_exchange);
            _moqDownload.Setup(d => d.Download(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>())).Returns <string, int, int>((s, i, t) =>
            {
                //if (_count == 0)
                //    _lasttime = _timenow - _startInterval * _interval;
                if (_count < 0)
                {
                    return(Task.FromResult <IQuoteBasicBase>(null));
                }
                else
                {
                    ++_count;

                    //create quote file and save to folder
                    var q1 = new QuoteBasicBase(_symbol, _interval);
                    var ts = _lasttime + _interval;
                    for (int j = 0; j < 700; j++)
                    {
                        q1.AddUpdate(ts + j * _interval, 0, 0, 0, 0, 0);
                    }
                    _lasttime = q1.LastTime;

                    return(Task.FromResult <IQuoteBasicBase>(q1));
                }
            });



            _hist = new QuoteBasicFileStore(_exchange, _folder, _numBarsInFile);
        }
        public void TestUpdateHistoricalDataWithExistingQuoteFilesDownloadSuccess()
        {
            //create quote file and save to folder
            var filename = this.GetQuoteFileName(_symbol, _interval, 0);
            var q        = new QuoteBasicBase(_symbol, _interval) as IQuoteBasicBase;
            var ts1      = _timenow - 10000 * _interval;

            for (int j = 0; j < 700; j++)
            {
                q.AddUpdate(ts1 + j * _interval, 0, 0, 0, 0, 0);
            }
            q.SaveToFile(filename);

            _lasttime = q.LastTime + _interval;
            _hist     = new QuoteBasicFileStore(_exchange, _folder, _numBarsInFile);
            var fn = string.Empty;

            _hist.OnQuoteSaved += (object sender, string exch, string file) => fn = file;

            //append to the existing quote file
            var r = _hist.Update(_moqDownload.Object, _symbol, _interval).Result;

            Assert.IsTrue(r);
            Assert.IsTrue(fn == this.GetQuoteFileName(_symbol, _interval, 0));
            q = q.LoadFile(fn);
            Assert.IsTrue(q.Count == 1400);

            //since the number is larger than maxNumbars, a new file is created
            r = _hist.Update(_moqDownload.Object, _symbol, _interval).Result;
            Assert.IsTrue(r);
            Assert.IsTrue(fn == this.GetQuoteFileName(_symbol, _interval, 1));
            q = q.LoadFile(fn);
            Assert.IsTrue(q.Count == 700);

            r = _hist.Update(_moqDownload.Object, _symbol, _interval).Result;
            Assert.IsTrue(r);
            Assert.IsTrue(fn == this.GetQuoteFileName(_symbol, _interval, 1));
            q = q.LoadFile(fn);
            Assert.IsTrue(q.Count == 1400);
        }
 public void TestSaveHistoricalDataNull()
 {
     _hist = new QuoteBasicFileStore(_exchange, _folder, _numBarsInFile);
 }