private void Chart_OnMoveOrder(Order order, decimal newPrice) { if (NeedToConfirm && !Confirm($"Move order to price={newPrice}?")) { var d = new ChartDrawData(); // redraw order with old price d.Add(_activeOrdersElement, order); Chart.Draw(d); return; } var singleObject = UseSingleOrderObject; Log($"MoveOrder to {newPrice}: {order}, single order object = {singleObject}"); if (IsInFinalState(order)) { Log("invalid state for re-register"); return; } if (singleObject) { Chart_OnMoveOrder1(order, newPrice); } else { Chart_OnMoveOrder2(order, newPrice); } }
private void ModifyAnnotation(bool isNew) { Brush RandomBrush() { var b = new SolidColorBrush(Color.FromRgb((byte)RandomGen.GetInt(0, 255), (byte)RandomGen.GetInt(0, 255), (byte)RandomGen.GetInt(0, 255))); b.Freeze(); return(b); } if (_annotation == null) { return; } IComparable x1, x2, y1, y2; var mode = RandomGen.GetDouble() > 0.5 ? AnnotationCoordinateMode.Absolute : AnnotationCoordinateMode.Relative; if (_annotationData == null) { if (mode == AnnotationCoordinateMode.Absolute) { GetMiddle(out var x0, out var y0); x1 = x0 - TimeSpan.FromMinutes(RandomGen.GetInt(10, 60)); x2 = x0 + TimeSpan.FromMinutes(RandomGen.GetInt(10, 60)); y1 = y0 - RandomGen.GetInt(5, 10) * _security.PriceStep ?? 0.01m; y2 = y0 + RandomGen.GetInt(5, 10) * _security.PriceStep ?? 0.01m; } else { x1 = 0.5 - RandomGen.GetDouble() / 10; x2 = 0.5 + RandomGen.GetDouble() / 10; y1 = 0.5 - RandomGen.GetDouble() / 10; y2 = 0.5 - RandomGen.GetDouble() / 10; } } else { mode = _annotationData.CoordinateMode.Value; if (mode == AnnotationCoordinateMode.Absolute) { x1 = (DateTimeOffset)_annotationData.X1 - TimeSpan.FromMinutes(1); x2 = (DateTimeOffset)_annotationData.X2 + TimeSpan.FromMinutes(1); y1 = (decimal)_annotationData.Y1 + _security.PriceStep ?? 0.01m; y2 = (decimal)_annotationData.Y2 - _security.PriceStep ?? 0.01m; } else { x1 = ((double)_annotationData.X1) - 0.05; x2 = ((double)_annotationData.X2) + 0.05; y1 = ((double)_annotationData.Y1) - 0.05; y2 = ((double)_annotationData.Y2) + 0.05; } } _dataThreadActions.Add(() => { var data = new ChartDrawData.AnnotationData { X1 = x1, X2 = x2, Y1 = y1, Y2 = y2, IsVisible = true, Fill = RandomBrush(), Stroke = RandomBrush(), Foreground = RandomBrush(), Thickness = new Thickness(RandomGen.GetInt(1, 5)), }; if (isNew) { data.Text = "random annotation #" + (++_annotationId); data.HorizontalAlignment = HorizontalAlignment.Stretch; data.VerticalAlignment = VerticalAlignment.Stretch; data.LabelPlacement = LabelPlacement.Axis; data.ShowLabel = true; data.CoordinateMode = mode; } var dd = new ChartDrawData(); dd.Add(_annotation, data); Chart.Draw(dd); }); }
private void Chart_OnMoveOrder(Order oldOrder, decimal newPrice) { if (NeedToConfirm && !Confirm($"Move order to price={newPrice}?")) { var d = new ChartDrawData(); d.Add(_activeOrdersElement, oldOrder); Chart.Draw(d); return; } Log($"MoveOrder to {newPrice}: {oldOrder}"); if (IsInFinalState(oldOrder)) { Log("invalid state for re-register"); return; } var newOrder = new OrderEx { TransactionId = _idGenerator.GetNextId(), Type = OrderTypes.Limit, State = OrderStates.Pending, Price = newPrice, Volume = oldOrder.Balance, Direction = oldOrder.Direction, Balance = oldOrder.Balance, Security = oldOrder.Security, Portfolio = oldOrder.Portfolio, }; Chart.Draw(new ChartDrawData() .Add(_activeOrdersElement, oldOrder, true, price: newOrder.Price)); void MoveAction() { if (NeedToFail) { Log("Move failed"); newOrder.State = OrderStates.Failed; Chart.Draw(new ChartDrawData() .Add(_activeOrdersElement, oldOrder, isError: true, price: oldOrder.Price)); } else { oldOrder.State = OrderStates.Done; newOrder.State = OrderStates.Active; Log($"Order moved to new: {newOrder}"); Chart.Draw(new ChartDrawData() .Add(_activeOrdersElement, oldOrder) .Add(_activeOrdersElement, newOrder)); _orders.Remove(oldOrder); _orders.Add(newOrder); } } if (NeedToDelay) { DelayedAction(MoveAction, "move"); } else { MoveAction(); } }