示例#1
0
        private void start()
        {
            //Loading system startup data for all the exchanges
            List <Exchange> exchanges = new List <Exchange>();

            exchanges.Add(Exchange.FAKE_NASDAQ);

            InMemoryObjects.LoadInMemoryObjects(exchanges);

            //Initiate fake data generation from fake market
            //Later it will also include data generation from google finance
            TimeSpan updateDuration = TimeSpan.FromMilliseconds(Constants.FAKE_DATA_GENERATE_PERIOD);

            FakeDataGenerator.StartFakeDataGeneration(300);


            IFeeder feeder = FeederFactory.GetFeeder(FeederSourceSystem.FAKEMARKET);
            ISender sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE);

            List <StockModel.Symbol> symbols = InMemoryObjects.ExchangeSymbolList.SingleOrDefault(x => x.Exchange == Exchange.FAKE_NASDAQ).Symbols;

            while (true)
            {
                Parallel.ForEach(symbols, (symbol) =>
                {
                    feedList = feeder.GetFeedList(symbol.Id, 1, 10);                      // Get the list of values for a given symbolId of a market for given time-span
                    sender.SendFeed(feedList);
                });
            }
        }
示例#2
0
        /// <summary>
        /// Application arguments:
        /// arg0: Selected Exchange. Has to be enum StockModel.Master.Exchange
        /// arg1: Data generator to use. Has to be IDataPublisher.
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //Loading system startup data for all the exchanges
            List <Exchange> exchanges = new List <Exchange>();

            //defaults selected...
            selectedExchange = Exchange.FAKE_NASDAQ;
            dataGenerator    = YahooDataGenerator.Instance;

            ResolveAppArgs(args);

            exchanges = Enum.GetValues(typeof(Exchange)).OfType <Exchange>().ToList();

            InMemoryObjects.LoadInMemoryObjects(exchanges);

            TimeSpan updateDuration = TimeSpan.FromMilliseconds(Constants.FAKE_DATA_GENERATE_PERIOD);

            //Start data generation - this will start fetching data for all symbols of current exchange
            //Later, need to change this to only subscribe to the specific symbol(s) selected.
            dataGenerator.StartDataGeneration(300, selectedExchange);

            sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE);

            List <StockModel.Symbol> symbols = InMemoryObjects.ExchangeSymbolList.SingleOrDefault(x => x.Exchange == selectedExchange).Symbols;

            List <SymbolFeeds>       generatedData = new List <SymbolFeeds>();
            List <StockModel.Symbol> symbolList    = new List <StockModel.Symbol>();


            Action <double, string> addMovingAverage = new Action <double, string>((val, MVA_id) => {
                sender.SendMVA(val, MVA_id);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Sent value {0} to redis", val);
                Console.ResetColor();
            });

            Parallel.ForEach(symbols, (symbol) =>
            {
                //subscribe
                dataGenerator.SubscribeFeed(symbol.Id, (Feed fd) =>
                {
                    sender.SendFeed(fd, selectedExchange.ToString());

                    Console.WriteLine(fd.ToString());
                });

                //add subscription for each aggregator configured
                //RXProcessing.AddAggregator(dataGenerator, new MovingAverage(),
                //    addMovingAverage
                //    , symbol.Id);
            });

            Console.Read();
        }
示例#3
0
        private static void SubscribeRedis()
        {
            ConnectionMultiplexer connection = null;

            connection = GetRedisConnection();
            ISubscriber sub = connection.GetSubscriber();

            sub.Subscribe(_exchange, (channel, message) =>
            {
                lock (_lockQueue)
                {
                    byte[] binary       = Convert.FromBase64String(message);
                    MemoryStream stream = new MemoryStream(binary);
                    Feed feed           = (Feed)ObjectSerialization.DeserializeFromStream(stream);

                    //send to NEsper
                    _runtime.SendEvent(feed);
                }
            });
            sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE);
        }
示例#4
0
 public IMessageSender ResolveSender(Employee emp)
 {
     return(SenderFactory.GetSender(emp));
 }
示例#5
0
        private static void Start()
        {
            _LTPStack = new Dictionary <string, Queue <double> >();
            ISender sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE);

            _sum = new Dictionary <string, double>();

            ConnectionMultiplexer connection = null;

            connection = GetRedisConnection();

            ISubscriber sub  = connection.GetSubscriber();
            Feed        feed = null;

            byte[]       binary = null;
            MemoryStream stream = null;

            sub.Subscribe(_exchange, (channel, message) =>
            {
                lock (_lockQueue)
                {
                    string str = message;
                    binary     = Convert.FromBase64String(message);
                    stream     = new MemoryStream(binary);
                    feed       = (Feed)ObjectSerialization.DeserializeFromStream(stream);

                    string currentSymbolId = feed.SymbolId.ToString();

                    if (_sum.ContainsKey(currentSymbolId))
                    {
                        _sum[currentSymbolId] += feed.LTP;
                    }
                    else
                    {
                        _sum.Add(currentSymbolId, feed.LTP);
                    }

                    if (_LTPStack.ContainsKey(currentSymbolId))
                    {
                        _LTPStack[currentSymbolId].Enqueue(feed.LTP);
                    }
                    else
                    {
                        Queue <double> q = new Queue <double>();
                        q.Enqueue(feed.LTP);
                        _LTPStack.Add(currentSymbolId, q);
                    }

                    if (_LTPStack[currentSymbolId].Count > n)
                    {
                        _sum[currentSymbolId] -= _LTPStack[currentSymbolId].Dequeue();
                    }

                    //Publish MVA
                    double mva = _sum[currentSymbolId] / _LTPStack[currentSymbolId].Count();
                    sender.SendMVA(mva, _channelName + currentSymbolId);

                    Console.WriteLine("Symbol id {0} published aggregate {1} to channel {2}",
                                      feed.SymbolId, mva, _channelName + currentSymbolId);
                }
            });
        }