// Downloaded From https://www.WiseStockTrader.com
_SECTION_BEGIN("SupportResistance");
// START SCRIPT UNTUK SUPPORT / RESISTANT
// S/R RECODE by Stefanus Wardoyo @6March2014 - stefanus.wardoyo@infinitstudio.com

WarnaResistant = ParamColor("Warna Garis Resistant",colorBlack);
WarnaSupport = ParamColor("Warna Garis Support",colorRed);
R1_show = 0;
S1_show = 0;

SRStyle = ParamStyle("S/R Style",styleThick);

if (ParamToggle("Garis Support&Resistance", "Tidak|Ya", 1 ))
{
	// RESISTANT
	LastHighestValue = LastVisibleValue(Ref(H,-1));
	if (LastVisibleValue(H) == H[LastValue(BarIndex())])
		LastHighestValue = LastVisibleValue(H);

	i = 1;
	
	if (LastHighestValue < HighestVisibleValue(H))
	{
			while (LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1),Ref(H, -1), i)) < LastHighestValue)
				i++;

	    	R1 = LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1),Ref(H, -1), i));

			R1x = LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1),Ref(BarIndex(), -1), i));
			Plot(IIf(BarIndex() >= R1x,LastValue(R1),Null),"R1",WarnaResistant ,SRStyle);
			PlotText("R1 : " + R1, BarCount + 1, LastValue(R1), WarnaResistant);
			R1_show = 1;

			i++;

			if (HighestVisibleValue( H ) > R1)
			{
				while (LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1), Ref(H,-1), i)) <= R1)
					i++;

				R2 = LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1), Ref(H,-1), i));
				R2x = LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1),Ref(BarIndex(), -1), i));
	
				Plot(IIf(BarIndex() >= R2x,LastValue(R2),Null),"R2",WarnaResistant ,SRStyle);
				PlotText("R2 : " + R2, BarCount + 1, LastValue(R2), WarnaResistant);
				i++;
				if (HighestVisibleValue( H )> R2)
				{ 		
					while (LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1), Ref(H,-1), i)) <= R2)
						i++;
					R3 = LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1), Ref(H,-1), i));
					R3x = LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1),Ref(BarIndex(), -1), i));	

					Plot(IIf(BarIndex() >= R3x,LastValue(R3),Null),"R3",WarnaResistant ,SRStyle);
					PlotText("R3 : " + R3, BarCount + 1, LastValue(R3), WarnaResistant);
				}
			}
	}
	else if (LastHighestValue == HighestVisibleValue(H))
	{
	   	R1 = LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1),Ref(H, -1), i));
		R1x = LastVisibleValue(ValueWhen(H <= Ref(H,-1) AND Ref(H,-2) <= Ref(H, -1),Ref(BarIndex(), -1), i));
		if (R1 == LastHighestValue)
		{
			Plot(IIf(BarIndex() >= R1x,LastValue(R1),Null),"R1",WarnaResistant ,SRStyle);
			PlotText("R1 : " + R1, BarCount + 1, LastValue(R1), WarnaResistant);
			R1_show = 1;
		}
	}

	// SUPPORT
	LastLowestValue = LastVisibleValue(Ref(L,-1));
	if (LastVisibleValue(L) == L[LastValue(BarIndex())])
		LastLowestValue = LastVisibleValue(L);

	i = 1;

	if (LastLowestValue > LowestVisibleValue(L))
	{	
			while (LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1),Ref(L, -1), i)) > LastLowestValue)
				i++;

			S1 = LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1),Ref(L, -1), i));
			S1x = LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1),Ref(BarIndex(), -1), i));
			Plot(IIf(BarIndex() >= S1x,LastValue(S1),Null),"S1",WarnaSupport ,SRStyle);
			PlotText("S1 : " + S1, BarCount + 1, LastValue(S1), WarnaSupport);
			S1_show = 1;
			i++;

			if (LowestVisibleValue( L ) < S1)
			{
				while (LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1), Ref(L,-1), i)) >= S1)
					i++;

				S2 = LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1), Ref(L,-1), i));
				S2x = LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1), Ref(BarIndex(),-1), i));	

				Plot(IIf(BarIndex() >= S2x,LastValue(S2),Null),"S2",WarnaSupport ,SRStyle);
				PlotText("S2 : " + S2, BarCount + 1, LastValue(S2), WarnaSupport);
				i++;
				if (LowestVisibleValue( L )< S2)
				{ 		
					while (LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1), Ref(L,-1), i)) >= S2)
						i++;
					S3 = LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1), Ref(L,-1), i));
					S3x = LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1), Ref(BarIndex(),-1), i));
					Plot(IIf(BarIndex() >= S3x,LastValue(S3),Null),"S3",WarnaSupport ,SRStyle);
					PlotText("S3 : " + S3, BarCount + 1, LastValue(S3), WarnaSupport);
				}
			}
	}
	else if (LastLowestValue == LowestVisibleValue(L))
	{
	   	S1 = LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1),Ref(L, -1), i));
		S1x = LastVisibleValue(ValueWhen(L >= Ref(L,-1) AND Ref(L,-2) >= Ref(L, -1),Ref(BarIndex(), -1), i));
		if (S1 == LastLowestValue)
		{
			Plot(IIf(BarIndex() >= S1x,LastValue(S1),Null),"S1",WarnaSupport ,SRStyle);
			PlotText("S1 : " + S1, BarCount + 1, LastValue(S1), WarnaSupport);
			S1_show = 1;
		}
	}

	if (S1_show AND R1_show)
	{
		SR = Prec((1-(S1/R1))*100,2);
	}
}

// END SCRIPT UNTUK SUPPORT / RESISTANT
_SECTION_END();