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); }
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); } } } }
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); } } } } }
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); } } } } }
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); }
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; }
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; }