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); }
// 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); }