Beispiel #1
0
        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();
        }
Beispiel #2
0
        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
        }
Beispiel #4
0
        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();
            }
        }