// Downloaded From https://www.WiseStockTrader.com
/*

Turbo_JRSX : a better RSI ?

Ported from Metatrader.
Original source code : http://codebase.mql4.com/source/6182

*/

SetChartOptions (0, 0, chartGrid20 | chartGrid50 | chartGrid80);

Len = Param ( "Periods", 12, 1, 200, 1 );


function JRSX ( Period )
{

	f88 = 0; f90 = 0; f0 = 0; v4 = 0; 	v8 = 0; vC = 0; v10 = 0; v14 = 0; v18 = 0; v20 = 0;
	f8 = 0; f10 = 0; f18 = 0; f20 = 0; f28 = 0; f30 = 0; f38 = 0; f48 = 0; v1C = 0;
	f50 = 0; f58 = 0; f60 = 0; f68 = 0; f70 = 0; f78 = 0; f80 = 0; f40 = 0;

	f90 = 1.0;
	f0  = 0.0;

	if ( Period-1 >= 5 )
		f88 = Period-1.0;
	else
		f88 = 5.0;

	f8 = 100.0 * ((H[0]+L[0]+Close[0])/3);
	f18 = 3.0 / (Period + 2.0);
	f20 = 1.0 - f18;

   for ( i = 1; i < BarCount; i++ )
	{
		if (f88 <= f90) f90 = f88 + 1; else f90 = f90 + 1;
		f10 = f8;
 //    f8 = 100*Close[i];
		f8 = 100.0*((H[i]+L[i]+C[i])/3);
		v8 = f8 - f10;
		f28 = f20 * f28 + f18 * v8;
		f30 = f18 * f28 + f20 * f30;
		vC = f28 * 1.5 - f30 * 0.5;
		f38 = f20 * f38 + f18 * vC;
		f40 = f18 * f38 + f20 * f40;
		v10 = f38 * 1.5 - f40 * 0.5;
		f48 = f20 * f48 + f18 * v10;
		f50 = f18 * f48 + f20 * f50;
		v14 = f48 * 1.5 - f50 * 0.5;
		f58 = f20 * f58 + f18 * abs (v8);
		f60 = f18 * f58 + f20 * f60;
		v18 = f58 * 1.5 - f60 * 0.5;
		f68 = f20 * f68 + f18 * v18;

		f70 = f18 * f68 + f20 * f70;
		v1C = f68 * 1.5 - f70 * 0.5;
		f78 = f20 * f78 + f18 * v1C;
		f80 = f18 * f78 + f20 * f80;
		v20 = f78 * 1.5 - f80 * 0.5;

		if ((f88 >= f90) && (f8 != f10)) f0 = 1.0;
		if ((f88 == f90) && (f0 == 0.0)) f90 = 0.0;
		if ((f88 < f90) && (v20 > 0.0000000001))
		{
			v4 = (v14 / v20 + 1.0) * 50.0;
			if (v4 > 100.0) v4 = 100.0;
			if (v4 < 0.0) v4 = 0.0;
		}
		else
		{
			v4 = 50.0;
		}

		rsx[i] = v4;
	}

	return rsx;
}


Plot ( JRSX(Len), "Turbo JRSX", ParamColor ( "Color", colorCycle ), ParamStyle ("Style"), 0, 100 );