{Error Control} Error_UOPeriods:= Error(STPeriods=0,'Input Error: "Short-Term Ultimate Oscillator Periods" cannot equal zero!'); Error_UOMAPeriods:= Error(maperiods=0,'Input Error: "Ultimate Oscillator MA Periods" cannot equal zero!'); Error_BBandsPeriods:= Error(maperiods=0,'Input Error: "Bollinger Bands Periods" cannot equal zero!'); {Ultimate Oscillator} TL:= Min(L,Ref(C,-1)); BP:= C-TL; TR:= Max((H-L),Max((H-ref(C,-1)),Ref(C,-1)-L)); BPSum1:= Sum(BP,STPeriods); BPSum2:= Sum(BP,(STPeriods*2)); BPSum3:= Sum(BP,(STPeriods*4)); TRSum1:= Sum(TR,STPeriods); TRSum2:= Sum(TR,(STPeriods*2)); TRSum3:= Sum(TR,(STPeriods*4)); RawUO:= 4*(BPSum1/TRSum1)+2*(BPSum2/TRSum2)+(BPSum3/TRSum3); UO:= (RawUO/(4+2+1))*100; {Moving Average of Ultimate Oscillator} UO_MA:= Mov(UO,maperiods,matype); {Bollinger Bands based on Ultimate Oscillator} MB:= Mov(UO,tPr,ma); UB:= BLines(UO,Mov(UO,tPr,ma),tPr,D,0); LB:= BLines(UO,Mov(UO,tPr,ma),tPr,D,1); {Trend Direction} UpTrend:= UO_MA>MB; DownTrend:= UO_MA EventCount('CloseBuy')); OpenSell:= Sell_Signal AND (EventCount('OpenSell') = EventCount('CloseSell')); CloseSell:= Buy_Signal AND (EventCount('OpenSell') > EventCount('CloseSell'));