/*[[ Name := T3 TRIX (ROC of T6) Author := Luis Damiani Separate Window := Yes First Color := LightSkyBlue First Draw Type := Line First Symbol := 217 Use Second Data :=yes Second Color := Blue Second Draw Type := Line Second Symbol := 218 ]]*/ Input : A_t3_period(18),num_bars(350),is_A_open_price(0),B_t3_period_ac(8),diferential(0),hot(0.7); Variable : shift(0); Variable : A_t3(0),A_t3_1(0),max_per(0); Variable : B_t3(0),B_t3_1(0); Variable : e1(0),e2(0),e3(0),e4(0),e5(0),e6(0),c1(0),c2(0),c3(0),c4(0); Variable : e1x(0),e2x(0),e3x(0),e4x(0),e5x(0),e6x(0); Variable : d1(0),d2(0),d3(0),d4(0),d5(0),d6(0); Variable : d1x(0),d2x(0),d3x(0),d4x(0),d5x(0),d6x(0); Variable : n(0),A_w1(0),A_w2(0),B_w1(0),B_w2(0),b2(0),b3(0); Variable : init(true); Variables : bar(0), prevbars(0), start(0), cs(0), prevcs(0),commodt("nonono"),frame(0); cs= num_bars+A_t3_period+is_A_open_price+B_t3_period_ac+diferential+hot; //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 { b2=hot*hot; b3=b2*hot; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+hot+b3); c4=(1+3*hot+b3+3*b2); n=A_t3_period; if n<1 then n=1; n = 1 + 0.5*(n-1); A_w1 = 2 / (n + 1); A_w2 = 1 - A_w1; n=B_t3_period_ac; if n<1 then n=1; n = 1 + 0.5*(n-1); B_w1 = 2 / (n + 1); B_w2 = 1 - B_w1; SetIndexValue(num_bars-1, 0); e1x=0;e2x=0;e3x=0;e4x=0;e5x=0;e6x=0; SetIndexValue2(num_bars-1, 0); d1x=0;d2x=0;d3x=0;d4x=0;d5x=0;d6x=0; // max_per=max(A_t3_period,B_t3_period_ac); bar=num_bars-2; init=false; }; SetLoopCount(0); For shift = bar Downto 0 Begin if is_A_open_price then d1 = A_w1*open[shift] + A_w2*d1x Else d1 = A_w1*close[shift] + A_w2*d1x; d2 = A_w1*d1 + A_w2*d2x; d3 = A_w1*d2 + A_w2*d3x; d4 = A_w1*d3 + A_w2*d4x; d5 = A_w1*d4 + A_w2*d5x; d6 = A_w1*d5 + A_w2*d6x; A_t3 = c1*d6 + c2*d5 + c3*d4 + c4*d3; if (start=1 and shift=1) or start=-1 then { d1x=d1; d2x=d2; d3x=d3; d4x=d4; d5x=d5; d6x=d6; } e1 = B_w1*close[shift] + B_w2*e1x; e2 = B_w1*e1 + B_w2*e2x; e3 = B_w1*e2 + B_w2*e3x; e4 = B_w1*e3 + B_w2*e4x; e5 = B_w1*e4 + B_w2*e5x; e6 = B_w1*e5 + B_w2*e6x; B_t3 = c1*e6 + c2*e5 + c3*e4 + c4*e3; if(diferential=1)then { SetIndexValue(shift,(A_t3-A_t3_1)/A_t3_1); SetIndexValue2(shift,(A_t3-A_t3_1)/A_t3_1+(B_t3-B_t3_1)/B_t3_1); } Else { SetIndexValue2(shift,(B_t3-B_t3_1)/B_t3_1); SetIndexValue(shift,(A_t3-A_t3_1)/A_t3_1); }; // comment(" start: ",start," bar: ",bar,"\n", //"frame: ",frame," num_bars:" ,num_bars," commodity: ",commodt ,"\n",(B_t3-B_t3_1)/B_t3_1); if (start=1 and shift=1) or start=-1 then { A_t3_1=A_t3; B_t3_1=B_t3; e1x=e1; e2x=e2; e3x=e3; e4x=e4; e5x=e5; e6x=e6;} End;