/*[[ Name := NRTR WATR Author := VG - many thanks to Konkop and dupidu Link := 4vg@mail.ru Separate Window := No First Color := Red First Draw Type := Symbol First Symbol := 119 Use Second Data := Yes Second Color := LimeGreen Second Draw Type := Symbol Second Symbol := 119 ]]*/ Input : AveragePeriod(10),Reg(1); Variable : bar(0); Variable : value(0); Variable : price(0); Variable : trend(0),dK(0), AvgRange(0),i(0),WATR(0),StartBars(1); SetLoopCount(0); AvgRange=0; for i=AveragePeriod DownTo 1 { dK = 1+(AveragePeriod-i)/AveragePeriod; AvgRange=AvgRange+ dK*Abs(High[i]-Low[i]); }; WATR = AvgRange/AveragePeriod; if Close[StartBars-1] > Open[StartBars-1] then { value = Close[StartBars - 1] * (1 - WATR); trend = 1; SetIndexValue2(StartBars - 1, value); SetIndexValue(StartBars - 1, 0); }; if Close[StartBars-1] < Open[StartBars-1] then { value = Close[StartBars - 1] * (1 + WATR); trend = -1; SetIndexValue(StartBars - 1, value); SetIndexValue2(StartBars - 1, 0); }; for bar = Bars - AveragePeriod downto 0 { if Reg = 2 then { AvgRange=0; for i=1 To AveragePeriod { dK = 1+(AveragePeriod-i)/AveragePeriod; AvgRange=AvgRange+ dK*Abs(High[bar + i]-Low[bar + i]); }; WATR = AvgRange/AveragePeriod; }; if trend >= 0 then { if Close[bar] > price then price = Close[bar]; value = price * (1 - WATR); if Close[bar] < value then { price = Close[bar]; value = price * (1 + WATR); trend = -1; }; } else if trend <= 0 then { if Close[bar] < price then price = Close[bar]; value = price * (1 + WATR); if Close[bar] > value then { price = Close[bar]; value = price * (1 - WATR); trend = 1; }; }; if trend = -1 then { SetIndexValue(bar, value); SetIndexValue2(bar, 0); }; if trend = 1 then { SetIndexValue2(bar, value); SetIndexValue(bar, 0); }; };