public string GetToolTip() { DealMarker enter = MarkerType == DealMarkerType.Вход ? this : markers.Find(m => m.exitPair.HasValue ? m.exitPair.Value == id : false); DealMarker exit = MarkerType == DealMarkerType.Вход ? exitPair.HasValue ? markers.Find(m => m.id == exitPair.Value) : null : this; string strPriceExit = "?", strTimeExit = "?", strResult = "-"; string strPriceEnter = enter.Price.ToString("f4"); string strTimeEnter = enter.Time.ToString("dd.MM.yy HH:mm"); if (exit != null) { strPriceExit = exit.Price.ToString("f4"); strTimeExit = exit.Time.ToString("dd.MM.yy HH:mm"); var delta = (int)enter.Side * (exit.Price - enter.Price); var deltaPoints = DalSpot.Instance.GetPointsValue(owner.Symbol, (decimal)delta); strResult = deltaPoints.ToString("f1"); } var sb = new StringBuilder(); sb.AppendLine(string.Format("{0} - {1}", strPriceEnter, strPriceExit)); sb.AppendLine(string.Format("{0} - {1}", strTimeEnter, strTimeExit)); sb.AppendLine(string.Format("{0} пп", strResult)); return(sb.ToString()); }
public void AddPoint(PointF ptScreen, bool buySide) { var ptWorld = Conversion.ScreenToWorld(new PointD(ptScreen.X, ptScreen.Y), Owner.WorldRect, Owner.CanvasRect); var side = buySide ? DealType.Buy : DealType.Sell; // определить время с точностью до минуты var timeOpen = Chart.StockSeries.GetCandleOpenTimeByIndex((int)ptWorld.X); var timeNext = Chart.StockSeries.GetCandleOpenTimeByIndex((int)ptWorld.X + 1); var deltaMinutes = (timeNext - timeOpen).TotalMinutes; var time = timeOpen.AddMinutes(deltaMinutes * (ptWorld.X - (int)ptWorld.X)); // вход для этого выхода var enterMarket = data.FirstOrDefault(m => m.MarkerType == DealMarker.DealMarkerType.Вход && !m.exitPair.HasValue); // новый объект var dm = new DealMarker(Chart, data, DealMarker.DealMarkerType.Вход, side, ptWorld.X, ptWorld.Y, time) { Owner = this }; if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) { dm.AjustColorScheme(Owner.Owner.Owner); } // закрыть пару и проставить ссылку на выход из сделки if (enterMarket != null) { dm.MarkerType = DealMarker.DealMarkerType.Выход; dm.Side = enterMarket.Side; enterMarket.exitPair = dm.id; } data.Add(dm); }
public override IChartInteractiveObject LoadObject(XmlElement objectNode, CandleChartControl owner, bool trimObjectsOutOfHistory = false) { var obj = new DealMarker(Chart, data); obj.LoadFromXML(objectNode, owner); obj.Owner = this; data.Add(obj); return(obj); }
public override IChartInteractiveObject LoadObject(XmlElement objectNode, CandleChartControl owner, bool trimObjectsOutOfHistory = false) { var obj = new DealMarker(Chart, data); obj.LoadFromXML(objectNode, owner); obj.Owner = this; data.Add(obj); return obj; }
public void AddPoint(PointF ptScreen, bool buySide) { var ptWorld = Conversion.ScreenToWorld(new PointD(ptScreen.X, ptScreen.Y), Owner.WorldRect, Owner.CanvasRect); var side = buySide ? DealType.Buy : DealType.Sell; // определить время с точностью до минуты var timeOpen = Chart.StockSeries.GetCandleOpenTimeByIndex((int) ptWorld.X); var timeNext = Chart.StockSeries.GetCandleOpenTimeByIndex((int)ptWorld.X + 1); var deltaMinutes = (timeNext - timeOpen).TotalMinutes; var time = timeOpen.AddMinutes(deltaMinutes*(ptWorld.X - (int) ptWorld.X)); // вход для этого выхода var enterMarket = data.FirstOrDefault(m => m.MarkerType == DealMarker.DealMarkerType.Вход && !m.exitPair.HasValue); // новый объект var dm = new DealMarker(Chart, data, DealMarker.DealMarkerType.Вход, side, ptWorld.X, ptWorld.Y, time) { Owner = this }; if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) dm.AjustColorScheme(Owner.Owner.Owner); // закрыть пару и проставить ссылку на выход из сделки if (enterMarket != null) { dm.MarkerType = DealMarker.DealMarkerType.Выход; dm.Side = enterMarket.Side; enterMarket.exitPair = dm.id; } data.Add(dm); }
private void ShowOrders(List<MarketOrder> orders, CandleChartControl chart) { var markers = new List<DealMarker>(); foreach (var order in orders) { var isSo = !string.IsNullOrEmpty(order.Comment) && (order.Comment.Contains("stopout") || order.Comment.Contains("[so]")); var candleIndex = chart.chart.StockSeries.GetDoubleIndexByTime(order.TimeEnter); var title = string.Format("#{0} {1} {2} @ {3}", order.ID, order.Side > 0 ? "BUY" : "SELL", order.Symbol, order.PriceExit.Value.ToStringUniformPriceFormat(true)); var resultComment = !order.IsClosed ? "" : string.Format(" - {0}, {1} USD", order.PriceExit.Value.ToStringUniformPriceFormat(true), order.ResultDepo.ToStringUniformMoneyFormat()); var comment = string.Format("#{0} {1} {2} {3} @{4}{5}", order.ID, order.Side > 0 ? "BUY" : "SELL", order.Volume, order.Symbol, order.PriceEnter.ToStringUniformPriceFormat(true), resultComment); var enterSign = new DealMarker(chart.chart, markers, DealMarker.DealMarkerType.Вход, (DealType) order.Side, candleIndex, order.PriceEnter, order.TimeEnter) { Comment = comment, ColorText = isSo ? Color.Red : Color.Black, Name = title }; markers.Add(enterSign); chart.seriesMarker.data.Add(enterSign); if (order.TimeExit.HasValue) { var candleExitIndex = chart.chart.StockSeries.GetDoubleIndexByTime(order.TimeExit.Value); var exitSign = new DealMarker(chart.chart, markers, DealMarker.DealMarkerType.Выход, (DealType) order.Side, candleExitIndex, order.PriceExit.Value, order.TimeExit.Value) { Comment = comment, ColorText = isSo ? Color.Red : Color.Black, Name = title }; enterSign.exitPair = exitSign.id; markers.Add(exitSign); chart.seriesMarker.data.Add(exitSign); } } }