public string GetStockSelectedInfo(StockDisplayData data, int selectedIndex) => $"{data.Prices.TS[selectedIndex].ToString(data.Prices.DataRangeFormatString())} OHLC(" + $"{data.Stock.FormatPrice(data.Prices.O[selectedIndex])}, " + $"{data.Stock.FormatPrice(data.Prices.H[selectedIndex])}, " + $"{data.Stock.FormatPrice(data.Prices.L[selectedIndex])}, " + $"{data.Stock.FormatPrice(data.Prices.C[selectedIndex])}) " + $"V={data.Prices.V[selectedIndex]}";
private void OnRecalculateStockStats(StockDisplayData displayData) { foreach (var stat in displayData.Stats) { stat.Calculate(displayData.Prices); } }
private StockPricesData OnPrependChartData(StockDisplayData displayData) { DateTime ts = DateTimeOperations.OneTickBefore(displayData.TsFrom, displayData.Prices); displayData.TsFrom = ts.AddDays(-1).AddYears(-1); return(_dataProvider.GetPricesData(displayData.Stock, displayData.Prices.Range, 0, displayData.TsFrom, ts)); }
public void LoadData(StockDisplayData data, IStockInfoGenerator infoGenerator, IStockStatsInfoGenerator statsInfoGenerator) { _currentData = data; _currentInfoGenerator = infoGenerator; _currentStatsInfoGenerator = statsInfoGenerator; ReloadCurrentData(); chartPV.ResetZoom(); DisplayCurrentStockInfo(); }
public string GetStatsSelectedInfo(StockDisplayData data, int selectedIndex) { List <string> values = new List <string>(); foreach (StockStat stat in data.Stats) { values.Add($"{GetStatHeader(stat)}=[{GetStatValue(stat, selectedIndex, data.Prices.Length)}]"); } return(string.Join(", ", values)); }
public string GetStockInfo(StockDisplayData data) { string nodatainfo = ""; if (data.Prices.Length == 0) { nodatainfo = " - no data"; } return($"{data.Stock.FullName} {data.Prices.DataRangeToString()} [{data.TsFrom.ToString(data.Prices.DataRangeFormatString())} - {data.TsTo.ToString(data.Prices.DataRangeFormatString())}{nodatainfo}]"); }
private bool GetStockDisplayData(string stockName, StockDataRange dataRange, DateTime tsFrom, DateTime tsTo, out StockDisplayData displayData) { displayData = null; if (!GetStockDefinition(stockName, out StockDefinition stockDef)) { return(false); } displayData = new StockDisplayData() { TsFrom = tsFrom, TsTo = tsTo, Stock = stockDef, Prices = _dataProvider.GetPricesData(stockDef, dataRange, 0, tsFrom, tsTo) }; return(true); }
private PriceVolumePanel AddTabWithChart(TabControl tabControl, StockDisplayData displayData) { TabPage tab = new TabPage($"[{displayData.Stock.Name}] {displayData.Stock.FullName} ({displayData.Prices.Range})") { BorderStyle = BorderStyle.FixedSingle }; tabControl.TabPages.Add(tab); PriceVolumePanel pvp = new PriceVolumePanel { Name = "pvp", Dock = DockStyle.Fill }; pvp.OnPrependData += OnPrependChartData; pvp.OnGetData += OnGetChartData; pvp.OnRecalculateStockStats += OnRecalculateStockStats; tab.Controls.Add(pvp); tabControl.SelectTab(tab); tabControl.Refresh(); pvp.LoadData(displayData, _stockInfoGenerator, _stockStatsInfoGenerator); return(pvp); }
public string GetAxisYToolTip(StockDisplayData data, double selectedValue) => data.Stock.FormatPrice(selectedValue);
public string GetAxisXToolTip(StockDisplayData data, int selectedIndex) => $"{data.Prices.TS[selectedIndex].ToString(data.Prices.DataRangeFormatString())}";
private StockPricesData OnGetChartData(StockDisplayData displayData, DateTime tsFrom, DateTime tsTo) { displayData.TsFrom = tsFrom; displayData.TsTo = tsTo; return(_dataProvider.GetPricesData(displayData.Stock, displayData.Prices.Range, 0, tsFrom.AddDays(-1), tsTo)); }