private void btnApplyPriceStyle_Click(object sender, RoutedEventArgs e) { string tag = ((Control)cmbPriceStyles.SelectedItem).Tag.ToString(); PriceStyleEnum priceStyle = PriceStyleEnum.psStandard; switch (tag) { case "standard": priceStyle = PriceStyleEnum.psStandard; break; case "kagi": priceStyle = PriceStyleEnum.psKagi; _stockChartX.SetPriceStyleParam(0, 0); //Reversal size _stockChartX.SetPriceStyleParam(1, (double)ChartDataType.Points); break; case "equivolume": priceStyle = PriceStyleEnum.psEquiVolume; break; case "candlevolume": priceStyle = PriceStyleEnum.psCandleVolume; break; case "equivolumeshadow": priceStyle = PriceStyleEnum.psEquiVolumeShadow; break; case "pointandfigure": priceStyle = PriceStyleEnum.psPointAndFigure; _stockChartX.SetPriceStyleParam(0, 0); //Allow StockChartX to figure the box size _stockChartX.SetPriceStyleParam(1, 3); //Reversal size break; case "renko": priceStyle = PriceStyleEnum.psRenko; _stockChartX.SetPriceStyleParam(0, 1); //Box size break; case "threelinebreak": priceStyle = PriceStyleEnum.psThreeLineBreak; _stockChartX.SetPriceStyleParam(0, 3); //Three line break (could be 1 to 50 line break) break; case "heikinashi": priceStyle = PriceStyleEnum.psHeikinAshi; break; } _stockChartX.PriceStyle = priceStyle; _stockChartX.Update(); }
internal override void Paint(object drawingContext) { //if (_painted) return; Style ps = null; if (_priceStyleType != _chartPanel._chartX._priceStyle || _seriesTypeType != _seriesType) { if (_chartPanel._chartX._priceStyle != PriceStyleEnum.psStandard) { switch (_chartPanel._chartX._priceStyle) { case PriceStyleEnum.psKagi: ps = new Kagi(this); break; case PriceStyleEnum.psCandleVolume: case PriceStyleEnum.psEquiVolume: case PriceStyleEnum.psEquiVolumeShadow: ps = new EquiVolume(this); break; case PriceStyleEnum.psPointAndFigure: ps = new PointAndFigure(this); break; case PriceStyleEnum.psRenko: ps = new Renko(this); break; case PriceStyleEnum.psThreeLineBreak: ps = new ThreeLineBreak(this); break; case PriceStyleEnum.psHeikinAshi: ps = new HeikinAshi(this); break; } } else { switch (_seriesType) { case SeriesTypeEnum.stCandleChart: ps = new Candles(this); break; case SeriesTypeEnum.stStockBarChartHLC: case SeriesTypeEnum.stStockBarChart: ps = new PriceStyles.Stock(this); break; case SeriesTypeEnum.stLineChart: ps = new Linear(this); break; } } if (_priceStyle != null) { _priceStyle.RemovePaint(); } } if (_darvasBoxes != null) { _darvasBoxes.RemovePaint(); } if (_chartPanel._chartX._priceStyle == PriceStyleEnum.psStandard || _chartPanel._chartX._priceStyle == PriceStyleEnum.psHeikinAshi) { if (_darvasBoxes == null) { _darvasBoxes = new DarvasBoxes(this); } _darvasBoxes.SetSeriesStock(this); if (_chartPanel._chartX._darwasBoxes) { _darvasBoxes.Paint(); } } if (_priceStyle != null || ps != null) { (ps ?? _priceStyle).SetStockSeries(this); Style psToPaint = ps ?? _priceStyle; bool res; if (psToPaint is Candles && drawingContext != null) { res = psToPaint.Paint(drawingContext); } else { res = psToPaint.Paint(); } //if (!(ps ?? _priceStyle).Paint()) return; if (!res) { return; } } if (Selected) { ShowSelection(); } if (ps == null) { return; } _priceStyle = ps; _priceStyleType = _chartPanel._chartX._priceStyle; _seriesTypeType = _seriesType; }
///<summary> /// Initializes a new instance of the <seealso cref="StockChartX"/> class. ///</summary> public StockChartX() { _isBeta = false; #if WPF Action <Application> a = application => { if (application != null) { OwnerWindow = application.MainWindow; } }; //RenderOptions.SetEdgeMode(this, EdgeMode.Aliased); Application appCurrent = Application.Current; if (appCurrent != null) { if (appCurrent.CheckAccess()) { a(appCurrent); } else { appCurrent.Dispatcher.BeginInvoke(a, appCurrent); } } #endif #if SILVERLIGHT DefaultStyleKey = typeof(StockChartX); #endif _dataManager = new DataManager.DataManager(this); Background = Brushes.Black; Foreground = Brushes.White; _startIndex = _endIndex = 0; //no data. all panels' data are related to these indexes _darwasBoxes = false; _displatTitles = true; _useVolumeUpDownColors = false; _useLineSeriesColors = false; _horizontalLinesColor = Colors.White; _candleDownOutlineColor = null; _candleUpOutlineColor = null; _barSpacing = 0; _barInterval = 60; _barWidth = 1; _darvasPct = 0.01; _priceStyle = PriceStyleEnum.psStandard; _status = ChartStatus.Ready; YGridStepType = YGridStepType.MinimalGap; _timers.RegisterTimer(TimerMove, MoveChart, 50); _timers.RegisterTimer(TimerResize, ResizeChart, 50); _timers.RegisterTimer(TimerUpdate, Update, 50); _timers.RegisterTimer(TimerCrossHairs, MoveCrossHairs, 50); _timers.RegisterTimer(TimerInfoPanel, ShowInfoPanelInternal, 50); #if WPF MouseWheel += Chart_MouseWheel; #endif //initialize needed variables CheckRegistration(); #if SILVERLIGHT Mouse.RegisterMouseMoveAbleElement(this); MouseMove += (sender, e) => Mouse.UpdateMousePosition(this, e.GetPosition(this)); #endif }
public void ApplyPriceStyle(string tag, int size = 1) { PriceStyleTag = tag; if (_stockChartX.RecordCount > 0) { PriceStyleEnum priceStyle = PriceStyleEnum.psStandard; SeriesTypeEnum seriesType = SeriesTypeEnum.stCandleChart; switch (tag) { case "bar": seriesType = SeriesTypeEnum.stStockBarChart; break; case "line": seriesType = SeriesTypeEnum.stLineChart; break; case "standard": priceStyle = PriceStyleEnum.psStandard; break; case "kagi": priceStyle = PriceStyleEnum.psKagi; _stockChartX.SetPriceStyleParam(0, 0); //Reversal size _stockChartX.SetPriceStyleParam(1, (double)ChartDataType.Points); break; case "equivolume": priceStyle = PriceStyleEnum.psEquiVolume; break; case "candlevolume": priceStyle = PriceStyleEnum.psCandleVolume; break; case "equivolumeshadow": priceStyle = PriceStyleEnum.psEquiVolumeShadow; break; case "pointandfigure": priceStyle = PriceStyleEnum.psPointAndFigure; _stockChartX.SetPriceStyleParam(0, 0); //Allow StockChartX to figure the box size _stockChartX.SetPriceStyleParam(1, 3); //Reversal size break; case "renko": priceStyle = PriceStyleEnum.psRenko; _stockChartX.SetPriceStyleParam(0, 1); //Box size break; case "threelinebreak": priceStyle = PriceStyleEnum.psThreeLineBreak; _stockChartX.SetPriceStyleParam(0, 3); //Three line break (could be 1 to 50 line break) break; case "heikinashi": priceStyle = PriceStyleEnum.psHeikinAshi; break; } if (OHLCSeries != null && OHLCSeries.Length > 3) { OHLCSeries[0].SeriesType = seriesType; OHLCSeries[1].SeriesType = seriesType; OHLCSeries[2].SeriesType = seriesType; OHLCSeries[3].SeriesType = seriesType; } _stockChartX.PriceStyle = priceStyle; SetLinesSize(size); _stockChartX.Update(); } }