Название индикатора: barX Требуется индикатор, выполняющий разные процедуры расчета относительно одной МА. Расчеты должны проходить при открытии нового бара на базе прошлых баров, без перерисовки и с рациональным(минимальным) использованием ресурсов компьютера. Расчет Особенность в том, что отрисовка должны быть только одного значения графического буфера barX[] в виде тредовой линии в "подвале", все же остальные буфера не отрисовываются и служат для передачи информации советникам и другим индикаторам. Настройки: extern string text1 = "1. Настройка координат"; extern int pipsUp=1800; // Отступ от maCenter вверх extern int pipsDown=1800; //Отступ от maCenter вниз extern string text2 = "1.1 Настройка средней скользящей maCenter"; //maH – среднее скользящее: extern int TFC=0;//тайм фрейм maCenter extern int pMAC=128;//период maCenter средней extern int priceMAC=0;//цена maCenter средней extern int typeMAC=0;//метод maCenter средней extern int shiftMAC=0;//сдвиг maCenter средней extern string text2 = "1.2 Настройка barX - неприкосаемость"; extern int barX=3;//количество баров не касания ценой верхниго или нижнего конверта maCenter" Алгоритм 0. Этап Распределяем буфера StartCyclePoint[]; // цена начала цикла LastBarsCycle[]; // сколько прошло баров с начала цикла без учета текущего бара PikPriceCycle[]; // максимальная/минимальная цена за цикл в зависимости от движения цены - вверх/вниз от maCenter barX[]; // сколько раз выполнялось условие barX LastPriceBarsX[]; // цена выполнение последнего условия barX LastBarsX[]; // сколько прошло баров с момента последнего выполнения условия barX DeltaPriceBarX[]; // максимальное изменение цены с момента последнего выполнения условия barX Расчитываем координаты maCenter=iMA; maUp=maCenter+pipsUp*Point; maDown=maCenter+pipsDown*Point; Внимание: индикатор iMA должен легко заменятся на пользовательский индикатор или аналогичный встроенный 1. Этап При открытии нового бара (а не при каждом тике!) Определяем текущее расположение цены относительно maCenter Если (Open[1]>maCenter[1]) Cycle=1; Если (Open[1]maCenter[1] && Low[1]maCenter[n] && Low[n]maUp[0] && Low[0]maUp[n]) || (High[n]maDown[0] && Low[0]maDown[n]) || (High[n]High[0]-LastPriceBarX[0]) DeltaPriceBarX[0]=High[0]-LastBarX; Иначе DeltaPriceBarX[0]=DeltaPriceBarX[1] Если (Cycle==-1) Если (DeltaPriceBarX[1]>LastPriceBarX[0]-Low[0]) DeltaPriceBarX[0]=LastBarX-Low[0]; Иначе DeltaPriceBarX[0]=DeltaPriceBarX[1 Значение DeltaPriceBarX[0] выводим в графический буфер без отрисовки 4. Этап Определяем сколько баров прошло с момента последнего исполнения условия BarX n - бар на котором будет выполнятся условие Если (Cycle==1) Если (High[n]>maUp[n] && Low[n]maDown[n] && Low[n]