function BandTrader(sys)
%BANDTRADER - Band Trading Strategy
%
%  This MATLAB function implements a simple band trading strategy. A band 
%  consists of two lines that form the upper and lower boundaries of the band. 
%  The upper and lower boundaries are used to to enter and exit trades.
%  For example, if prices fall below the lower boundary a buy signal is 
%  generated.
% 
%  Requirements:
%  - MATLAB 2012b
%  - TA Developer Toolbox (http://www.tadeveloper.com)
%
%  Please refer to http://www.tadeveloper.com/docs/80-matlab-algo-trading
%  for a full description of the strategy
%

% custom trading parameters
if sys.TradingParameters.isKey('movingAverage'),
    movingAverage = sys.TradingParameters('movingAverage');
else
    movingAverage = 10; % default value if unset
end;
if sys.TradingParameters.isKey('bandWidth'),
    bandWidth = sys.TradingParameters('bandWidth');
else
    bandWidth = 2; % default value if unset
end;
  
% Construct the center line
Average = (sys.High + sys.Low)/2;
CenterLine = Ema(Average, movingAverage);
PlotDataSeries(sys, CenterLine, 'blue', 'solid', 2, '');
  
% Construct the bands
AverageTrueRange = Atr(sys.BarData, movingAverage);  
UpperBand = CenterLine + bandWidth * AverageTrueRange;
LowerBand = CenterLine - bandWidth * AverageTrueRange;
PlotDataSeries(sys, UpperBand, 'magenta', 'solid', 2, '');
PlotDataSeries(sys, LowerBand, 'magenta', 'solid', 2, '');
  
% Entry and Exit Signals
LongSignal = sys.Close < LowerBand;
ShortSignal = sys.Close > UpperBand;
AddLongSignal(sys, LongSignal);
AddShortSignal(sys, ShortSignal);  

end