public override IChartInteractiveObject LoadObject(XmlElement objectNode, CandleChartControl owner, bool trimObjectsOutOfHistory = false) { var obj = new ProjectionPair(); obj.LoadFromXML(objectNode, owner); obj.Owner = this; data.Add(obj); return(obj); }
/// <summary> /// от двух пар последних точек ЗЗ построить проекции /// </summary> public void BuildSeries(ChartControl chart) { spans.data.Clear(); //spans.ExtendYAxis = ExtendChartBounds; // получить точки Зиг-Зага var pivots = ZigZag.GetPivots(chart.StockSeries.Data.Candles, ThresholdPercent, ZigZagSourceType); if (pivots.Count < 3) return; // построить проекции var pointA = pivots[pivots.Count - 3]; var pointB = pivots[pivots.Count - 2]; var pointC = pivots[pivots.Count - 1]; var spanA = new ProjectionPair(pointA.a, pointA.b) { HideFarParts = false, Color = pointB.b > pointA.b ? ColorLineLower : ColorLineUpper, ProjectionLength = ProjectionBars, LevelsProj = LevelsProj, Markers = Markers }; spanA.AddPoint(pointB.a, pointB.b); var spanB = new ProjectionPair(pointB.a, pointB.b) { HideFarParts = false, Color = pointB.b < pointA.b ? ColorLineLower : ColorLineUpper, ProjectionLength = ProjectionBars, LevelsProj = LevelsProj, Markers = Markers }; spanB.AddPoint(pointC.a, pointC.b); spans.data.Add(spanA); spans.data.Add(spanB); // коррекции? if (!CorrectionEnabled) return; if (correctionBcLength > 0) { var spanC = new ProjectionPair(pointB.a, pointB.b) { HideFarParts = false, Color = pointB.b < pointA.b ? ColorLineLower : ColorLineUpper, ProjectionLength = CorrectionBcLength, LevelsCorr = LevelsCorr, IsExtension = false, IsCorrection = true, Markers = Markers }; spanC.AddPoint(pointC.a, pointC.b); spans.data.Add(spanC); } if (correctionAbLength > 0) { var spanC = new ProjectionPair(pointA.a, pointA.b) { HideFarParts = false, Color = pointB.b < pointA.b ? ColorLineLower : ColorLineUpper, ProjectionLength = CorrectionAbLength, LevelsCorr = LevelsCorr, IsExtension = false, IsCorrection = true, Markers = Markers }; spanC.AddPoint(pointB.a, pointB.b); spans.data.Add(spanC); } }
/// <summary> /// добавить точку в пару, определяющую проекцию /// либо создать новую пару /// либо удалить точку (или всю пару) /// </summary> protected override void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) return; // получить индекс свечки, в которую было попадание var point = GetCandlePoint(e); if (!point.HasValue) return; // перебрать все пары // при попадании в точку пары удалить ее for (var i = 0; i < data.Count; i++) { var p = data[i]; if (p.IsInPoint(point.Value.a, point.Value.b)) { data.RemoveAt(i); return; } } var defaultCorrectionObj = SeriesEditParameter.TryGetParamValue(parameters, "Correction"); var defaultCorrection = defaultCorrectionObj == null ? false : (bool)defaultCorrectionObj; var defaultHideErrorsObj = SeriesEditParameter.TryGetParamValue(parameters, "HideMisses"); var defaultHideErrors = defaultHideErrorsObj == null ? true : (bool)defaultHideErrorsObj; var defaultMarkersObj = SeriesEditParameter.TryGetParamValue(parameters, "Labels"); var defaultMarkers = defaultMarkersObj != null ? (ProjectionPair.MarkerPlacement) defaultMarkersObj : ProjectionPair.MarkerPlacement.Слева; var levelsProjStr = SeriesEditParameter.TryGetParamValue(parameters, "ExpansionLevels", "0.618 1 1.618"); var levelsCorrStr = SeriesEditParameter.TryGetParamValue(parameters, "CorrectionLevels", "0.236 0.382 0.618"); var correctWithProj = SeriesEditParameter.TryGetParamValue(parameters, "CorrectionPlusProjections", false); var barsLength = SeriesEditParameter.TryGetParamValue(parameters, "LengthInBars", 60); // добавить новую пару var shiftPressed = ((modifierKeys & Keys.Shift) == Keys.Shift); var pair = new ProjectionPair(point.Value.a, point.Value.b) { IsCorrection = defaultCorrection ^ shiftPressed, HideFarParts = defaultHideErrors ^ shiftPressed, IsExtension = defaultCorrection ^ !shiftPressed, Color = fiboProjectionColors[fiboProjectionColorsIndex++], Markers = defaultMarkers, Owner = this, LevelsProj = levelsProjStr, LevelsCorr = levelsCorrStr, HideLine = false, IsBeingCreated = true }; pair.points.Add(new Cortege2<int, float>(point.Value.a, point.Value.b)); if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) pair.AjustColorScheme(Owner.Owner.Owner); if (correctWithProj) { pair.IsCorrection = true; pair.IsExtension = true; } if (barsLength > 0) pair.ProjectionLength = barsLength; data.Add(pair); if (fiboProjectionColorsIndex >= fiboProjectionColors.Length) fiboProjectionColorsIndex = 0; }
public override IChartInteractiveObject LoadObject(XmlElement objectNode, CandleChartControl owner, bool trimObjectsOutOfHistory = false) { var obj = new ProjectionPair(); obj.LoadFromXML(objectNode, owner); obj.Owner = this; data.Add(obj); return obj; }
/// <summary> /// добавить точку в пару, определяющую проекцию /// либо создать новую пару /// либо удалить точку (или всю пару) /// </summary> protected override void OnMouseDown(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) { return; } // получить индекс свечки, в которую было попадание var point = GetCandlePoint(e); if (!point.HasValue) { return; } // перебрать все пары // при попадании в точку пары удалить ее for (var i = 0; i < data.Count; i++) { var p = data[i]; if (p.IsInPoint(point.Value.a, point.Value.b)) { data.RemoveAt(i); return; } } var defaultCorrectionObj = SeriesEditParameter.TryGetParamValue(parameters, "Correction"); var defaultCorrection = defaultCorrectionObj == null ? false : (bool)defaultCorrectionObj; var defaultHideErrorsObj = SeriesEditParameter.TryGetParamValue(parameters, "HideMisses"); var defaultHideErrors = defaultHideErrorsObj == null ? true : (bool)defaultHideErrorsObj; var defaultMarkersObj = SeriesEditParameter.TryGetParamValue(parameters, "Labels"); var defaultMarkers = defaultMarkersObj != null ? (ProjectionPair.MarkerPlacement)defaultMarkersObj : ProjectionPair.MarkerPlacement.Слева; var levelsProjStr = SeriesEditParameter.TryGetParamValue(parameters, "ExpansionLevels", "0.618 1 1.618"); var levelsCorrStr = SeriesEditParameter.TryGetParamValue(parameters, "CorrectionLevels", "0.236 0.382 0.618"); var correctWithProj = SeriesEditParameter.TryGetParamValue(parameters, "CorrectionPlusProjections", false); var barsLength = SeriesEditParameter.TryGetParamValue(parameters, "LengthInBars", 60); // добавить новую пару var shiftPressed = ((modifierKeys & Keys.Shift) == Keys.Shift); var pair = new ProjectionPair(point.Value.a, point.Value.b) { IsCorrection = defaultCorrection ^ shiftPressed, HideFarParts = defaultHideErrors ^ shiftPressed, IsExtension = defaultCorrection ^ !shiftPressed, Color = fiboProjectionColors[fiboProjectionColorsIndex++], Markers = defaultMarkers, Owner = this, LevelsProj = levelsProjStr, LevelsCorr = levelsCorrStr, HideLine = false, IsBeingCreated = true }; pair.points.Add(new Cortege2 <int, float>(point.Value.a, point.Value.b)); if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) { pair.AjustColorScheme(Owner.Owner.Owner); } if (correctWithProj) { pair.IsCorrection = true; pair.IsExtension = true; } if (barsLength > 0) { pair.ProjectionLength = barsLength; } data.Add(pair); if (fiboProjectionColorsIndex >= fiboProjectionColors.Length) { fiboProjectionColorsIndex = 0; } }