예제 #1
0
        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());
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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++;
        }
예제 #4
0
        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();
        }