예제 #1
0
        public void TestGetIndex()
        {
            var ts = new TickSeries("test");
            for (int i = 0; i < 10; ++i)
                ts.Add(new Tick { DateTime = new DateTime(2000, 1, 1, 10, i, 30) });

            var firstDt = new DateTime(2000, 1, 1, 10, 3, 30);
            var firstTick = new Tick { DateTime = firstDt };
            var lastDt = new DateTime(2000, 1, 1, 10, 9, 30);
            var lastTick = new Tick { DateTime = lastDt };
            // DateTime is in the middle;
            Assert.Equal(3, ts.GetIndex(firstDt, IndexOption.Null));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 25), IndexOption.Null));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 30), IndexOption.Null));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 30), IndexOption.Prev));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 30), IndexOption.Next));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 25), IndexOption.Null));
            Assert.Equal(3, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 25), IndexOption.Prev));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 25), IndexOption.Next));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 40), IndexOption.Null));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 40), IndexOption.Prev));
            Assert.Equal(5, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 40), IndexOption.Next));
            // DateTime > LastDateTime
            Assert.Equal(5, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 40), IndexOption.Next));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 11, 30), IndexOption.Null));
            Assert.Equal(9, ts.GetIndex(new DateTime(2000, 1, 1, 10, 11, 30), IndexOption.Prev));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 11, 30), IndexOption.Next));
            // DateTime < FirstDateTime
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 9, 31, 30), IndexOption.Null));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 9, 31, 30), IndexOption.Prev));
            Assert.Equal(0, ts.GetIndex(new DateTime(2000, 1, 1, 9, 31, 30), IndexOption.Next));
        }
예제 #2
0
 public static BarSeries TimeCompress(this TickSeries series, long barSize, byte type = DataObjectType.Trade)
 {
     if (series.Count == 0)
     {
         return(new BarSeries());
     }
     return(TimeCompress(series, GetInstrument(series), barSize, type));
 }
예제 #3
0
 public static BarSeries TimeCompress(this TickSeries series, Instrument inst, long barSize, byte type = DataObjectType.Trade)
 {
     if (series.Count == 0)
     {
         return(new BarSeries());
     }
     return(Data.Compression.BarCompressor
            .GetCompressor(inst, 0, barSize)
            .Compress(new Data.Compression.TickDataEnumerator(series, type)));
 }
예제 #4
0
        public void OutputSeries(out IDataSeries trades, out IDataSeries bids, out IDataSeries asks)
        {
            trades = new TickSeries();
            bids   = new TickSeries();
            asks   = new TickSeries();

            PbTickCodec codec          = new PbTickCodec();
            int         TradingDay     = -1;
            int         _lastTradeSize = 0;

            foreach (var s in Series)
            {
                if (TradingDay != s.TradingDay)
                {
                    _lastTradeSize = 0;
                    TradingDay     = s.TradingDay;
                }
                var dateTime = codec.GetDateTime(s.ActionDay == 0 ? s.TradingDay : s.ActionDay).Add(codec.GetUpdateTime(s));
                var tick     = PbTick2DepthMarketDataNClass(codec, s);

                if (SubscribeExternData)
                {
                    var trade = new TradeEx(dateTime, 0, _InstrumentId, tick.LastPrice, (int)tick.Volume);
                    trade.Size           -= _lastTradeSize;
                    trade.DepthMarketData = tick;
                    trades.Add(trade);
                }
                else
                {
                    var trade = new Trade(dateTime, 0, _InstrumentId, tick.LastPrice, (int)tick.Volume);
                    trade.Size -= _lastTradeSize;
                    trades.Add(trade);
                }


                if (tick.Bids != null && tick.Bids.Length > 0)
                {
                    var bid = new Bid(dateTime, 0, _InstrumentId, tick.Bids[0].Price, tick.Bids[0].Size);
                    bids.Add(bid);
                }
                if (tick.Asks != null && tick.Asks.Length > 0)
                {
                    var ask = new Ask(dateTime, 0, _InstrumentId, tick.Asks[0].Price, tick.Asks[0].Size);
                    asks.Add(ask);
                }

                _lastTradeSize = (int)tick.Volume;
            }
        }
예제 #5
0
        public void ReadFile(int instrumentId, string path)
        {
            Bars   = new BarSeries();
            Trades = new TickSeries();
            Asks   = new TickSeries();
            Bids   = new TickSeries();

            PbTickSerializer pts = new PbTickSerializer();

            PbTick restore = null;

            using (Stream stream = File.OpenRead(path))
            {
                while (true)
                {
                    restore = pts.ReadOne(stream);
                    if (restore == null)
                    {
                        break;
                    }

                    Trade t = new Trade();
                    t.InstrumentId = instrumentId;
                    t.DateTime     = pts.Codec.GetActionDayDateTime(restore);
                    t.Price        = pts.Codec.GetLastPrice(restore);
                    t.Size         = (int)pts.Codec.GetVolume(restore);

                    Trades.Add(t);

                    Bid b = new Bid();
                    b.InstrumentId = instrumentId;
                    b.DateTime     = t.DateTime;
                    b.Price        = pts.Codec.GetBidPrice(restore, 1);
                    b.Size         = pts.Codec.GetBidSize(restore, 1);

                    Bids.Add(b);

                    Ask a = new Ask();
                    a.InstrumentId = instrumentId;
                    a.DateTime     = t.DateTime;
                    a.Price        = pts.Codec.GetAskPrice(restore, 1);
                    a.Size         = pts.Codec.GetAskSize(restore, 1);

                    Asks.Add(a);
                }
                stream.Close();
            }
        }
예제 #6
0
        public void TestGetIndex()
        {
            var ts = new TickSeries("test");

            for (int i = 0; i < 10; ++i)
            {
                ts.Add(new Tick {
                    DateTime = new DateTime(2000, 1, 1, 10, i, 30)
                });
            }

            var firstDt   = new DateTime(2000, 1, 1, 10, 3, 30);
            var firstTick = new Tick {
                DateTime = firstDt
            };
            var lastDt   = new DateTime(2000, 1, 1, 10, 9, 30);
            var lastTick = new Tick {
                DateTime = lastDt
            };

            // DateTime is in the middle;
            Assert.Equal(3, ts.GetIndex(firstDt, IndexOption.Null));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 25), IndexOption.Null));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 30), IndexOption.Null));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 30), IndexOption.Prev));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 30), IndexOption.Next));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 25), IndexOption.Null));
            Assert.Equal(3, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 25), IndexOption.Prev));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 25), IndexOption.Next));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 40), IndexOption.Null));
            Assert.Equal(4, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 40), IndexOption.Prev));
            Assert.Equal(5, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 40), IndexOption.Next));
            // DateTime > LastDateTime
            Assert.Equal(5, ts.GetIndex(new DateTime(2000, 1, 1, 10, 4, 40), IndexOption.Next));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 11, 30), IndexOption.Null));
            Assert.Equal(9, ts.GetIndex(new DateTime(2000, 1, 1, 10, 11, 30), IndexOption.Prev));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 10, 11, 30), IndexOption.Next));
            // DateTime < FirstDateTime
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 9, 31, 30), IndexOption.Null));
            Assert.Equal(-1, ts.GetIndex(new DateTime(2000, 1, 1, 9, 31, 30), IndexOption.Prev));
            Assert.Equal(0, ts.GetIndex(new DateTime(2000, 1, 1, 9, 31, 30), IndexOption.Next));
        }
예제 #7
0
        /// <summary>
        /// 下载 Tick 数据,返回值(ask,bid,trade)
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="inst"></param>
        /// <param name="dateTime1"></param>
        /// <param name="dateTime2"></param>
        /// <returns></returns>
        public static (TickSeries asks, TickSeries bids, TickSeries trades) DownloadTicks(this DataManager manager, Instrument inst, DateTime dateTime1, DateTime dateTime2)
        {
            var asks    = new TickSeries();
            var bids    = new TickSeries();
            var trades  = new TickSeries();
            var request = new HistoricalDataRequest()
            {
                RequestId  = Guid.NewGuid().ToString("N"),
                DataType   = DataObjectType.Tick,
                Instrument = inst,
                DateTime1  = dateTime1,
                DateTime2  = dateTime2
            };

            DownloadDataRequest(manager.GetFramework(), request, OnHistoricalData);
            return(asks, bids, trades);

            void OnHistoricalData(HistoricalData data)
            {
                foreach (var item in data.Objects)
                {
                    switch (item.TypeId)
                    {
                    case DataObjectType.Ask:
                        asks.Add((Ask)item);
                        break;

                    case DataObjectType.Bid:
                        bids.Add((Bid)item);
                        break;

                    case DataObjectType.Trade:
                        trades.Add((Trade)item);
                        break;

                    default:
                        break;
                    }
                }
            }
        }
예제 #8
0
파일: Strategy.cs 프로젝트: ForTrade/CSharp
 public Strategy(Framework framework, string name)
 {
     this.framework = framework;
     this.Name = name;
     this.strategiesByInstrument = new IdArray<LinkedList<Strategy>>(1000);
     this.strategyByOrderId = new IdArray<Strategy>(1000);
     this.strategies = new LinkedList<Strategy>();
     this.status = StrategyStatus.Stopped;
     this.instruments = new InstrumentList();
     this.instrumentCountTable = new IdArray<int>(1000);
     if (framework != null)
     {
         this.portfolio = new Portfolio(framework, this.Name);
         framework.PortfolioManager.Add(this.portfolio);
     }
     this.bars = new BarSeries("", "");
     this.equity = new TimeSeries();
     this.bids = new TickSeries("");
     this.asks = new TickSeries("");
     this.stops = new List<Stop>();
     this.stopsByInstrument = new IdArray<List<Stop>>(1000);
 }
예제 #9
0
		public TickSeries GetHistoricalTrades(IHistoricalDataProvider provider, Instrument instrument, DateTime dateTime1, DateTime dateTime2)
		{
			HistoricalDataRequest request = new HistoricalDataRequest(instrument, dateTime1, dateTime2, 4);
			provider.Send(request);
			this.handle = new ManualResetEventSlim(false);
			this.handle.Wait();
			TickSeries tickSeries = new TickSeries("");
			if (this.historicalData != null)
			{
				foreach (HistoricalData current in this.historicalData)
				{
					DataObject[] objects = current.Objects;
					for (int i = 0; i < objects.Length; i++)
					{
						DataObject dataObject = objects[i];
						tickSeries.Add((Trade)dataObject);
					}
				}
			}
			this.historicalData = null;
			return tickSeries;
		}
예제 #10
0
        public static (TickSeries, TickSeries, TickSeries) MarketDataToTick(IEnumerable <DepthMarketDataField> items, Instrument inst)
        {
            var asks   = new TickSeries();
            var bids   = new TickSeries();
            var trades = new TickSeries();
            var last   = EmptyMarketData;

            foreach (var item in items)
            {
                var dateTime = item.ExchangeDateTime();
                var size     = item.Volume - last.Volume;
                //var openInterest = item.OpenInterest - last.OpenInterest;
                var turnover = double.NaN;
                if (item.Turnover > last.Turnover)
                {
                    turnover = item.Turnover - last.Turnover;
                }
                else
                {
                    turnover = (item.Turnover / item.Volume) * size;
                }
                var trade = new Trade(dateTime, dateTime, QuantBoxConst.PIdCtp, inst.Id, item.LastPrice, (int)size);
                trade.SetMarketData(turnover, item.OpenInterest);
                trades.Add(trade);
                if (item.Asks?.Length > 0)
                {
                    asks.Add(new Ask(dateTime, dateTime, QuantBoxConst.PIdCtp, inst.Id, item.Asks[0].Price, item.Asks[0].Size));
                }
                if (item.Bids?.Length > 0)
                {
                    bids.Add(new Bid(dateTime, dateTime, QuantBoxConst.PIdCtp, inst.Id, item.Bids[0].Price, item.Bids[0].Size));
                }
                last = item;
            }
            return(asks, bids, trades);
        }
예제 #11
0
        public TickSeries GetHistoricalTicks(TickType type, Instrument instrument, DateTime dateTime1, DateTime dateTime2)
        {
            DataSeries ds = null;
            switch (type)
            {
                case TickType.Bid:
                    ds = GetDataSeries(instrument, DataObjectType.Bid, BarType.Time, 60);
                    break;
                case TickType.Ask:
                    ds = GetDataSeries(instrument, DataObjectType.Ask, BarType.Time, 60);
                    break;
                case TickType.Trade:
                    ds = GetDataSeries(instrument, DataObjectType.Trade, BarType.Time, 60);
                    break;
            }

            var ts = new TickSeries();
            if (ds != null && ds.Count != 0)
            {
                var index1 = ds.GetIndex(dateTime1, SearchOption.Next);
                var index2 = ds.GetIndex(dateTime2, SearchOption.Prev);
                for (long i = index1; i <= index2; i++)
                {
                    var obj = ds[i];
                    switch (type)
                    {
                        case TickType.Bid:
                            if (obj.TypeId == DataObjectType.Bid)
                                ts.Add((Bid)obj);
                            else
                                Console.WriteLine($"DataManager::GetHistoricalTicks Error, object type is not Bid {obj}");
                            break;
                        case TickType.Ask:
                            if (obj.TypeId == DataObjectType.Ask)
                                ts.Add((Ask)obj);
                            else
                                Console.WriteLine($"DataManager::GetHistoricalTicks Error, object type is not Ask {obj}");
                            break;
                        case TickType.Trade:
                            if (obj.TypeId == DataObjectType.Trade)
                                ts.Add((Trade)obj);
                            else
                                Console.WriteLine($"DataManager::GetHistoricalTicks Error, object type is not Trade {obj}");
                            break;
                    }
                }
            }
            return ts;
        }
예제 #12
0
 public TickDataEnumerator(TickSeries series) : base(series.Count)
 {
     this.series = series;
 }
        public void OutputSeries(out IDataSeries trades, out IDataSeries bids, out IDataSeries asks)
        {
            trades = new TickSeries();
            bids = new TickSeries();
            asks = new TickSeries();

            PbTickCodec codec = new PbTickCodec();
            int TradingDay = -1;
            int _lastTradeSize = 0;
            foreach (var s in Series)
            {
                if(TradingDay != s.TradingDay)
                {
                    _lastTradeSize = 0;
                    TradingDay = s.TradingDay;
                }
                var dateTime = codec.GetDateTime(s.ActionDay == 0 ? s.TradingDay : s.ActionDay).Add(codec.GetUpdateTime(s));
                var tick = PbTick2DepthMarketDataNClass(codec, s);

                if(SubscribeExternData)
                {
                    var trade = new TradeEx(dateTime, 0, _InstrumentId, tick.LastPrice, (int)tick.Volume);
                    trade.Size -= _lastTradeSize;
                    trade.DepthMarketData = tick;
                    trades.Add(trade);
                }
                else
                {
                    var trade = new Trade(dateTime, 0, _InstrumentId, tick.LastPrice, (int)tick.Volume);
                    trade.Size -= _lastTradeSize;
                    trades.Add(trade);
                }


                if (tick.Bids != null && tick.Bids.Length > 0)
                {
                    var bid = new Bid(dateTime, 0, _InstrumentId, tick.Bids[0].Price, tick.Bids[0].Size);
                    bids.Add(bid);
                }
                if (tick.Asks != null && tick.Asks.Length > 0)
                {
                    var ask = new Ask(dateTime, 0, _InstrumentId, tick.Asks[0].Price, tick.Asks[0].Size);
                    asks.Add(ask);
                }

                _lastTradeSize = (int)tick.Volume;
            }
        }
예제 #14
0
 public TickDataEnumerator(TickSeries series, byte type = DataObjectType.Trade)
     : base(series.Count)
 {
     _series = series;
     _type   = type;
 }
예제 #15
0
        public override void Run()
        {
            // Prepare running.
            Console.WriteLine("Prepare running in {0} mode...", framework.StrategyManager.Mode);

            // Get trading instruments.
            Instrument ins1 = InstrumentManager.Instruments["IF1612"];

            // Create SMA Crossover with Loading data on start strategy.
            // and add trading instruments.
            DoubleMA_Crossover smaCrossoverLOS = new DoubleMA_Crossover(framework, "SMACrossoverLOS");

            smaCrossoverLOS.Instruments.Add(ins1);

            // Set strategy as main.
            strategy = smaCrossoverLOS;

            Console.WriteLine("Prepare running in {0} mode...", framework.StrategyManager.Mode);

            // 开始时间是前一个交易日,这个地方要按自己策略的实际情况进行调整
            DateTime startDate = DateTime.Now.DayOfWeek == DayOfWeek.Monday ? DateTime.Now.AddDays(-3).Date : DateTime.Now.AddDays(-1).Date;
            DateTime historicalData1EndTime = startDate;

            // 取本地的数据的最后时间
            DataSeries ins1DataSeries = framework.DataManager.GetDataSeries(ins1, DataObjectType.Trade);

            if (ins1DataSeries != null && ins1DataSeries.Count > 0)
            {
                historicalData1EndTime = ins1DataSeries.DateTime2;
            }

            // 以两个时间的最大值为起点
            historicalData1EndTime = new DateTime(Math.Max(historicalData1EndTime.Ticks, startDate.Ticks));


            // Load and save historical trades from QuantBase provider.
            IHistoricalDataProvider quantBase = framework.ProviderManager.GetHistoricalDataProvider(94);

            if (quantBase.Status == ProviderStatus.Disconnected)
            {
                quantBase.Connect();
            }
            // 等待连接成功,订阅太快了不行
            while (!quantBase.IsConnected)
            {
                Thread.Sleep(1000);
            }


            // Load historical trades.
            Console.WriteLine("Load historical data.");
            TickSeries ins1TickSeries = framework.DataManager.GetHistoricalTrades(quantBase, ins1, historicalData1EndTime, DateTime.Now);

            Console.WriteLine("Save historical data.");
            // Save historical trades.
            foreach (Trade trade in ins1TickSeries)
            {
                framework.DataManager.Save(ins1, trade);
            }

            // Set DataSimulator's dates.
            DataSimulator.DateTime1 = startDate;
            DataSimulator.DateTime2 = DateTime.Now;

            // Set null for event filter.
            framework.EventManager.Filter = null;

            // Set property for suspend trading during simulation.
            DoubleMA_Crossover.SuspendTrading = true;

            // Add 5 minute bars (300 seconds) for trading instruments.
            BarFactory.Add(ins1, SmartQuant.BarType.Time, barSize);

            // Run in simulation.
            Console.WriteLine("Run in Backtest mode.");

            // Save current strategy mode.
            StrategyMode mode = framework.StrategyManager.Mode;

            // Set backtest mode.
            framework.StrategyManager.Mode = StrategyMode.Backtest;

            StartStrategy(StrategyMode.Backtest);

            // Run.
            Console.WriteLine("Run in {0} mode.", framework.StrategyManager.Mode);



            // Restore strategy mode.
            framework.StrategyManager.Mode = mode;

            // Get provider for realtime.
            Provider quantRouter = framework.ProviderManager.GetProvider(99) as Provider;

            if (quantRouter.Status == ProviderStatus.Disconnected)
            {
                quantRouter.Connect();
            }
            while (!quantRouter.IsConnected)
            {
                Thread.Sleep(1000);
            }

            // Set property for trading.
            DoubleMA_Crossover.SuspendTrading = false;

            if (framework.StrategyManager.Mode == StrategyMode.Paper)
            {
                // Set QuantRouter as data provider.
                strategy.DataProvider = quantRouter as IDataProvider;
            }
            else if (framework.StrategyManager.Mode == StrategyMode.Live)
            {
                // Set QuantRouter as data and execution provider.
                strategy.DataProvider      = quantRouter as IDataProvider;
                strategy.ExecutionProvider = quantRouter as IExecutionProvider;
            }


            StartStrategy(framework.StrategyManager.Mode);
        }
예제 #16
0
 public void Save(TickSeries series, SaveMode option = SaveMode.Add)
 {
     foreach (var tick in series)
         Save(tick, option);
 }
예제 #17
0
 private static Instrument GetInstrument(TickSeries series)
 {
     return(Framework.Current.InstrumentManager.GetById(series[0].InstrumentId));
 }
예제 #18
0
 /// <summary>
 /// 生成日线
 /// </summary>
 /// <param name="series"></param>
 /// <returns></returns>
 public static BarSeries DayCompress(this TickSeries series)
 {
     return(TimeCompress(series, QuantBoxConst.DayBarSize));
 }
예제 #19
0
 /// <summary>
 /// 生成1分钟Bar
 /// </summary>
 /// <param name="series"></param>
 /// <returns></returns>
 public static BarSeries MinuteCompress(this TickSeries series, byte type = DataObjectType.Trade)
 {
     return(TimeCompress(series, 60, type));
 }
예제 #20
0
        static void _Main(string[] args)
        {
            CsvDataImport cdi        = new CsvDataImport();
            string        symbol     = "AAPL2";
            Framework     framework  = Framework.Current;
            Instrument    instrument = framework.InstrumentManager.Get(symbol);

            if (instrument == null)
            {
                instrument = new Instrument(SmartQuant.InstrumentType.Stock, symbol, "", CurrencyId.CNY);
                framework.InstrumentManager.Add(instrument);
            }

            TickSeries trades = new TickSeries();
            TickSeries bids   = new TickSeries();
            TickSeries asks   = new TickSeries();
            BarSeries  bars   = new BarSeries();

            //using (StreamReader file = File.OpenText(@"‪d:\wukan\Desktop\AAPL.Bar Time 86400.csv"))
            FileInfo fi = new FileInfo(@"D:\AAPL.BarTime86400.csv");

            using (StreamReader file = new StreamReader(fi.OpenRead()))
            {
                int    i   = 0;
                string str = file.ReadLine();
                do
                {
                    ++i;
                    str = file.ReadLine();
                    if (str == null)
                    {
                        break;
                    }

                    string[] arr = str.Split(',');

                    Trade trade = null;
                    Bid   bid   = null;
                    Ask   ask   = null;
                    Bar   bar   = null;

                    //cdi.ReadLine(arr, instrument.Id, out trade, out bid, out ask);
                    cdi.ReadLine(arr, instrument.Id, SmartQuant.BarType.Time, 86400, out bar);

                    if (trade != null)
                    {
                        trades.Add(trade);
                    }

                    if (bid != null)
                    {
                        bids.Add(bid);
                    }

                    if (ask != null)
                    {
                        asks.Add(ask);
                    }

                    if (bar != null)
                    {
                        bars.Add(bar);
                    }
                } while (str != null);
                file.Close();
            }

            if (trades.Count > 0)
            {
                framework.DataManager.Save(trades);
            }

            if (bids.Count > 0)
            {
                framework.DataManager.Save(bids);
            }

            if (asks.Count > 0)
            {
                framework.DataManager.Save(asks);
            }

            if (bars.Count > 0)
            {
                framework.DataManager.Save(bars);
            }

            framework.Dispose();
        }
예제 #21
0
        public TickSeries GetHistoricalTicks(IHistoricalDataProvider provider, TickType type, Instrument instrument, DateTime dateTime1, DateTime dateTime2)
        {
            if (provider.IsDisconnected)
                provider.Connect();

            DataNotifier @class = new DataNotifier();
            string text = Guid.NewGuid().ToString();
            lock (this.dictionary_0)
            {
                this.dictionary_0.Add(text, @class);
            }
            HistoricalDataRequest request = null;
            switch (type)
            {
                case TickType.Bid:
                    request = new HistoricalDataRequest(instrument, dateTime1, dateTime2, DataObjectType.Bid);
                    break;
                case TickType.Ask:
                    request = new HistoricalDataRequest(instrument, dateTime1, dateTime2, DataObjectType.Ask);
                    break;
                case TickType.Trade:
                    request = new HistoricalDataRequest(instrument, dateTime1, dateTime2, DataObjectType.Trade);
                    break;
            }
            request.RequestId = text;
            provider.Send(request);
            @class.ReadyEvent.WaitOne();
            lock (this.dictionary_0)
            {
                this.dictionary_0.Remove(text);
            }
            var ts = new TickSeries("", "");
            foreach (var data in @class.Data)
            {
                var objs = data.Objects;
                foreach (var tick in objs)
                    ts.Add((Tick)tick);
            }
            return ts;
        }