public void Calculate() { SetValues(); calculationData = new CalculationData(); if (pointsList.Count == 0) { calculationData = OnCalculationOfFirstSwingPointRequest(); } else if (owner.State == State.Historical) { calculationData = OnCalculationOfEachBarSwingPointRequest(); calculationStage = CalculationStage.EachBarSwingPoint; } else if (owner.State == State.Realtime) { calculationData = OnCalculationOFEachTickSwingPointRequest(); calculationStage = CalculationStage.EachTickSwingPoint; } if (calculationData.isNewSwing) { AddOrUpdatePointsIfNewSwing(calculationData, calculationStage); } }
private void AddOrUpdatePointsIfNewSwing(CalculationData calculationData, CalculationStage calculationStage) { switch (calculationStage) { case CalculationStage.FirstPoint: if (calculationData.sideSwing == Point.SidePoint.High) { AddHigh(pointsList.Count, calculationData.price, calculationData.barIndex, calculationData.sideSwing); } else if (calculationData.sideSwing == Point.SidePoint.Low) { AddLow(pointsList.Count, calculationData.price, calculationData.barIndex, calculationData.sideSwing); } else if (calculationData.sideSwing == Point.SidePoint.Unknow && pointsList.Count == 0) { AddUnknow(pointsList.Count, owner.Open.GetValueAt(0), 0, calculationData.sideSwing); } break; case CalculationStage.EachBarSwingPoint: DefaultAddUpdatePointsManagement(calculationData); break; case CalculationStage.EachTickSwingPoint: DefaultAddUpdatePointsManagement(calculationData); break; } }