using MuchInfo.Chart.Data.Interfaces; using MuchInfo.Chart.WPF.Primitives.Interfaces; using System; using System.Diagnostics; namespace MuchInfo.Chart.WPF.Primitives.Drawing { public abstract class Drawing2PointLinkedBase : Drawing2PointBase { protected Drawing2PointLinkedBase() { } public abstract override bool CanPlotOnAllSymbols(); protected ILineDataSetWithUid GetLinkedPlot() { bool flag = this.mLastScale != null && this.mLastScale.AllPlots.Count > 0; ILineDataSetWithUid result; if (flag) { PlotBase plotBase = this.mLastScale.AllPlots[0]; flag = (plotBase is LinePlot); if (flag) { result = ((LinePlot)plotBase).LinePlot_4866(); return result; } } result = null; return result; } protected void CalcHighLowForPoints(DateTime date1, DateTime date2, ref float High, ref float Low) { ILineDataSet linkedPlot = this.GetLinkedPlot(); bool flag = linkedPlot == null; checked { if (!flag) { int num = -1; int num2 = -1; DateTime dateTime = date1; DateTime dateTime2 = date2; flag = (DateTime.Compare(dateTime, dateTime2) > 0); if (flag) { DateTime dateTime3 = dateTime; dateTime = dateTime2; dateTime2 = dateTime3; } int num3 = linkedPlot.DataPoints.Count - 1; while (true) { int arg_E8_0 = num3; int num4 = 0; if (arg_E8_0 < num4) { break; } flag = (num2 == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime2) <= 0); if (flag) { num2 = num3; } flag = (num == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime) <= 0); if (flag) { num = num3; } flag = (num2 >= 0 && num >= 0); if (flag) { break; } num3 += -1; } flag = (num == -1 || num2 == -1); if (!flag) { int arg_10B_0 = num; int num5 = num2; int num6 = arg_10B_0; while (true) { int arg_24B_0 = num6; int num4 = num5; if (arg_24B_0 > num4) { break; } flag = (num6 == num); if (flag) { bool flag2 = linkedPlot.DataPoints[num6] is IOHLCDataPoint; if (flag2) { High = ((IOHLCDataPoint)linkedPlot.DataPoints[num6]).High; Low = ((IOHLCDataPoint)linkedPlot.DataPoints[num6]).Low; } else { High = linkedPlot.DataPoints[num6].Value; Low = linkedPlot.DataPoints[num6].Value; } } else { bool flag2 = linkedPlot.DataPoints[num6] is IOHLCDataPoint; if (flag2) { High = Math.Max(High, ((IOHLCDataPoint)linkedPlot.DataPoints[num6]).High); Low = Math.Min(Low, ((IOHLCDataPoint)linkedPlot.DataPoints[num6]).Low); } else { High = Math.Max(High, linkedPlot.DataPoints[num6].Value); Low = Math.Min(Low, linkedPlot.DataPoints[num6].Value); } } num6++; } } } } } protected void CalcRegressionForPoints(DateTime Date1, DateTime Date2, ref float Val1, ref float Val2) { ILineDataSet linkedPlot = this.GetLinkedPlot(); bool flag = linkedPlot == null; checked { if (!flag) { int num = -1; int num2 = -1; DateTime dateTime = Date1; DateTime dateTime2 = Date2; bool flag2 = false; flag = (DateTime.Compare(dateTime, dateTime2) > 0); if (flag) { flag2 = true; DateTime dateTime3 = dateTime; dateTime = dateTime2; dateTime2 = dateTime3; } int num3 = linkedPlot.DataPoints.Count - 1; while (true) { int arg_F3_0 = num3; int num4 = 0; if (arg_F3_0 < num4) { break; } flag = (num2 == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime2) <= 0); if (flag) { num2 = num3; } flag = (num == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime) <= 0); if (flag) { num = num3; } flag = (num2 >= 0 && num >= 0); if (flag) { break; } num3 += -1; } flag = (num == -1 || num2 == -1); if (!flag) { int num5 = num2 - num + 1; flag = (num5 == 0); if (!flag) { int arg_12F_0 = num; int num6 = num2; int num7 = arg_12F_0; double num9 = 0; double num10 = 0; double num11 = 0; double num12 = 0; while (true) { int arg_19D_0 = num7; int num4 = num6; if (arg_19D_0 > num4) { break; } int num8 = num7 - num + 1; unchecked { num9 += (double)num8; num10 += (double)linkedPlot.DataPoints[num7].Value; num11 += (double)(linkedPlot.DataPoints[num7].Value * (float)num8); num12 += Math.Pow((double)num8, 2.0); } num7++; } unchecked { flag = ((double)num5 * num12 - Math.Pow(num9, 2.0) == 0.0); if (!flag) { double num13 = ((double)num5 * num11 - num9 * num10) / ((double)num5 * num12 - Math.Pow(num9, 2.0)); double num14 = (num10 - num13 * num9) / (double)num5; flag = flag2; if (flag) { Val2 = (float)(num13 * 1.0 + num14); Val1 = (float)(num13 * (double)num5 + num14); } else { Val1 = (float)(num13 * 1.0 + num14); Val2 = (float)(num13 * (double)num5 + num14); } } } } } } } } protected float CalcRaffRegressionForPoints(DateTime Date1, DateTime Date2, ref float Val1, ref float Val2) { ILineDataSet linkedPlot = this.GetLinkedPlot(); bool flag = linkedPlot == null; checked { float result = 0f; if (!flag) { int num = -1; int num2 = -1; DateTime dateTime = Date1; DateTime dateTime2 = Date2; bool flag2 = false; flag = (DateTime.Compare(dateTime, dateTime2) > 0); if (flag) { flag2 = true; DateTime dateTime3 = dateTime; dateTime = dateTime2; dateTime2 = dateTime3; } int num3 = linkedPlot.DataPoints.Count - 1; while (true) { int arg_F8_0 = num3; int num4 = 0; if (arg_F8_0 < num4) { break; } flag = (num2 == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime2) <= 0); if (flag) { num2 = num3; } flag = (num == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime) <= 0); if (flag) { num = num3; } flag = (num2 >= 0 && num >= 0); if (flag) { break; } num3 += -1; } flag = (num == -1 || num2 == -1); if (!flag) { int num5 = num2 - num + 1; flag = (num5 == 0); if (!flag) { int arg_134_0 = num; int num6 = num2; int num7 = arg_134_0; double num9 = 0; double num10 = 0; double num11 = 0; double num12 = 0; while (true) { int arg_1A2_0 = num7; int num4 = num6; if (arg_1A2_0 > num4) { break; } int num8 = num7 - num + 1; unchecked { num9 += (double)num8; num10 += (double)linkedPlot.DataPoints[num7].Value; num11 += (double)(linkedPlot.DataPoints[num7].Value * (float)num8); num12 += Math.Pow((double)num8, 2.0); } num7++; } unchecked { flag = ((double)num5 * num12 - Math.Pow(num9, 2.0) == 0.0); if (!flag) { double num13 = ((double)num5 * num11 - num9 * num10) / ((double)num5 * num12 - Math.Pow(num9, 2.0)); double num14 = (num10 - num13 * num9) / (double)num5; flag = flag2; if (flag) { Val2 = (float)(num13 * 1.0 + num14); Val1 = (float)(num13 * (double)num5 + num14); } else { Val1 = (float)(num13 * 1.0 + num14); Val2 = (float)(num13 * (double)num5 + num14); } float num15 = 0f; int arg_257_0 = num; int num16 = num2; int num17 = arg_257_0; while (true) { int arg_328_0 = num17; int num4 = num16; if (arg_328_0 > num4) { break; } float num18 = (float)(num13 * (double)checked(num17 - num + 1) + num14); flag = (linkedPlot.DataPoints[num17] is IOHLCDataPoint); float num19; float num20; if (flag) { num19 = Math.Abs(num18 - ((IOHLCDataPoint)linkedPlot.DataPoints[num17]).High); num20 = Math.Abs(num18 - ((IOHLCDataPoint)linkedPlot.DataPoints[num17]).Low); } else { num19 = Math.Abs(num18 - linkedPlot.DataPoints[num17].Value); num20 = Math.Abs(num18 - linkedPlot.DataPoints[num17].Value); } num15 = Math.Max(num15, Math.Max(num19, num20)); checked { num17++; } } result = num15; } } } } } return result; } } protected float StandardDeviationBetweenPoints(DateTime Date1, DateTime Date2) { ILineDataSet linkedPlot = this.GetLinkedPlot(); bool flag = linkedPlot == null; checked { float result = 0f; if (!flag) { int num = -1; int num2 = -1; DateTime dateTime = Date1; DateTime dateTime2 = Date2; flag = (DateTime.Compare(dateTime, dateTime2) > 0); if (flag) { DateTime dateTime3 = dateTime; dateTime = dateTime2; dateTime2 = dateTime3; } int num3 = linkedPlot.DataPoints.Count - 1; while (true) { int arg_F3_0 = num3; int num4 = 0; if (arg_F3_0 < num4) { break; } flag = (num2 == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime2) <= 0); if (flag) { num2 = num3; } flag = (num == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime) <= 0); if (flag) { num = num3; } flag = (num2 >= 0 && num >= 0); if (flag) { break; } num3 += -1; } flag = (num == -1 || num2 == -1); if (!flag) { int num5 = num2 - num + 1; flag = (num5 == 0); if (!flag) { int arg_12F_0 = num; int num6 = num2; int num7 = arg_12F_0; double num8 = 0; while (true) { int arg_15A_0 = num7; int num4 = num6; if (arg_15A_0 > num4) { break; } unchecked { num8 += (double)linkedPlot.DataPoints[num7].Value; } num7++; } double num9 = num8 / (double)num5; int arg_168_0 = num; int num10 = num2; int num11 = arg_168_0; double num12 = 0; while (true) { int arg_1A3_0 = num11; int num4 = num10; if (arg_1A3_0 > num4) { break; } unchecked { num12 += Math.Pow((double)linkedPlot.DataPoints[num11].Value - num9, 2.0); } num11++; } num12 = Math.Abs(num12 / (double)num5); result = (float)Math.Sqrt(num12); } } } return result; } } protected float StandardErrorBetweenPoints(DateTime Date1, DateTime Date2) { ILineDataSet linkedPlot = this.GetLinkedPlot(); bool flag = linkedPlot == null; checked { float result = 0f; if (!flag) { int num = -1; int num2 = -1; DateTime dateTime = Date1; DateTime dateTime2 = Date2; flag = (DateTime.Compare(dateTime, dateTime2) > 0); if (flag) { DateTime dateTime3 = dateTime; dateTime = dateTime2; dateTime2 = dateTime3; } int num3 = linkedPlot.DataPoints.Count - 1; while (true) { int arg_F3_0 = num3; int num4 = 0; if (arg_F3_0 < num4) { break; } flag = (num2 == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime2) <= 0); if (flag) { num2 = num3; } flag = (num == -1 && DateTime.Compare(linkedPlot.DataPoints[num3].Date, dateTime) <= 0); if (flag) { num = num3; } flag = (num2 >= 0 && num >= 0); if (flag) { break; } num3 += -1; } flag = (num == -1 || num2 == -1); if (!flag) { int num5 = num2 - num + 1; flag = (num5 == 0); if (!flag) { int arg_12F_0 = num; int num6 = num2; int num7 = arg_12F_0; double num8 = 0; while (true) { int arg_15A_0 = num7; int num4 = num6; if (arg_15A_0 > num4) { break; } unchecked { num8 += (double)linkedPlot.DataPoints[num7].Value; } num7++; } double num9 = num8 / (double)num5; int arg_168_0 = num; int num10 = num2; int num11 = arg_168_0; double num12 = 0; while (true) { int arg_1A3_0 = num11; int num4 = num10; if (arg_1A3_0 > num4) { break; } unchecked { num12 += Math.Pow((double)linkedPlot.DataPoints[num11].Value - num9, 2.0); } num11++; } num12 = Math.Abs(num12 / (double)num5); result = (float)(Math.Sqrt(num12) / Math.Sqrt((double)num5)); } } } return result; } } } }