для начала определитесь сколько последних значений вы хотите анализировать, например перенеся это в параметры
Код: Выделить всё
function Initialize()
{
...
AddParameter("BarCount", 3);
...
}
затем, получая последние значения нужно в параметрах единицу (1) заменить на этот параметр, т.е. получать в LastLVal и LastHVal мы будем не одно последнее значение, а серию значений размером BarCount. По этой же причине убираем в конце [0], иначе было бы бессмысленно считать, например, 10 значений, но записать в переменную только последнее. Нам понадобятся именно серии значений для поиска максимума и минимума из этих значений.
пример для Fractal индикатора:
Код: Выделить всё
//получаем серию последних значений по индикатору
var lastLVal = MY.Fractal(Input, Period).GetLastValues("L", (int)ValuesCount);
var lastHVal = MY.Fractal(Input, Period).GetLastValues("H", (int)ValuesCount);
хотя в АД4 и есть методы:
MinValue(Series, N=1, D=0) – возвращает минимальное значение из N точек ряд Series со смещением D назад
MaxValue(Series, N=1, D=0) – возвращает максимальное значение из N точек ряд Series со смещением D назад
но работают они только в стратегиях

, поэтому придётся искать минимум и максимум "вручную", изобретая велосипед

получить максимум и минимум в коде индикатора можно так:
Код: Выделить всё
//вычисляем максимальное и минимальные значение H, L для 3-х последних значений серий
double maxH = lastHVal[ValuesCount - 1].Y, minL = lastLVal[ValuesCount - 1].Y;
for (int x = 1; x < ValuesCount; x++)
{
maxH = Math.Max(maxH, lastHVal[x].Y);
minL = Math.Min(minL, lastLVal[x].Y);
}
ну а далее по вашему коду т.к. в LastLVal и LastHVal содержится не значения, а серии то указываем в проверках получение значение по индексу, например так [ValuesCount - 1] (последнее значение).
что-то подобное этому:
Код: Выделить всё
...
if ( (lastHVal[ValuesCount - 1].X > lastLVal[ValuesCount - 1].X ? lastHVal[ValuesCount - 1].Y : lastLVal[ValuesCount - 1].Y) == (lastHVal[ValuesCount - 1].Y) )
...