public double ValueWhen(int offset, Func <double, int, bool> callback, ReferenceSeries searchPattern) { var allNumericSeries = DataSeriesManager.getAllNumericSerries(); var index = allNumericSeries.FindIndex(x => x.Name == searchPattern.Name); var result = -1D; var counter = 0; if (index != -1) { for (int i = 0; i < HistoryDataSeries.Count - 1; i++) { if (Convert.ToBoolean(callback(allNumericSeries[index].GetValueByIndex(i), i))) { result = searchPattern.Value; counter += 1; if (counter == offset) { break; } } } } return(result); }
private ICustomData <double, double> ExtremumSince(int offset, Func <double, int, bool> callback, ICustomData <double, double> searchData, EXTREMUM type) { var allNumericSeries = DataSeriesManager.getAllNumericSerries(); var name = type == EXTREMUM.High ? $"highestSince{searchData.Name}{offset}" : $"lowestSince{searchData.Name}{offset}"; var indexOfRequiredHighest = allNumericSeries.FindIndex(x => x.Name == name); if (indexOfRequiredHighest != -1) { var index = allNumericSeries.FindIndex(x => x.Name == searchData.Name); if (index != -1) { for (int i = 0; i < HistoryDataSeries.Count - 1; i++) { if (Convert.ToBoolean(callback(allNumericSeries[index].GetValueByIndex(i), i))) { allNumericSeries[indexOfRequiredHighest].GetValue(i); break; } } } return(allNumericSeries[indexOfRequiredHighest] as CUSTOM); } else { return(AddCustom(name, (value) => { var index = allNumericSeries.FindIndex(x => x.Name == searchData.Name); if (index != -1) { var result = allNumericSeries[index].GetValueByIndex(0); for (int j = 0; j < value; j++) { result = type == EXTREMUM.High ? allNumericSeries[index].GetValueByIndex(j) > result ? allNumericSeries[index].GetValueByIndex(j) : result : allNumericSeries[index].GetValueByIndex(j) < result ? allNumericSeries[index].GetValueByIndex(j) : result; } return result; } return 0D; })); } }
public int BarsSince(ICustomData <double, double> a, double b, Func <double, double, bool> callback) { var allNumericSeries = DataSeriesManager.getAllNumericSerries(); var index = allNumericSeries.FindIndex(x => x.Name == a.Name); var result = -1; if (index != -1) { for (int i = 0; i < HistoryDataSeries.Count - 1; i++) { if (callback(allNumericSeries[index].GetValueByIndex(i), b)) { result = i; break; } } } return(result); }