//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); } } }
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); }
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(); }