예제 #1
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;
            }
        }
예제 #2
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));
        }
예제 #3
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();
            }
        }
예제 #4
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));
        }
예제 #5
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;
                    }
                }
            }
        }
예제 #6
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);
        }
예제 #7
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();
        }
        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;
            }
        }
예제 #9
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;
        }
예제 #10
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;
        }
예제 #11
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;
		}