// Downloaded From https://www.WiseStockTrader.com
// Supertrend - Translated from Kolier MQ4
// see: http://kolier.li/indicator/kolier-supertrend-indi
// translation in Amibroker AFL code by E.M.Pottasch, 2011
sdfact=Param("Standard Deviation Factor",2,0.5,5,0.1); 
offset=Param("Offset",2,2,50,1); 
ATR_Multiplier=Param("ATR_Multiplier",2,0.5,10,0.1);
ATR_Period=Param( "ATR_Period",5,2,20,1);
TrendMode=ParamToggle("TrendMode","Off|On",1);

procedure calcTrend_proc(ATR_Period,tr,ATR_Multiplier,TrendMode,CalcPrice)
{
global buffer_line_down;
global buffer_line_up;
buffer_line_down = Null;
buffer_line_up = Null;

PHASE_NONE = 0;
PHASE_BUY = 1;
PHASE_SELL = -1;

phase=PHASE_NONE;
band_upper = 0;band_lower = 0;
  
for(i = ATR_Period + 1; i < BarCount; i++)
{
	band_upper = CalcPrice[i] + ATR_Multiplier * tr[i];
	band_lower = CalcPrice[i] - ATR_Multiplier * tr[i];
	
	if(phase==PHASE_NONE)
	{
		buffer_line_up[i] = CalcPrice[i];
		buffer_line_down[i] = CalcPrice[i];
	}
	if(phase!=PHASE_BUY && Close[i]>buffer_line_down[i-1] && !IsEmpty(buffer_line_down[i-1])) 
	{
		phase = PHASE_BUY;
		buffer_line_up[i] = band_lower;
		buffer_line_up[i-1] = buffer_line_down[i-1];
	}
	if(phase!=PHASE_SELL && Close[i]<buffer_line_up[i-1] && !IsEmpty(buffer_line_up[i-1]))
	{
		phase = PHASE_SELL;
		buffer_line_down[i] = band_upper;
		buffer_line_down[i-1] = buffer_line_up[i-1];
	}	
	if(phase==PHASE_BUY && ((TrendMode==0 && !IsEmpty(buffer_line_up[i-2])) || TrendMode==1) )
	{
		if(band_lower>buffer_line_up[i-1]) 
		{
			buffer_line_up[i] = band_lower;
		}
		else 
		{
			buffer_line_up[i] = buffer_line_up[i-1];
		}
	}
	if(phase==PHASE_SELL && ((TrendMode==0 && !IsEmpty(buffer_line_down[i-2])) || TrendMode==1) )
	{
		if(band_upper<buffer_line_down[i-1])
		{
			buffer_line_down[i] = band_upper;
		}
		else
		{
			buffer_line_down[i] = buffer_line_down[i-1];
		}
	}
}
}
 
tr = ATR(ATR_Period);
CalcPrice=(H+L)/2;
calcTrend_proc(ATR_Period,tr,ATR_Multiplier,TrendMode,CalcPrice);
TrendUp=buffer_line_up;TrendDown=buffer_line_down;
totalTrend=IIf(TrendUp,TrendUp,TrendDown);
dtotalTrend=totalTrend-Ref(totalTrend,-1);
vtotalTrend=ValueWhen(dtotalTrend,dtotalTrend);

cross_bull=vtotalTrend>0 AND Ref(vtotalTrend,-1)<0;
cross_bull=Ref(cross_bull,1);
cross_bull[BarCount-1]=1;
cross_bear=vtotalTrend<0 AND Ref(vtotalTrend,-1)>0;
cross_bear=Ref(cross_bear,1);
cross_bear[BarCount-1]=1;
nw_bull = Ref(Flip(cross_bull,cross_bear),-1);
nw_bear = Ref(Flip(cross_bear,cross_bull),-1);

SetChartOptions(0, chartShowDates);
Title = "Symbol: "+ Name();
Plot(C, "Close",colorLightGrey,styleCandle);
Plot(IIf(nw_bull,1,Null),"",ColorRGB(0,Min(BarsSince(cross_bull),255),0), styleArea|styleOwnScale,0,1,0,-1);
Plot(IIf(nw_bear,1,Null),"",ColorRGB(2*Min(BarsSince(cross_bear),255),0,0), styleArea|styleOwnScale,0,1,0,-1);
Plot(buffer_line_up,"\ntu",colorBlue,styleThick);
Plot(buffer_line_down,"\ntd",colorRed,styleThick);