Пример #1
0
        public FinancialChartViewModel(Series masterSeries)
        {
            StockPrices stockPrices = StockData.GetStockPrices();

            calculatedSeriesData = new CalculatedSeriesData(masterSeries);
            stockSeriesData      = new StockSeriesData(stockPrices, DevExpress.XamarinForms.Charts.SeriesDataType.Financial);
            volumeSeriesData     = new StockSeriesData(stockPrices, DevExpress.XamarinForms.Charts.SeriesDataType.DateTime);
            visualRange          = new DateTimeRange()
            {
                VisualMin = new System.DateTime(2016, 7, 29), VisualMax = new System.DateTime(2016, 10, 15)
            };
        }
Пример #2
0
        /// <summary>
        /// цветовая схема, если null - берется из VisualSettings
        /// </summary>

        /*public Color? CustomColorFillUp { get; set; }
         * public Color? CustomColorFillDn { get; set; }
         * public Color? CustomColorFillEmpty { get; set; }
         * public Color? CustomColorOutlineUp { get; set; }
         * public Color? CustomColorOutlineDn { get; set; }*/

        internal void CopyFrom(StockSeries stockSeries)
        {
            if (stockSeries == null)
            {
                return;
            }
            Owner               = stockSeries.Owner;
            Name                = stockSeries.Name;
            BackColor           = stockSeries.BackColor;
            ForeColor           = stockSeries.ForeColor;
            LineWidth           = stockSeries.LineWidth;
            NumberDecimalDigits = stockSeries.NumberDecimalDigits;
            upFillColor         = stockSeries.upFillColor;
            upLineColor         = stockSeries.upLineColor;
            downFillColor       = stockSeries.downFillColor;
            downLineColor       = stockSeries.downLineColor;
            BarNeutralColor     = stockSeries.BarNeutralColor;
            data                = stockSeries.Data;
        }
Пример #3
0
        /// <summary>
        /// Получить описывающий
        /// </summary>
        /// <param name="candles"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        private ChartEllipse BuildInclusiveEllipse(StockSeriesData candles, int start, int end)
        {
            if (start == end)
            {
                return(null);
            }
            float startvalue, endvalue;

            if (candles[start].high > candles[end].high)
            {
                startvalue = candles[start].high;
                endvalue   = candles[end].low;
            }
            else
            {
                startvalue = candles[start].low;
                endvalue   = candles[end].high;
            }
            var A = new PointD(start, Convert.ToDouble(startvalue));
            var B = new PointD(end, Convert.ToDouble(endvalue));
            var C = new PointD();

            double angle;
            float  cx, cy, a, b;
            var    S = float.NaN;
            bool   correctEllipse = false;

            // поиск охватывающего эллипса
            for (var i = start; i <= end; i++)
            {
                var d = new PointD(i, Convert.ToDouble(candles[i].high));
                correctEllipse = Geometry.GetEllipseParams(A.ToPointF(), B.ToPointF(), d.ToPointF(), out angle, out a, out b, out cx, out cy);
                if (float.IsNaN(S) || (correctEllipse && S < b))
                {
                    S = b;
                    C = d;
                }

                d = new PointD(i, Convert.ToDouble(candles[i].low));
                correctEllipse = Geometry.GetEllipseParams(A.ToPointF(), B.ToPointF(), d.ToPointF(), out angle, out a, out b, out cx, out cy);
                if (float.IsNaN(S) || (correctEllipse && S < b))
                {
                    S = b;
                    C = d;
                }
            }

            correctEllipse = // пересчитываем параметры эллипса
                             Geometry.GetEllipseParams(A.ToPointF(), B.ToPointF(), C.ToPointF(), out angle, out a, out b, out cx, out cy);
            if (correctEllipse)
            {   // можно построить эллипс - рисуем его
                var newEllipse = new ChartEllipse {
                    BuildTangent = true, angle = angle, a = a, b = b, cx = cx, cy = cy
                };

                newEllipse.AddPoint((float)A.X, (float)A.Y);
                newEllipse.AddPoint((float)B.X, (float)B.Y);
                newEllipse.AddPoint((float)C.X, (float)C.Y);

                var minIndex = newEllipse.points.Min(p => p.X);
                newEllipse.DateStart = owner.StockSeries.GetCandleOpenTimeByIndex((int)minIndex);
                return(newEllipse);
            }
            return(null);
        }
Пример #4
0
 // Methods
 protected StockSeries(string name)
     : base(name)
 {
     data = new StockSeriesData();
 }