public void BatchWriteOutData(OutPutType outPutMode, OutPutMktMode mktMode, string filePath, int cutOffHour) { switch (outPutMode) { case OutPutType.FlatFile: WriteOutFlatFile(mktMode, filePath, cutOffHour); break; case OutPutType.Xml: break; case OutPutType.Binary: break; case OutPutType.SqlTable: break; default: throw new ArgumentOutOfRangeException("outPutMode"); } }
private void WriteOutFlatFile(OutPutMktMode mktMode, string filePath, int cutOffHour) { bool headerCreated = false; Dictionary<Security, MktOutput> MktsOutPut = new Dictionary<Security, MktOutput>(); foreach (var dataFactory in _securitites) { MktsOutPut.Add(dataFactory.SecurityObj, new MktOutput() { basePath = filePath, baseExtension = ".csv", security = dataFactory.SecurityObj }); } DateTime date = DateTime.MinValue; List<string> dataCacheAll = new List<string>(); Dictionary<Security, string> dataCacheByMkt = new Dictionary<Security, string>(); StringBuilder fileName = new StringBuilder(); StringBuilder allMktsHeader = new StringBuilder(); foreach (var timeStamp in Markets) { // calculate the header using the tickdata's built-in funnction if (!headerCreated) { foreach (var security in timeStamp.Value) { MarketState marketState = security.Value[0]; string mktHeaderString = marketState.GetHeadersString() + marketState.GetTradesHeaderString(5); allMktsHeader.Append(mktHeaderString); MktsOutPut[security.Key].header = mktHeaderString; } Console.WriteLine(allMktsHeader.ToString()); dataCacheAll.Add(allMktsHeader.ToString()); headerCreated = true; } StringBuilder data = new StringBuilder(); bool resetDate = false; foreach (var security in timeStamp.Value) { MktOutput mktOutPut = MktsOutPut[security.Key]; // Output a new file for each day. The end of each day is defined by a cutOffHour DateTime current = timeStamp.Key; if (date == DateTime.MinValue || ((current.Day != date.Day) && (current.Hour >= cutOffHour))) { if (resetDate == false) { resetDate = true; if (mktMode == OutPutMktMode.AggregatedMkts) if (dataCacheAll.Count > 0) { writeCacheToFile(fileName.ToString(), dataCacheAll); dataCacheAll.Add(allMktsHeader.ToString()); } } if ((mktMode == OutPutMktMode.SeperateMkts) || (mktMode == OutPutMktMode.BothMkts)) { // output each of the individual markets data if (mktOutPut.dataCache.Count > 0) writeCacheToFile(mktOutPut.filePath.ToString(), mktOutPut.dataCache); } // construct the new file name fileName.Clear(); fileName.Append(filePath); string dateStr = current.Year.ToString() + current.Month.ToString("00") + current.Day.ToString("00"); switch (mktMode) { case OutPutMktMode.SeperateMkts: mktOutPut.SetFilePath(dateStr); break; case OutPutMktMode.BothMkts: mktOutPut.SetFilePath(dateStr); fileName.Append("All_Mkts_"); break; case OutPutMktMode.AggregatedMkts: default: fileName.Append("All_Mkts_"); break; } fileName.Append(dateStr); fileName.Append(".csv"); } if ((mktMode == OutPutMktMode.AggregatedMkts) || (mktMode == OutPutMktMode.BothMkts)) { MarketState lastTick = security.Value[(uint)(security.Value.Count - 1)]; data.Append(MarketStateToString(lastTick) + ","); } else { foreach (var mktStates in security.Value) { mktOutPut.dataCache.Add(MarketStateToString(mktStates.Value) + ","); } } } if (resetDate) date = timeStamp.Key; // reset the date if we moved passed the cut off for a new day if ((mktMode == OutPutMktMode.AggregatedMkts) || (mktMode == OutPutMktMode.BothMkts)) { dataCacheAll.Add(data.ToString()); } } if ((mktMode == OutPutMktMode.AggregatedMkts) || (mktMode == OutPutMktMode.BothMkts)) { if (dataCacheAll.Count > 0) writeCacheToFile(fileName.ToString(), dataCacheAll); } if ((mktMode == OutPutMktMode.SeperateMkts) || (mktMode == OutPutMktMode.BothMkts)) { // output each of the individual markets final data set foreach (var mktOutPut in MktsOutPut.Values) { if (mktOutPut.dataCache.Count > 0) writeCacheToFile(mktOutPut.filePath.ToString(), mktOutPut.dataCache); } } }
private void WriteOutFlatFile(OutPutMktMode mktMode, string filePath, int cutOffHour) { bool headerCreated = false; Dictionary <Security, MktOutput> MktsOutPut = new Dictionary <Security, MktOutput>(); foreach (var dataFactory in _securitites) { MktsOutPut.Add(dataFactory.SecurityObj, new MktOutput() { basePath = filePath, baseExtension = ".csv", security = dataFactory.SecurityObj }); } DateTime date = DateTime.MinValue; List <string> dataCacheAll = new List <string>(); Dictionary <Security, string> dataCacheByMkt = new Dictionary <Security, string>(); StringBuilder fileName = new StringBuilder(); StringBuilder allMktsHeader = new StringBuilder(); foreach (var timeStamp in Markets) { // calculate the header using the tickdata's built-in funnction if (!headerCreated) { foreach (var security in timeStamp.Value) { MarketState marketState = security.Value[0]; string mktHeaderString = marketState.GetHeadersString() + marketState.GetTradesHeaderString(5); allMktsHeader.Append(mktHeaderString); MktsOutPut[security.Key].header = mktHeaderString; } Console.WriteLine(allMktsHeader.ToString()); dataCacheAll.Add(allMktsHeader.ToString()); headerCreated = true; } StringBuilder data = new StringBuilder(); bool resetDate = false; foreach (var security in timeStamp.Value) { MktOutput mktOutPut = MktsOutPut[security.Key]; // Output a new file for each day. The end of each day is defined by a cutOffHour DateTime current = timeStamp.Key; if (date == DateTime.MinValue || ((current.Day != date.Day) && (current.Hour >= cutOffHour))) { if (resetDate == false) { resetDate = true; if (mktMode == OutPutMktMode.AggregatedMkts) { if (dataCacheAll.Count > 0) { writeCacheToFile(fileName.ToString(), dataCacheAll); dataCacheAll.Add(allMktsHeader.ToString()); } } } if ((mktMode == OutPutMktMode.SeperateMkts) || (mktMode == OutPutMktMode.BothMkts)) { // output each of the individual markets data if (mktOutPut.dataCache.Count > 0) { writeCacheToFile(mktOutPut.filePath.ToString(), mktOutPut.dataCache); } } // construct the new file name fileName.Clear(); fileName.Append(filePath); string dateStr = current.Year.ToString() + current.Month.ToString("00") + current.Day.ToString("00"); switch (mktMode) { case OutPutMktMode.SeperateMkts: mktOutPut.SetFilePath(dateStr); break; case OutPutMktMode.BothMkts: mktOutPut.SetFilePath(dateStr); fileName.Append("All_Mkts_"); break; case OutPutMktMode.AggregatedMkts: default: fileName.Append("All_Mkts_"); break; } fileName.Append(dateStr); fileName.Append(".csv"); } if ((mktMode == OutPutMktMode.AggregatedMkts) || (mktMode == OutPutMktMode.BothMkts)) { MarketState lastTick = security.Value[(uint)(security.Value.Count - 1)]; data.Append(MarketStateToString(lastTick) + ","); } else { foreach (var mktStates in security.Value) { mktOutPut.dataCache.Add(MarketStateToString(mktStates.Value) + ","); } } } if (resetDate) { date = timeStamp.Key; // reset the date if we moved passed the cut off for a new day } if ((mktMode == OutPutMktMode.AggregatedMkts) || (mktMode == OutPutMktMode.BothMkts)) { dataCacheAll.Add(data.ToString()); } } if ((mktMode == OutPutMktMode.AggregatedMkts) || (mktMode == OutPutMktMode.BothMkts)) { if (dataCacheAll.Count > 0) { writeCacheToFile(fileName.ToString(), dataCacheAll); } } if ((mktMode == OutPutMktMode.SeperateMkts) || (mktMode == OutPutMktMode.BothMkts)) { // output each of the individual markets final data set foreach (var mktOutPut in MktsOutPut.Values) { if (mktOutPut.dataCache.Count > 0) { writeCacheToFile(mktOutPut.filePath.ToString(), mktOutPut.dataCache); } } } }