public void ShiftChart(int indexShift) { double left = 0, right = 0; StockSeries.GetXExtent(ref left, ref right); Window.UpdateScrollLimits(left, right); Window.SetScrollView(MinimumPos, MaximumPos); SetRange(); ResetWorldRect(); }
private void DrawStockSeries(Graphics g) { if (StockSeries != null) { GraphicsContainer container = g.BeginContainer(); g.SetClip(CanvasRect); g.TranslateTransform(CanvasRect.Left, CanvasRect.Top); StockSeries.Draw(g, WorldRect, new Rectangle(0, 0, CanvasRect.Width, CanvasRect.Height)); g.EndContainer(container); } }
internal bool FindYExtent(double left, double right, ref double top, ref double bottom) { var flag = false; if (StockSeries != null) { flag |= StockSeries.GetYExtent(left, right, ref top, ref bottom); } foreach (Series.Series s in Series) { flag |= s.GetYExtent(left, right, ref top, ref bottom); } return(flag); }
internal bool FindXExtent(ref double left, ref double right) { bool flag = false; if (StockSeries != null) { flag |= StockSeries.GetXExtent(ref left, ref right); } foreach (Series.Series s in Series) { flag |= s.GetXExtent(ref left, ref right); } return(flag); }
private void CreateStockSeries() { StockSeries stockSeries = StockPane.StockSeries; switch (ChartType) { case ChartType.Candlestick: StockPane.StockSeries = new CandlestickSeries("StockSymbol"); break; case ChartType.OhlcBar: StockPane.StockSeries = new OhlcBarSeries("StockSymbol"); break; case ChartType.StockLine: StockPane.StockSeries = new StockLineSeries("StockSymbol"); break; } StockPane.StockSeries.CopyFrom(stockSeries); }
//[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] //private ChartVisualSettings visualSettings; /// <summary> /// Настройки рисования /// </summary> //public ChartVisualSettings VisualSettings //{ // get { return visualSettings; } // set // { // visualSettings = value; // visualSettings.ApplyToChart(this); // } //} public bool SetRange() { DateTime start = DateTime.Now, end = DateTime.Now; if (!StockSeries.GetTimeExtent(ref start, ref end)) { return(false); } double left = 0.0, right = 0.0; if (!StockSeries.GetIndexRange(ref left, ref right)) { return(false); } CandleRange.StartIndex = left; CandleRange.EndIndex = right; CandleRange.Start = start; CandleRange.End = end; if (onScaleChanged != null) { onScaleChanged(left, right); } return(true); }
public CandleRange(StockSeries _stockSeries) { stockSeries = _stockSeries; }
public StockQueryPageViewModel(INavigationService navigationService, IProductService productService, IUserService userService, ITerminalService terminalService, IWareHousesService wareHousesService, IAccountingService accountingService, IReportingService reportingService, IDialogService dialogService ) : base(navigationService, productService, terminalService, userService, wareHousesService, accountingService, dialogService) { Title = "库存查询"; this.ForceRefresh = true; _reportingService = reportingService; //搜索 this.WhenAnyValue(x => x.Filter.SerchKey) .Where(s => !string.IsNullOrEmpty(s)) .Select(s => s) .Throttle(TimeSpan.FromSeconds(2), RxApp.MainThreadScheduler) .Subscribe(s => { ((ICommand)SerchCommand)?.Execute(s); }) .DisposeWith(DeactivateWith); this.SerchCommand = ReactiveCommand.Create <string>(e => { if (string.IsNullOrEmpty(Filter.SerchKey)) { this.Alert("请输入关键字!"); return; } ((ICommand)Load)?.Execute(null); }); this.Load = StockSeriesLoader.Load(async() => { //重载时排它 ItemTreshold = 1; try { this.StockSeries?.Clear(); var pending = new List <StockCategoryGroup>(); var results = await GetStockCategoryGroupPage(0, PageSize); if (results != null && results.Any()) { foreach (var item in results) { if (pending?.Count(s => s.CategoryName == item.CategoryName) == 0) { pending.Add(item); } } this.TotalAmount = pending?.Select(p => p.SubCostAmount).Sum(); if (pending.Any()) { this.StockSeries = new ObservableRangeCollection <StockCategoryGroup>(pending); } } } catch (Exception ex) { Crashes.TrackError(ex); } return(StockSeries); }); //以增量方式加载数据 this.ItemTresholdReachedCommand = ReactiveCommand.Create(async() => { using (var dig = UserDialogs.Instance.Loading("加载中...")) { try { int pageIdex = StockSeries?.Count ?? 0 / (PageSize == 0 ? 1 : PageSize); var results = await GetStockCategoryGroupPage(pageIdex, PageSize); foreach (var item in results) { if (StockSeries?.Count(s => s.CategoryName == item.CategoryName) == 0) { StockSeries.Add(item); } } this.TotalAmount = this.StockSeries?.Select(p => p.SubCostAmount).Sum(); if (results.Count() == 0 || results.Count() == StockSeries.Count) { ItemTreshold = -1; return(this.StockSeries); } } catch (Exception ex) { Crashes.TrackError(ex); ItemTreshold = -1; } this.StockSeries = new ObservableRangeCollection <StockCategoryGroup>(StockSeries); return(this.StockSeries); } }, this.WhenAny(x => x.StockSeries, x => x.GetValue().Count > 0)); //仓库选择 this.StockSelected = ReactiveCommand.Create <object>(async e => { await SelectStock((data) => { Filter.WareHouseId = data.Id; Filter.WareHouseName = data.Name; ((ICommand)Load)?.Execute(null); }, BillTypeEnum.None); }); //绑定页面菜单 _popupMenu = new PopupMenu(this, new Dictionary <MenuEnum, Action <SubMenu, ViewModelBase> > { //ZEROSTOCK { MenuEnum.ZEROSTOCK, (m, vm) => { ShowZero = true; ((ICommand)Load)?.Execute(null); } },
public MainWindow() { InitializeComponent(); // Create chart. var chart = new LightningChartUltimate(); chart.Title.Text = "Stock Series"; // Disable rendering before updating chart properties to improve performance // and to prevent unnecessary chart redrawing while changing multiple properties. chart.BeginUpdate(); // Set chart control into the parent container. (Content as Grid).Children.Add(chart); // 1. Configure X- and Y-axes. // X-axis configuration. var axisX = chart.ViewXY.XAxes[0]; axisX.Title.Text = "Date"; axisX.ValueType = AxisValueType.DateTime; axisX.LabelsAngle = 90; axisX.MajorDiv = 24 * 60 * 60; // Major division is one day in seconds. // Y-axis configuration. var axisY = chart.ViewXY.YAxes[0]; axisY.Title.Text = "Price"; // 2. Create a new StockSeries. var stockSeries = new StockSeries(chart.ViewXY, axisX, axisY); chart.ViewXY.StockSeries.Add(stockSeries); // 3. Configure the stock plot. stockSeries.Style = StockStyle.OptimizedCandleStick; stockSeries.FillBorder.Width = 1; stockSeries.Title.Text = "Example Inc."; // 4. Load data from a CSV file into series data points with LoadFromCSV. /* * The data in CSV file has to be organized in columns in the following order: * Column 0: Date (DateTime) * Column 1: Open (double) * Column 2: Close (double) * Column 3: High (double) * Column 4: Low (double) * Column 5: Volume (int) * Column 6: Transaction (double) */ stockSeries.LoadFromCSV("../../../data/data.csv", SeparatorCSV.Semicolon); // 5. Create a reference to the loaded data points. var stockData = stockSeries.DataPoints; // 6. Generate data for series, which matches closed values. var closeData = new SeriesPoint[stockData.Length]; for (var i = 0; i < stockData.Length; i++) { closeData[i] = new SeriesPoint() { X = axisX.DateTimeToAxisValue(stockData[i].Date), Y = stockData[i].Close }; } // 7. Create a new PointLineSeries to show the dynamic in closed values on Stock Exchange. var lineSeries = new PointLineSeries(); lineSeries.Title.Text = "Example Inc."; lineSeries.Points = closeData; chart.ViewXY.PointLineSeries.Add(lineSeries); // 8. Auto-scale X- and Y-axes. chart.ViewXY.ZoomToFit(); #region Hidden polishing CustomizeChart(chart); #endregion // Call EndUpdate to enable rendering again. chart.EndUpdate(); }