Exemplo n.º 1
0
        private void outcome_sampling_button_Click(object sender, EventArgs e)
        {
            DataminingInputDialog id = new DataminingInputDialog(new string[] { "instrument", "steps", "indicatorid", "outcometimeframe" }, dataminingDb.getInfo());

            id.ShowDialog();

            if (id.isValidResult())
            {
                new Thread(delegate()
                {
                    Dictionary <string, string> parameters = id.getResult();

                    if (Directory.Exists(Application.StartupPath + @"\Analysis\") == false)
                    {
                        Directory.CreateDirectory(Application.StartupPath + @"\Analysis\");
                    }

                    SampleOutcomeExcelGenerator excel = new SampleOutcomeExcelGenerator(Application.StartupPath + @"\Analysis\" + DateTime.Now.ToString("yyyy_dd_mm") + "_" + parameters["instrument"] + ".xls");

                    setState("Outcomesampling");
                    dataminingDb.getOutcomeIndicatorSampling(excel, parameters["indicatorid"], Convert.ToInt32(parameters["outcometimeframe"]), Convert.ToInt32(parameters["steps"]), dataminingDb.getInfo(parameters["indicatorid"]).getDecentRange(), parameters["instrument"]);

                    excel.FinishDoc();
                    excel.ShowDocument();
                }).Start();
            }
        }
Exemplo n.º 2
0
 void IDataminingDatabase.getOutcomeIndicatorSampling(SampleOutcomeExcelGenerator excel, string indicatorId, int outcomeTimeframe, string instument)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 3
0
        void IDataminingDatabase.getOutcomeIndicatorSampling(SampleOutcomeExcelGenerator excel, double min, double max, int steps, string indicatorId, int outcomeTimeframe, string instument)
        {
            List <Thread> threads = new List <Thread>();

            string sheetName = indicatorId + "_" + outcomeTimeframe + "_" + instument;

            if (sheetName.Length >= 30)
            {
                sheetName = sheetName.Substring(0, 29);
            }

            excel.CreateSheet(sheetName);

            var    collection = mongodb.getDB().GetCollection("prices");
            double stepsize   = (Convert.ToDouble(max - min) / Convert.ToDouble(steps));

            int startedThreads = 0;

            double current = min;

            while (current <= max)
            {
                startedThreads++;
                double valueMin = current;
                double valueMax = current + stepsize;
                Thread thread   = new Thread(delegate()
                {
                    instument = null;

                    IMongoQuery query = Query.And(Query.Exists(indicatorId), Query.Exists("last"), Query.Exists("outcome_actual_" + outcomeTimeframe), Query.Exists("outcome_max_" + outcomeTimeframe), Query.Exists("outcome_min_" + outcomeTimeframe), Query.LT(indicatorId, valueMax), Query.GTE(indicatorId, valueMin));
                    if (instument != null)
                    {
                        query = Query.And(query, Query.EQ("instrument", instument));
                    }

                    var docs      = collection.FindAs <BsonDocument>(query);
                    double sumMax = 0d, sumMin = 0d, sumActual = 0d;
                    double count  = docs.Count();
                    foreach (BsonDocument doc in docs)
                    {
                        double onePercent = doc["last"].AsDouble / 100d;

                        double maxDiff    = doc["outcome_max_" + outcomeTimeframe].AsDouble / onePercent - 100d; //calculate percent difference
                        double minDiff    = doc["outcome_min_" + outcomeTimeframe].AsDouble / onePercent - 100d;
                        double actualDiff = doc["outcome_actual_" + outcomeTimeframe].AsDouble / onePercent - 100d;

                        sumMax    += maxDiff;
                        sumMin    += minDiff;
                        sumActual += actualDiff;
                    }

                    if (count == 0)
                    {
                        excel.addRow(sheetName, 0, 0, 0, 0, 0, 0, 0, 0);
                    }
                    else
                    {
                        double maxAvg    = sumMax / count;
                        double minAvg    = sumMin / count;
                        double actualAvg = sumActual / count;

                        double minVsMax = sumMin + sumMax / count;

                        excel.addRow(sheetName, valueMin, valueMax, Convert.ToInt32(count), maxAvg, minAvg, minVsMax, actualAvg, (maxAvg + minAvg));
                    }
                });

                thread.Start();
                threads.Add(thread);

                current += stepsize;
            }

            //Darstellungsthread
            waitForThreads(threads);

            excel.FinishSheet(sheetName);
        }