public void RemoveStatSeries(StockStat stat) { for (int i = 0; i < stat.DataCount; i++) { PVChart.Series.Remove(PVChart.Series.FindByName(stat.ChartSeriesName(i))); } }
public StockStatSticker(StockStat stat, IStockStatsInfoGenerator statsInfoGenerator) { _stat = stat; _statsInfoGenerator = statsInfoGenerator; InitializeComponent(); UpdateStatInfo(); }
public static void UpdateStatSeriesDefinition(this PriceVolumeChart chart, StockStat stat) { for (int i = 0; i < stat.DataCount; i++) { Series s = chart.GetSeries(stat.ChartSeriesName(i)); s.Color = stat.DataColor[i]; } }
private bool EditStat(StockStat stat) { using (FormEditStockStatParams frm = new FormEditStockStatParams()) if (!frm.Execute(stat)) { return(false); } return(true); }
public void AddStatSeries(StockStat stat) { StockStatSeriesFactory factory = new StockStatSeriesFactory(); for (int i = 0; i < stat.DataCount; i++) { PVChart.Series.Add(factory.CreateSeries(stat, i)); } }
public Series CreateSeries(StockStat stat, int seriesIndex) => new Series(stat.ChartSeriesName(seriesIndex)) { ChartArea = stat.ChartArea, ChartType = SeriesChartType.Line, Color = stat.DataColor[seriesIndex], Font = new System.Drawing.Font("Microsoft Sans Serif", 6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))), IsXValueIndexed = true, YValueType = ChartValueType.Single };
private void OnStatStickerDoubleClick(StockStatSticker sticker, StockStat stat) { if (!EditStat(stat)) { return; } sticker.UpdateStatInfo(); chartPV.UpdateStatSeriesDefinition(stat); CalculateStatAndRefreshChartData(stat); }
public void AddStat(StockStat stat) { chartPV.AddStatSeries(stat); _currentData.Stats.Add(stat); StockStatSticker sticker = new StockStatSticker(stat, _currentStatsInfoGenerator); sticker.OnStickerDoubleClick += OnStatStickerDoubleClick; sticker.OnStickerMouseClick += OnStatStickerClick; _stickerPositioner.Add(sticker); }
private void OnClickPriceChartStat(object sender, EventArgs e) { StockStat stat = StatsFactories.PriceChart.Get(sender.ToString(), "areaPrices"); if (!EditStat(stat)) { return; } AddStat(stat); CalculateStatAndRefreshChartData(stat); }
private void SaveStatDataColors(StockStat stat) { foreach (var control in pnlTblLayoutColors.Controls) { if (!(control is Button)) { continue; } Button btn = (Button)control; stat.DataColor[(int)btn.Tag] = btn.BackColor; } }
private void OnStatStickerClick(StockStatSticker sticker, StockStat stat, MouseEventArgs e) { if (e.Button == MouseButtons.Middle) { if (stat.ChartArea != "areaPrices") { chartPV.RemoveArea(stat.ChartArea); } RemoveStat(sticker, stat); Refresh(); } }
public bool Execute(StockStat stat) { SetCaption(stat.Name); dgvParams.LoadParams(stat.StatParams); LoadStatDataColors(stat); if (ShowDialog() == DialogResult.OK) { dgvParams.SaveParams(stat.StatParams); SaveStatDataColors(stat); return(true); } return(false); }
private void OnClickAdditionalStat(object sender, EventArgs e) { string newAreaName = $"Area{Guid.NewGuid():N}"; StockStat stat = StatsFactories.Additional.Get(sender.ToString(), newAreaName); if (!EditStat(stat)) { return; } chartPV.CreateNewArea(newAreaName); AddStat(stat); CalculateStatAndRefreshChartData(stat); }
public SignalsPriceCrossingSMA(string stockName, StockDataRange dataRange, int smaPeriod, ISystemDataLoader dataLoader, IStockDataProvider dataProvider, IMMSignalVolume signalVolumeCalculator) { _dataRange = dataRange; _smaPeriod = smaPeriod; _dataLoader = dataLoader; _dataProvider = dataProvider; _signalVolumeCalculator = signalVolumeCalculator; _stock = _dataProvider.GetStockDefinition(stockName); _statSMA = new StatSMA("") .SetParam(StatSMAParams.Period, new MOParamInt() { Value = _smaPeriod }); }
private string GetStatValue(StockStat stat, int selectedIndex, int dataPricesLength) { int emptyStart = dataPricesLength - stat.Data(0).Length; if (selectedIndex < emptyStart) { return(""); } List <string> values = new List <string>(); for (int i = 0; i < stat.DataCount; i++) { values.Add(DataFormatting.FormatStatValue(stat.Data(i)[selectedIndex - emptyStart])); } return(string.Join(", ", values)); }
private void LoadStatDataColors(StockStat stat) { pnlTblLayoutColors.ColumnStyles.Clear(); pnlTblLayoutColors.ColumnCount = stat.DataCount; for (int i = 0; i < stat.DataCount; i++) { pnlTblLayoutColors.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F / (float)stat.DataCount)); Button btn = new Button { Text = stat.DataName(i), FlatStyle = FlatStyle.Flat, BackColor = stat.DataColor[i], Dock = DockStyle.Fill, Tag = i, }; btn.Click += OnDataColorButtonClick; pnlTblLayoutColors.Controls.Add(btn, i, 0); } }
public SignalsBBTrend(string stockName, StockDataRange dataRange, int bbPeriod, float bbSigmaWidth, ISystemDataLoader dataLoader, IStockDataProvider dataProvider, IMMSignalVolume signalVolumeCalculator) { _dataRange = dataRange; _bbPeriod = bbPeriod; _bbSigmaWidth = bbSigmaWidth; _dataLoader = dataLoader; _dataProvider = dataProvider; _signalVolumeCalculator = signalVolumeCalculator; _stock = _dataProvider.GetStockDefinition(stockName); _statBB = new StatBB("") .SetParam(StatBBParams.Period, new MOParamInt() { Value = _bbPeriod }) .SetParam(StatBBParams.SigmaWidth, new MOParamFloat() { Value = bbSigmaWidth }); }
public static StockStat SetParam(this StockStat stat, string paramName, MOParam paramValue) { stat.StatParams.Set(paramName, paramValue); return(stat); }
public static string ChartSeriesName(this StockStat stat, int seriesIndex) => $"{stat.UID}_{seriesIndex}";
public static void PrependStockStatData(this PriceVolumeChart chart, StockPricesData data, StockStat stat) { for (int i = 0; i < stat.DataCount; i++) { Series s = chart.GetSeries(stat.ChartSeriesName(i)); s.Points.Clear(); } AppendStockStatData(chart, data, stat); }
public void RemoveStat(StockStatSticker sticker, StockStat stat) { chartPV.RemoveStatSeries(stat); _currentData.Stats.Remove(stat); _stickerPositioner.Remove(sticker); }
private void CalculateStatAndRefreshChartData(StockStat stat) { stat.Calculate(CurrentData.Prices); RefreshData(); Refresh(); }
public static void AppendStockStatData(this PriceVolumeChart chart, StockPricesData data, StockStat stat) { for (int i = 0; i < stat.DataCount; i++) { Series s = chart.GetSeries(stat.ChartSeriesName(i)); float[] currdata = stat.Data(i); int tsstartindex = data.Length - currdata.Length; for (int j = 0; j < tsstartindex; j++) { int ix = s.Points.AddXY(data.TS[j], 0); s.Points[ix].IsEmpty = true; } for (int j = 0; j < currdata.Length; j++) { s.Points.AddXY(data.TS[tsstartindex + j], currdata[j]); } } }
public string GetStatHeader(StockStat stat) => $"{stat.Name}({GetStatHeaderParams(stat.StatParams)})";