Пример #1
0
        //private const int UPDATE_EVERY_X_HOUR = 4;
        private void _updateSeries(PerformanceTick t)
        {
            ////only update graph each x hours
            //if (//!t.IsBalanceUpdated &&
            //  (t.Time.Minute != 0 || t.Time.Hour % UPDATE_EVERY_X_HOUR != 0)) return;

            _addPoint(PlotModelPer, 0, t.Time, t.Balance);
            _addPoint(PlotModelPer, 1, t.Time, t.Equity);
            _addPoint(PlotModelTick, 0, t.Time, t.Last);

            if (t.IsPosClosed)
            {
                bool isProfit = t.CurrentSignal * (t.Last - t.CurrentPosOpenRate) > 0;
                int  index    = isProfit ? 1 : 2;

                var hls = PlotModelTick.Series[index] as HighLowSeries;
                if (hls != null)
                {
                    var dp = new HighLowItem(
                        DateTimeAxis.ToDouble(t.CurrentPosOpenTime),
                        Math.Max(t.Last, t.CurrentPosOpenRate.Value),
                        Math.Min(t.Last, t.CurrentPosOpenRate.Value),
                        t.CurrentPosOpenRate.Value, t.Last);
                    hls.Items.Add(dp);
                }
            }
        }
Пример #2
0
        protected override bool OnScriptCall(SciterElement se, string name, SciterValue[] args, out SciterValue result)
        {
            switch (name)
            {
            case "PlotForecastData":
                var l = new List <HighLowItem>();
                foreach (var item in args[0].AsEnumerable())
                {
                    var dt   = DateTime.Parse(item["date"].Get(""));
                    int high = int.Parse(item["high"].Get(""));
                    int low  = int.Parse(item["low"].Get(""));
                    Debug.Assert(high > low);
                    var entry = new HighLowItem(DateTimeAxis.ToDouble(dt), high, low, high, low);
                    l.Add(entry);
                }
                _serie_candle.ItemsSource = l;
                break;
            }

            result = null;
            return(true);
        }
Пример #3
0
        public void PlotConvergencyCurve(double[] CurveAvg, double[] CurveErr)
        {
            //1. PlotModel data definition
            var PlotModel = new PlotModel();

            Axis Err = new LinearAxis()
            {
                Position      = AxisPosition.Left,
                Title         = "Error", AxisTitleDistance = 15,
                TitleFontSize = 18
            };
            Axis Step = new LinearAxis()
            {
                Position      = AxisPosition.Top,
                Title         = "Iteration Num.", AxisTitleDistance = 30,
                TitleFontSize = 18
            };

            PlotModel.Axes.Add(Err);
            PlotModel.Axes.Add(Step);

            //2. CurveAvg and CurveErr data Plot as Candlesticks
            var PlotData_CurveErr = new CandleStickSeries {
                CandleWidth = 0.85, Color = OxyColors.Red
            };

            double[] CurveErrNorm = new double[CurveErr.Length];
            int      CandleScale  = 1;

            for (int m = 0; m < CurveErr.Length; m++)
            {
                CurveErrNorm[m] = CurveErr[m];
            }
            while (Math.Abs(CurveErrNorm[CurveErrNorm.GetUpperBound(0) - 1] / CurveAvg[CurveErrNorm.GetUpperBound(0) - 1]) > 4)
            {
                for (int m = 0; m < CurveErrNorm.Length; m++)
                {
                    CurveErrNorm[m] *= 0.2;
                }
                CandleScale *= 5;
            }

            for (int i = 0; i < CurveAvg.Length; i++)
            {
                HighLowItem Candle     = new HighLowItem();
                double      CandleAvg  = CurveAvg[i];
                double      CandleStdD = CurveErrNorm[i];

                Candle.High  = CandleAvg + 3 * CandleStdD;
                Candle.Low   = CandleAvg - 3 * CandleStdD;
                Candle.Open  = CandleAvg + 1 * CandleStdD;
                Candle.Close = CandleAvg - 1 * CandleStdD;
                Candle.X     = i;

                PlotData_CurveErr.Items.Add(Candle);
            }
            PlotModel.Series.Add(PlotData_CurveErr);

            //3. PlotModel plot on PlotBoard
            this.PlotBoard.Model = PlotModel;
            PlotModel.Title      = "Convergency per Iteration - " + FitTypeString;
            PlotModel.Subtitle   = "CandleSticks Scale: 1 : " + CandleScale.ToString();
        }
        //private const int UPDATE_EVERY_X_HOUR = 4;
        private void _updateSeries(PerformanceTick t)
        {
            ////only update graph each x hours
              //if (//!t.IsBalanceUpdated &&
              //  (t.Time.Minute != 0 || t.Time.Hour % UPDATE_EVERY_X_HOUR != 0)) return;

              _addPoint(PlotModelPer, 0, t.Time, t.Balance);
              _addPoint(PlotModelPer, 1, t.Time, t.Equity);
              _addPoint(PlotModelTick, 0, t.Time, t.Last);

              if (t.IsPosClosed)
              {
            bool isProfit = t.CurrentSignal * (t.Last - t.CurrentPosOpenRate) > 0;
            int index = isProfit ? 1 : 2;

            var hls = PlotModelTick.Series[index] as HighLowSeries;
            if (hls != null)
            {
              var dp = new HighLowItem(
            DateTimeAxis.ToDouble(t.CurrentPosOpenTime),
            Math.Max(t.Last, t.CurrentPosOpenRate.Value),
            Math.Min(t.Last, t.CurrentPosOpenRate.Value),
            t.CurrentPosOpenRate.Value, t.Last);
              hls.Items.Add(dp);
            }
              }
        }