Exemple #1
0
        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);
        }
Exemple #2
0
        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;
                }));
            }
        }
Exemple #3
0
        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);
        }