public virtual TickQueue[] SetupTickWriters() { List <TickQueue> queueList = new List <TickQueue>(); SymbolInfo[] symbols = ProjectProperties.Starter.SymbolProperties; for (int i = 0; i < symbols.Length; i++) { TickWriter tickWriter = Factory.TickUtil.TickWriter(false); tickWriter.Initialize(DataFolder, symbols[i].Symbol); queueList.Add(tickWriter.WriteQueue); } return(queueList.ToArray()); }
protected override void OnStart(string[] args) { try { config = ConfigurationsManager.ConfigurationsManager.GetConfigurations(); hsConfig = config.HistoricalTicksConfiguration; var appSettings = ConfigurationManager.AppSettings; var serviceTcpBinding = CreateTcpBinding(); tickWriterServiceHost = CreateServiceHost(typeof(TickWriter), typeof(ITickWriter), serviceTcpBinding, appSettings[TickWriterEn.AppSettings.Address.ToString()], "TickWriter Service"); //tickWriterServiceHost = new ServiceHost(new TickWriter(), new Uri(appSettings[TickWriterEn.AppSettings.Address.ToString()])); provider = (TickWriter)tickWriterServiceHost.SingletonInstance; _logger.Info("Start TickWriter service"); Console.WriteLine("Start TickWriter service"); //var builder = new ContainerBuilder(); //builder.Register(c => new TickWriter()).As<ITickWriter>(); #region create client for ticks connectToPЕClient(appSettings[TickWriterEn.AppSettings.AddressToPE.ToString()], appSettings[TickWriterEn.AppSettings.AddressToPE.ToString()]); #endregion #region create threads list that will deserialize ticks int countDeserializedThread = 0; if (!int.TryParse(appSettings[TickWriterEn.AppSettings.CountDeserializeThread.ToString()], out countDeserializedThread)) { countDeserializedThread = 1; } CreateDesirializedThreads(countDeserializedThread); #endregion #region start Save Tick thread int saveIntervalInMiliseconds = 0; if (!int.TryParse(appSettings[TickWriterEn.AppSettings.SaveIntervalInMiliseconds.ToString()], out saveIntervalInMiliseconds)) { saveIntervalInMiliseconds = 1000; } CreateSaveTicksThread(saveIntervalInMiliseconds); #endregion } catch (Exception ex) { _logger.ErrorFormat("{0} {1}", ex.ToString(), ex.InnerException == null ? "" : ex.InnerException.ToString()); throw; } }
private void writeATick(double insertPrice, int volume) { if (tsBits[1].Length <= 3) { tickTime = new TimeStamp(tsBits[0] + " " + tsBits[1] + ":00"); } else { tickTime = new TimeStamp(tsBits[0] + " " + tsBits[1]); } utcTime = tickTime; utcTime.AddSeconds(-GetUtcOffset(tickTime)); double price = insertPrice; tickIO.SetTime(utcTime); if (volume >= 1) { tickIO.SetTrade(price, volume); } else { // tickIO.SetQuote(price, price); tickIO.SetTrade(price, volume); } if (tickWriter == null) { tickWriter = Factory.TickUtil.TickWriter(true); tickWriter.KeepFileOpen = true; string folder = "DataCache"; tickWriter.Initialize(folder, symbol.Symbol); } // Console.WriteLine(tickIO); tickWriter.Add(tickIO); countTicksOut++; }
private void FilterFile(string symbol, string inputPath, string outputPath, TimeStamp startTime, TimeStamp endTime) { TickReader reader = Factory.TickUtil.TickReader(); TickWriter writer = Factory.TickUtil.TickWriter(true); writer.KeepFileOpen = true; writer.Initialize(outputPath, symbol); reader.Initialize(inputPath, symbol); TickQueue inputQueue = reader.ReadQueue; TickIO firstTick = Factory.TickUtil.TickIO(); TickIO lastTick = Factory.TickUtil.TickIO(); TickIO prevTick = Factory.TickUtil.TickIO(); long count = 0; long fast = 0; long dups = 0; TickIO tickIO = Factory.TickUtil.TickIO(); TickBinary tickBinary = new TickBinary(); inputQueue.Dequeue(ref tickBinary); tickIO.Inject(tickBinary); count++; firstTick.Copy(tickIO); firstTick.IsSimulateTicks = true; prevTick.Copy(tickIO); prevTick.IsSimulateTicks = true; if (tickIO.Time >= startTime) { writer.Add(firstTick); } try { while (true) { while (!inputQueue.TryDequeue(ref tickBinary)) { Thread.Sleep(1); } tickIO.Inject(tickBinary); count++; if (tickIO.Time >= startTime) { if (tickIO.Time > endTime) { break; } // if( tickIO.Bid == prevTick.Bid && tickIO.Ask == prevTick.Ask) { // dups++; // } else { // Elapsed elapsed = tickIO.Time - prevTick.Time; prevTick.Copy(tickIO); prevTick.IsSimulateTicks = true; // if( elapsed.TotalMilliseconds < 5000) { // fast++; // } else { while (!writer.TryAdd(prevTick)) { Thread.Sleep(1); } // } // } } } } catch (QueueException ex) { if (ex.EntryType != EventType.EndHistorical) { throw new ApplicationException("Unexpected QueueException: " + ex); } } lastTick.Copy(tickIO); Console.WriteLine(reader.Symbol + ": " + count + " ticks from " + firstTick.Time + " to " + lastTick.Time + " " + dups + " duplicates, " + fast + " less than 50 ms"); Factory.TickUtil.TickReader().CloseAll(); writer.Close(); }