コード例 #1
0
        private static MktSummaryEvent PrepareMktSummaryEvent(DataFactory factory, MktSummaryEvent mktSummary, TickData tick)
        {
            switch (tick.Type)
            {
            case DataWrangler.Structures.Type.Ask:
                mktSummary.Ask = tick;
                mktSummary     = CheckForSyntheticTradeCondition(factory, mktSummary);
                break;

            case DataWrangler.Structures.Type.Bid:
                mktSummary.Bid = tick;
                mktSummary     = CheckForSyntheticTradeCondition(factory, mktSummary);
                break;

            case DataWrangler.Structures.Type.Trade:
                mktSummary.Trade = tick;
                break;
            }

            if (tick.TimeStamp > mktSummary.EventTime)
            {
                mktSummary.EventTime = tick.TimeStamp;
            }

            if ((mktSummary.Ask != null) && (mktSummary.Bid != null) && mktSummary.Trade != null)
            {
                mktSummary.Complete = true;
                Console.WriteLine("Mkt summary {0} {1} ask {2} bid {3} trade {4}", tick.Security,
                                  mktSummary.EventTime.ToLongTimeString(),
                                  mktSummary.Ask.Price, mktSummary.Bid.Price, mktSummary.Trade.Price);
            }

            return(mktSummary);
        }
コード例 #2
0
        private void ParseDataTable(DataFactory factory, DataTable dt)
        {
            Console.WriteLine("Parsing {0} DataTable({1} rows)", factory.SecurityName, dt.Rows.Count.ToString());

            if (!_mktSummaryEvents.ContainsKey(factory))
            {
                _mktSummaryEvents.Add(factory, new MktSummaryEvent {
                    Complete = false
                });
            }
            MktSummaryEvent mktSummary = _mktSummaryEvents[factory];

            foreach (DataRow row in dt.Rows)
            {
                TickData tick = DataRowToTickData(factory, row);
                if (tick != null)
                {
                    if (!mktSummary.Complete)
                    {
                        mktSummary = PrepareMktSummaryEvent(factory, mktSummary, tick);
                        _mktSummaryEvents[factory] = mktSummary;
                    }
                    else
                    {
                        AddHistDataToCache(factory, tick);
                    }
                }
            }
        }
コード例 #3
0
        public void PlayBackData()
        {
            foreach (var secondsBin in CachedTickData)
            {
                foreach (var security in secondsBin.Value)
                {
                    DataFactory factory = security.Key;
                    if (_mktSummaryEvents.ContainsKey(factory))
                    {
                        MktSummaryEvent mktSummaryEvent = _mktSummaryEvents[factory];
                        if (mktSummaryEvent.EventTime <= secondsBin.Key)
                        {
                            factory.FirstTick(mktSummaryEvent.Bid, mktSummaryEvent.Ask, mktSummaryEvent.Trade);
                            _mktSummaryEvents.Remove(factory);
                        }
                    }

                    // begin play back only after we have a summary event for each security
                    if (_mktSummaryEvents.Count < 1)
                    {
                        foreach (TickData tickData in security.Value)
                        {
                            factory.NewTick(tickData);
                        }
                    }
                }
            }
        }
コード例 #4
0
        public void ParseTickDataList(object dataObject, List <TickData> dt)
        {
            if (dataObject is DataFactory)
            {
                var factory = (DataFactory)dataObject;

                Console.WriteLine("Parsing {0} DataTable({1} rows)", factory.SecurityName, dt.Count.ToString());

                if (!_mktSummaryEvents.ContainsKey(factory))
                {
                    _mktSummaryEvents.Add(factory, new MktSummaryEvent {
                        Complete = false
                    });
                }
                MktSummaryEvent mktSummary = _mktSummaryEvents[factory];


                if (!_hasChachedData.ContainsKey(factory))
                {
                    _hasChachedData.Add(factory, false);
                }

                if (dt.Count > 0)
                {
                    _hasChachedData[factory] = true;
                }

                foreach (var tick in dt)
                {
                    if (tick != null)
                    {
                        if (!mktSummary.Complete)
                        {
                            mktSummary = PrepareMktSummaryEvent(factory, mktSummary, tick);
                            _mktSummaryEvents[factory] = mktSummary;
                        }
                        else
                        {
                            AddHistDataToCache(factory, tick);
                        }
                    }
                }
            }
        }
コード例 #5
0
        private static MktSummaryEvent CheckForSyntheticTradeCondition(DataFactory factory, MktSummaryEvent mktSummary)
        {
            if ((mktSummary.Ask != null) && (mktSummary.Bid != null))
            {
                mktSummary.Trade = new TickData
                {
                    Type        = DataWrangler.Structures.Type.Trade,
                    TimeStamp   = mktSummary.EventTime,
                    Price       = (mktSummary.Bid.Price + mktSummary.Ask.Price) / 2,
                    Size        = 0,
                    Codes       = null,
                    Security    = factory.SecurityObj.Name,
                    SecurityObj = factory.SecurityObj,
                    SecurityID  = factory.SecurityObj.Id
                };
            }

            return(mktSummary);
        }
コード例 #6
0
        private static MktSummaryEvent PrepareMktSummaryEvent(DataFactory factory, MktSummaryEvent mktSummary, TickData tick)
        {
            switch (tick.Type)
            {
                case Type.Ask:
                    if (mktSummary.Ask == null)
                    {
                        mktSummary.Ask = tick;
                        if (tick.TimeStamp > mktSummary.EventTime) mktSummary.EventTime = tick.TimeStamp;
                        mktSummary = CheckForSyntheticTradeCondition(factory, mktSummary);
                    }
                    break;
                case Type.Bid:
                    if (mktSummary.Bid == null)
                    {
                        mktSummary.Bid = tick;
                        if (tick.TimeStamp > mktSummary.EventTime) mktSummary.EventTime = tick.TimeStamp;
                        mktSummary = CheckForSyntheticTradeCondition(factory, mktSummary);
                    }
                    break;
                case Type.Trade:
                    if (mktSummary.Trade == null)
                    {
                        mktSummary.Trade = tick;
                        if (tick.TimeStamp > mktSummary.EventTime) mktSummary.EventTime = tick.TimeStamp;
                        mktSummary = CheckForSyntheticTradeCondition(factory, mktSummary);
                    }
                    break;
            }

            if ((mktSummary.Ask != null) && (mktSummary.Bid != null) && mktSummary.Trade != null)
            {
                mktSummary.Complete = true;
                Console.WriteLine("Mkt summary {0} {1} ask {2} bid {3} trade {4}", tick.Security,
                        mktSummary.EventTime.ToLongTimeString(),
                        mktSummary.Ask.Price, mktSummary.Bid.Price, mktSummary.Trade.Price);
            }

            return mktSummary;
        }
コード例 #7
0
        private static MktSummaryEvent CheckForSyntheticTradeCondition(DataFactory factory, MktSummaryEvent mktSummary)
        {
            if ((mktSummary.Ask != null) && (mktSummary.Bid != null))
            {
                mktSummary.Trade = new TickData
                {
                    Type = Type.Trade,
                    TimeStamp = mktSummary.EventTime,
                    Price = (mktSummary.Bid.Price + mktSummary.Ask.Price) / 2,
                    Size = 0,
                    Codes = null,
                    Security = factory.SecurityObj.Name,
                    SecurityObj = factory.SecurityObj,
                    SecurityID = factory.SecurityObj.Id
                };
            }

            return mktSummary;
        }