Как проверить более одной переменной в операторе if? - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь проверить более одной переменной в операторе if.

double firstPlot = RMMA(MultiMA1types.VWMA, 2, 160, 10, 2, 128, 0.75, 0.5).Values[15][0];
double secondPlot = RMMA(MultiMA1types.VWMA, 2, 160, 10, 2, 128, 0.75, 0.5).Values[14][0];

На самом деле их будет больше, чем одна переменная: thirdPlot 2ndPlot…

if(firstPlot < highPrice && firstPlot > lowPrice)

Это так? Можно ли протестировать каждую переменную за один раз внутри оператора if, не повторяя оператор if столько раз, сколько переменных? Например, создать одну переменную, которая соберет весь график и будет проверена одновременно в отдельности внутри оператора if?

Спасибо

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Похоже, Values - это зубчатый массив, из которого вы хотите извлечь первый элемент каждого базового массива, поэтому должно работать следующее:

using System.Collections.Generic;
using System.Linq;
...
double[][] plots = RMMA(MultiMA1types.VWMA, 2, 160, 10, 2, 128, 0.75, 0.5).Values;

IEnumerable<double> firstValues = plots.Select(a => a[0]);

bool allValuesInRange = firstValues.All(v => v < highPrice && v > lowPrice);

РЕДАКТИРОВАТЬ после вашего комментария:

NinjaTrader.NinjaScript.Series<double>[] series = 
    RMMA(MultiMA1types.VWMA, 2, 160, 10, 2, 128, 0.75, 0.5).Values;

IEnumerable<double> firstValues = series.Select(s => s[0]);

foreach (double firstValue in firstValues)
{
    Console.WriteLine(firstValue);
}
0 голосов
/ 23 октября 2019

Можете ли вы вместо этого перебирать свой массив? Например, что-то вроде этого:

    private bool CheckValues(/*params here*/)
    {
        var RMMAVals = RMMA(MultiMA1types.VWMA, 2, 160, 10, 2, 128, 0.75, 0.5);
        for (int k = 0;  k<RMMAVals.Length; k++)
        {
            if (RMMAVals[k][0] >= highPrice || RMMAVals[k][0] <= lowPrice)
                return false;
        }
        return true;
    }
...