public string SerializeToJson()
        {
            foreach (KeyValuePair <string, Chart> pairSymbolsDrawings in SymbolsDrawings)
            {
                Chart.DataToSerialize data = pairSymbolsDrawings.Value.SerializeToJson();
                string key = pairSymbolsDrawings.Key;

                if (SymbolsDrawingsToSerialize.ContainsKey(key))
                {
                    SymbolsDrawingsToSerialize.Remove(key);
                }

                if (data.chartLines.Count > 0)
                {
                    SymbolsDrawingsToSerialize.Add(key, data);
                }
            }

            string output = JsonConvert.SerializeObject(SymbolsDrawingsToSerialize, Formatting.Indented);

            return(output);
        }
Example #2
0
        // NOTE: this function is adapted to be run in a thread
        static retData CreateOneReport(Dictionary <string, List <Data.SymbolDayData> > sdds, Data.SymbolInfo symbolInfo)
        {
            string report = "";

            if (SymbolsDrawingsToSerialize.ContainsKey(symbolInfo.FullName) == false)
            {
                return(new retData());
            }

            var sdd = GetSymbolData(sdds, symbolInfo);

            foreach (var line in SymbolsDrawingsToSerialize[symbolInfo.FullName].chartLines)
            {
                if (line.Color != "Lime" && line.Color != "Red")
                {
                    continue;
                }

                DateTime lineStartDate = DateTime.ParseExact(line.StartPointDV.Split('+')[0],
                                                             Data.dateTimeFormat, CultureInfo.InvariantCulture);
                DateTime lineEndDate = DateTime.ParseExact(line.EndPointDV.Split('+')[0],
                                                           Data.dateTimeFormat, CultureInfo.InvariantCulture);
                double extraDaysFromStart = double.Parse(line.StartPointDV.Split('+')[1].Split(';')[0],
                                                         Data.numberFormat);
                double extraDaysToEnd = double.Parse(line.EndPointDV.Split('+')[1].Split(';')[0],
                                                     Data.numberFormat);

                if (lineEndDate.AddDays(extraDaysToEnd) < sdd[0].Date)
                {
                    continue;
                }

                // find sdd at start of line
                var sddIt = 0;
                while (sdd[sddIt].Date > lineStartDate)
                {
                    sddIt++;
                }

                double numDays = sddIt - extraDaysFromStart + extraDaysToEnd;

                double startVal = double.Parse(line.StartPointDV.Split(';')[1],
                                               Data.numberFormat);
                double endVal = double.Parse(line.EndPointDV.Split(';')[1],
                                             Data.numberFormat);
                double step = (endVal - startVal) / numDays;

                double lineValAtSdd0 = startVal + step * sddIt;

                if (sdd[0].Low < lineValAtSdd0 && lineValAtSdd0 < sdd[0].Hi)
                {
                    string e = "";

                    report += "NAME: " + symbolInfo.FullName + " with ";
                    if (step > 0)
                    {
                        e += "ASCENDING line ";
                    }
                    else
                    {
                        e += "DESCENDING line ";
                    }
                    e += "crossed at value " + lineValAtSdd0.ToString("F2", Data.numberFormat);

                    ReportItem ri = new ReportItem();
                    ri.Symbol = symbolInfo.FullName;
                    ri.Date   = sdd[0].Date;
                    ri.Event  = e;
                    ReportItems.Add(ri);

                    report += e + "\n";
                }
            }

            var rd = new retData();

            rd.reportString = report;
            return(rd);
        }