public void AddInteractivePoint(string id, PaneSides side, bool isRemovable, SystemColor color, MarketPoint position) { var colorTSlab = new TsLabColor(color.ToArgb()); pane.AddInteractivePoint(id, side, isRemovable, colorTSlab, position); }
private void DrawTrades(ISecurity sec, IGraphPane pane) { // TODO: нужна такая проверка? //if (!sec.IsRealtime) //{ // string msg = RM.GetStringFormat("OptHandlerMsg.PositionsManager.RunAsAgent", // Context.Runtime.TradeName + ":" + MsgId, sec.IsRealtime); // Context.Log(msg, MessageType.Warning, true); // return; //} //// Позиций нет? Выходим. Ловить нечего. //if (sec.Positions.HavePositions) // return; // В оптимизации ничего рисовать не надо if (Context.IsOptimization) { return; } // 0. Чистим за собой мусор от предыдущих прогонов? var oldObjects = pane.GetInteractiveObjects(); // Клонирование делается внутри метода foreach (var oldObj in oldObjects) { var oldPoint = oldObj as GraphPane.IInteractivePoint; if (oldPoint != null) { if (oldPoint.Id.StartsWith(ExecutedOrdPrefix)) { pane.RemoveInteractiveObject(oldPoint.Id); } continue; } var oldLine = oldObj as GraphPane.IInteractiveLine; if (oldLine != null) { if (oldLine.Id.StartsWith(ActiveOrdPrefix)) { pane.RemoveInteractiveObject(oldLine.Id); } continue; } } ISecurityRt secRt; if (sec is ISecurityRt) { secRt = (ISecurityRt)sec; } else { secRt = (from s in Context.Runtime.Securities where s.SecurityDescription.Equals(sec) && (s is ISecurityRt) select(ISecurityRt) s).SingleOrDefault(); } if (secRt == null) { return; } // ОТЛИЧНО! Эта коллекция позволит мне нарисовать свои заявки и сделки var orders = secRt.Orders.ToList(); var activeOrders = new List <IOrder>(); var executedOrders = new List <IOrder>(); for (int j = 0; j < orders.Count; j++) { IOrder ord = orders[j]; if (ord.IsActive) { activeOrders.Add(ord); } else if (ord.Status == OrderStatus.Executed) { executedOrders.Add(ord); } else { //string str = "Все остальное игнорируем?"; } } int id = 0; IDataBar lastBar = sec.Bars.LastOrDefault(); int intervalSec = Context.Runtime.IntervalInstance.ToSeconds(); DateTime now = (lastBar != null) ? lastBar.Date : (sec.FinInfo != null) ? sec.FinInfo.LastUpdate : DateTimeUtils.Now; // 1. Рисуем активные заявки в виде линий foreach (IOrder ord in activeOrders) { string itemId = ActiveOrdPrefix + id; var end = new GraphPane.MarketPoint(now, ord.Price); var beg = new GraphPane.MarketPoint(now.AddSeconds(-10 * intervalSec), ord.Price); Color actualCol = ord.IsBuy ? s_green : s_red; pane.AddInteractiveLine(itemId, PaneSides.RIGHT, true, actualCol, GraphPane.InteractiveLineMode.Finite, beg, end); id++; } // 2. Рисуем исполненные заявки в виде точек foreach (IOrder ord in executedOrders) { string itemId = ExecutedOrdPrefix + id; Color actualCol = ord.IsBuy ? s_green : s_red; var point = new GraphPane.MarketPoint(ord.Date, ord.Price); pane.AddInteractivePoint(itemId, PaneSides.RIGHT, true, actualCol, point); id++; } //var point = new GraphPane.MarketPoint(DateTime.Now, 50000); //pane.AddInteractivePoint("0", PaneSides.RIGHT, true, new Color(255, 0, 0), point); }