public List <Signal> GenerateOnClose(DateTime ts, int leadingIndex, SystemState systemState) { List <Signal> res = new List <Signal>(); if (leadingIndex <= _statSMA.BackBufferLength) { return(res); } StockPricesData data = _dataLoader.Get(_stock.FullName, _dataRange, 0, ts, ts); if ((data.C[leadingIndex - 1] <= _statSMA.Data(StatSMAData.SMA)[leadingIndex - 1 - _statSMA.BackBufferLength]) && (data.C[leadingIndex] > _statSMA.Data(StatSMAData.SMA)[leadingIndex - _statSMA.BackBufferLength])) { res.Add(CreateSignal(PositionDir.Long, systemState, data.C[leadingIndex])); } if ((data.C[leadingIndex - 1] >= _statSMA.Data(StatSMAData.SMA)[leadingIndex - 1 - _statSMA.BackBufferLength]) && (data.C[leadingIndex] < _statSMA.Data(StatSMAData.SMA)[leadingIndex - _statSMA.BackBufferLength])) { res.Add(CreateSignal(PositionDir.Short, systemState, data.C[leadingIndex])); } return(res); }
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)); }
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]); } } }