/*[[ Name := 3D Oscilator Author := Luis Damiani Separate Window := Yes First Color := lime First Draw Type := Line First Symbol := 217 Use Second Data :=yes Second Color := RoyalBlue Second Draw Type := Line Second Symbol := 218 ]]*/ Input : D1RSIPer(13), D2StochPer(8),D3tunnelPer(8),hot(0.4),sigsmooth(4),num_bars(150); Variable : shift(0),shift2(0),rsi(0),maxrsi(0),minrsi(0),storsi(0),E3D(0); Variable:sig1(0),sig2(0),sk(0),ss(0),sk2(0),sig1n(0),sig2n(0); Variable : init(true); Variables : bar(0), prevbars(0), start(0), cs(0), prevcs(0),commodt("nonono"),frame(0); cs= D1RSIPer+D2StochPer+D3tunnelPer+hot+sigsmooth+num_bars; //checksum used to see if parameters have been changed if cs=prevcs and (commodt=symbol)and frame=t[4]-t[5] and bars-prevbars<2 then start=Bars-prevbars //params haven't changed only need to calculate new bar else start=-1; commodt=symbol; frame=t[4]-t[5]; prevbars = Bars; prevcs = cs; if (start=1 | start=0) then bar=start else init = true; if init then { ss=sigsmooth; if ss<2 then ss=2; sk = 2 / (ss + 1); sk2=2/(ss*0.8+1); bar=num_bars; init=false; }; SetLoopCount(0); For shift = bar Downto 0 Begin rsi=iRSI(D1RSIPer,shift); maxrsi=rsi; minrsi=rsi; for shift2= shift+D2StochPer downto shift { rsi=iRSI(D1RSIPer,shift2); maxrsi=max(rsi,maxrsi); minrsi=min(rsi,minrsi); } storsi=((rsi-minrsi)/(maxrsi-minrsi)*200-100); E3D=hot*icci(D3tunnelPer,shift)+(1-hot)*storsi; sig1n=sk*E3D+(1-sk)*sig1; sig2n= sk2*sig1+(1-sk2)*sig2; //print(shift); if (start=1 and shift=1) or start=-1 then {sig1=sig1n;sig2=sig2n;} SetIndexValue(shift,sig1n); SetIndexValue2(shift,sig2n); End;