Exemplo n.º 1
0
        /// <summary>
        /// Example of using a user-defined aggregate
        /// </summary>
        /// <param name="application"></param>
        /// <param name="inputConfig"></param>
        /// <param name="outputConfig"></param>
        /// <param name="inputAdapter"></param>
        /// <param name="outputAdapter"></param>
        /// <returns></returns>
        private static Query createStandardDeviationExampleQuery(Application application, StockQuoteInputConfig inputConfig, StockQuoteOutputConfig outputConfig, InputAdapter inputAdapter, OutputAdapter outputAdapter)
        {
            var input = CepStream <StockQuote> .Create("input");

            var stddevCepStream = from w in input.Where(e => e.FieldID == "Close")
                                  .HoppingWindow(TimeSpan.FromDays(7), TimeSpan.FromDays(1), HoppingWindowOutputPolicy.ClipToWindowEnd)
                                  select new StockQuote()
            {
                StockID = "ERIC",
                FieldID = "7-day Stddev",
                Value   = w.StandardDeviation()
            };
            var queryTemplate = application.CreateQueryTemplate("standardDeviationExampleTemplate", "Description...", stddevCepStream);

            var queryBinder = new QueryBinder(queryTemplate);

            queryBinder.BindProducer <StockQuote>("input", inputAdapter, inputConfig, EventShape.Point);
            queryBinder.AddConsumer <StockQuote>("output", outputAdapter, outputConfig, EventShape.Point, StreamEventOrder.ChainOrdered);

            var query = application.CreateQuery("standardDeviationExampleQuery", "Description...", queryBinder);

            return(query);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Example of using a user-defined filter
        /// </summary>
        /// <param name="application"></param>
        /// <param name="inputConfig"></param>
        /// <param name="outputConfig"></param>
        /// <param name="inputAdapter"></param>
        /// <param name="outputAdapter"></param>
        /// <returns></returns>
        private static Query createUserFilterExampleQuery(Application application, StockQuoteInputConfig inputConfig, StockQuoteOutputConfig outputConfig, InputAdapter inputAdapter, OutputAdapter outputAdapter)
        {
            var input = CepStream <StockQuote> .Create("input");

            var filteredCepStream = from e in input
                                    where UserDefinedFilter(e.FieldID)
                                    select e;
            var queryTemplate = application.CreateQueryTemplate("userFilterExampleTemplate", "Description...", filteredCepStream);

            var queryBinder = new QueryBinder(queryTemplate);

            queryBinder.BindProducer <StockQuote>("input", inputAdapter, inputConfig, EventShape.Point);
            queryBinder.AddConsumer <StockQuote>("output", outputAdapter, outputConfig, EventShape.Point, StreamEventOrder.ChainOrdered);

            var query = application.CreateQuery("userFilterExampleQuery", "Description...", queryBinder);

            return(query);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Starting point.
        /// </summary>
        public static void Main()
        {
            // Create the server and application
            var    instanceName = !string.IsNullOrEmpty(InstanceName) ? InstanceName : StreamInsightSetupInfo.EnumerateInstances()[0];
            Server server;

            try
            {
                server = Server.Create(instanceName);
            }
            catch
            {
                Console.WriteLine("Could not create StreamInsight instance. Please open Program.cs and check InstanceName.");
                return;
            }
            var application = server.CreateApplication("StockInsight");

            // Determine path for historical data
            var dataPath = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\HistoricalData\\";

            // Configuration for input
            var ericSEKConfig = new StockQuoteInputConfig
            {
                ID          = "ERIC-SEK",
                Filename    = dataPath + "eric_b_sek_2009.csv",
                ColumnNames = new string[] { "Open", "High", "Low", "Close", "Volume", "Adj Close" },
                StartDate   = new DateTime(2009, 01, 01),
                Interval    = 0
            };

            // Configuration for input
            var ericUSDConfig = new StockQuoteInputConfig
            {
                ID          = "ERIC-USD",
                Filename    = dataPath + "eric_b_usd_2009.csv",
                ColumnNames = new string[] { "Open", "High", "Low", "Close", "Volume", "Adj Close" },
                StartDate   = new DateTime(2009, 01, 01),
                Interval    = 0
            };

            // Configuration for input
            var nokiaUSDConfig = new StockQuoteInputConfig
            {
                ID          = "NOKIA-USD",
                Filename    = dataPath + "nokia_2009.csv",
                ColumnNames = new string[] { "Open", "High", "Low", "Close", "Volume", "Adj Close" },
                StartDate   = new DateTime(2009, 01, 01),
                Interval    = 0
            };

            // Configuration for input
            var USDSEKConfig = new StockQuoteInputConfig
            {
                ID          = "USD-SEK",
                Filename    = dataPath + "USD_SEK_ExchangeRate_2009.csv",
                ColumnNames = new string[] { "Value" },
                StartDate   = new DateTime(2009, 01, 01),
                Interval    = 0
            };

            // Configure output adapter
            var outputConfig = new StockQuoteOutputConfig();

            // Instantiate semaphor for stop signal
            var adapterStopSignal = new EventWaitHandle(false,
                                                        EventResetMode.AutoReset, outputConfig.AdapterStopSignal);

            // Add input and output adapter factories to the server
            var inputAdapter  = application.CreateInputAdapter <StockQuoteInputFactory>("StockQuoteInput", "Description...");
            var outputAdapter = application.CreateOutputAdapter <StockQuoteOutputFactory>("StockQuoteOutput", "Description...");

            // Create queries
            createFilterExampleQuery(application, ericUSDConfig, outputConfig, inputAdapter, outputAdapter);
            createCrossJoinExampleQuery(application, ericUSDConfig, ericSEKConfig, USDSEKConfig, outputConfig, inputAdapter, outputAdapter);
            createAvgExampleQuery(application, ericUSDConfig, outputConfig, inputAdapter, outputAdapter);
            createGroupApplyExampleQuery(application, ericUSDConfig, outputConfig, inputAdapter, outputAdapter);
            createBigLooserExampleQuery(application, ericUSDConfig, outputConfig, inputAdapter, outputAdapter);
            createUserFilterExampleQuery(application, ericUSDConfig, outputConfig, inputAdapter, outputAdapter);
            createStandardDeviationExampleQuery(application, ericUSDConfig, outputConfig, inputAdapter, outputAdapter);

            // Execute the queries (one at a time)
            // It would also be possible to execute them in parallell
            foreach (var query in application.Queries.Values)
            {
                Console.WriteLine("\r\nQuery: " + query.Name);

                // Start
                query.Start();

                // Wait until output adapter signals that it is finished
                DiagnosticView diagnosticView;
                do
                {
                    Thread.Sleep(100);
                    diagnosticView = query.Application.Server.GetDiagnosticView(query.Name);
                } while ((string)diagnosticView["QueryState"] == "Running");

                // Stop
                query.Stop();
            }

            // Release resources
            application.Delete();
            server.Dispose();
            //application.Dispose();
        }
Exemplo n.º 4
0
        /// <summary>
        /// Example of detecting when stock price falls more than 10% in 7 days
        /// </summary>
        /// <param name="application"></param>
        /// <param name="inputConfig"></param>
        /// <param name="outputConfig"></param>
        /// <param name="inputAdapter"></param>
        /// <param name="outputAdapter"></param>
        /// <returns></returns>
        private static Query createBigLooserExampleQuery(Application application, StockQuoteInputConfig inputConfig, StockQuoteOutputConfig outputConfig, InputAdapter inputAdapter, OutputAdapter outputAdapter)
        {
            var input = CepStream <StockQuote> .Create("input");

            var bigLooserCepStream = (from e1 in input
                                      from e2 in input.ShiftEventTime(e => e.StartTime.AddDays(7))
                                      where e1.FieldID == "Close" && e2.FieldID == "Close"
                                      select new StockQuote()
            {
                StockID = "ERIC > 10% drop",
                FieldID = "Close",
                Value = (e1.Value - e2.Value) / e2.Value * 100
            }).Where(e => e.Value < -10);
            var queryTemplate = application.CreateQueryTemplate("bigLooserExampleTemplate", "Description...", bigLooserCepStream);

            var queryBinder = new QueryBinder(queryTemplate);

            queryBinder.BindProducer <StockQuote>("input", inputAdapter, inputConfig, EventShape.Point);
            queryBinder.AddConsumer <StockQuote>("output", outputAdapter, outputConfig, EventShape.Point, StreamEventOrder.ChainOrdered);

            var query = application.CreateQuery("bigLooserExampleQuery", "Description...", queryBinder);

            return(query);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Example of a grouping and calculation of averages for the groups
        /// </summary>
        /// <param name="application"></param>
        /// <param name="inputConfig"></param>
        /// <param name="outputConfig"></param>
        /// <param name="inputAdapter"></param>
        /// <param name="outputAdapter"></param>
        /// <returns></returns>
        private static Query createGroupApplyExampleQuery(Application application, StockQuoteInputConfig inputConfig, StockQuoteOutputConfig outputConfig, InputAdapter inputAdapter, OutputAdapter outputAdapter)
        {
            var input = CepStream <StockQuote> .Create("input");

            var ericUSDGroupCepStream = from e in input
                                        group e by e.FieldID into eGroup
                                        from w in eGroup.HoppingWindow(TimeSpan.FromDays(7), TimeSpan.FromDays(1), HoppingWindowOutputPolicy.ClipToWindowEnd)
                                        select new StockQuote()
            {
                StockID = "ERIC 7-day avg",
                FieldID = eGroup.Key,
                Value   = w.Avg(e => e.Value)
            };
            var queryTemplate = application.CreateQueryTemplate("groupApplyExampleTemplate", "Description...", ericUSDGroupCepStream);

            var queryBinder = new QueryBinder(queryTemplate);

            queryBinder.BindProducer <StockQuote>("input", inputAdapter, inputConfig, EventShape.Point);
            queryBinder.AddConsumer <StockQuote>("output", outputAdapter, outputConfig, EventShape.Point, StreamEventOrder.ChainOrdered);

            var query = application.CreateQuery("groupApplyExampleQuery", "Description...", queryBinder);

            return(query);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Compare USD and SEK stock prices using given exchange rate. Example of a cross join.
        /// </summary>
        /// <param name="application"></param>
        /// <param name="ericUSDConfig"></param>
        /// <param name="ericSEKConfig"></param>
        /// <param name="USDSEKConfig"></param>
        /// <param name="outputConfig"></param>
        /// <param name="inputAdapter"></param>
        /// <param name="outputAdapter"></param>
        /// <returns></returns>
        private static Query createCrossJoinExampleQuery(Application application, StockQuoteInputConfig ericUSDConfig, StockQuoteInputConfig ericSEKConfig, StockQuoteInputConfig USDSEKConfig, StockQuoteOutputConfig outputConfig, InputAdapter inputAdapter, OutputAdapter outputAdapter)
        {
            var ericUSDStream = CepStream <StockQuote> .Create("ericUSDStream");

            var ericSEKStream = CepStream <StockQuote> .Create("ericSEKStream");

            var USDSEKStream = CepStream <StockQuote> .Create("USDSEKStream");

            var ericRecalcCepStream = from eUSD in ericUSDStream
                                      from eXch in USDSEKStream // Cross join
                                      where eUSD.FieldID == "Close"
                                      select new StockQuote()
            {
                StockID = "ERIC-Recalc",
                FieldID = "Close",
                Value   = eUSD.Value * eXch.Value                         // Convert ERIC USD quote to SEK
            };

            var ericCompareCepStream = from eRecalc in ericRecalcCepStream
                                       from eSEK in ericSEKStream
                                       where eSEK.FieldID == "Close"
                                       select new StockQuote()
            {
                StockID = "ERIC-Compare",
                FieldID = "Diff",
                Value   = eSEK.Value - eRecalc.Value
            };
            var queryTemplate = application.CreateQueryTemplate("ericCompareTemplate", "Description...", ericCompareCepStream);

            var queryBinder = new QueryBinder(queryTemplate);

            queryBinder.BindProducer <StockQuote>("ericUSDStream", inputAdapter, ericUSDConfig, EventShape.Point);
            queryBinder.BindProducer <StockQuote>("ericSEKStream", inputAdapter, ericSEKConfig, EventShape.Point);
            queryBinder.BindProducer <StockQuote>("USDSEKStream", inputAdapter, USDSEKConfig, EventShape.Point);
            queryBinder.AddConsumer <StockQuote>("output", outputAdapter, outputConfig, EventShape.Point, StreamEventOrder.ChainOrdered);

            var query = application.CreateQuery("ericCompareQuery", "Description...", queryBinder);

            return(query);
        }