#property copyright "Copyright - Interbank FX, LLC."
#property link      "http://www.ibfx.com"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID
//---- input parameters
extern string array = "Close";
extern int       Periods=20;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_NONE);
SetIndexBuffer(1,ExtMapBuffer2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
int ArraySelected = 0;
//------------------ CLOSE -------------------------
if(array == "C")      {ArraySelected = PRICE_CLOSE;}
else if(array == "CLOSE")  {ArraySelected = PRICE_CLOSE;}
else if(array == "Close")  {ArraySelected = PRICE_CLOSE;}
else if(array == "c")      {ArraySelected = PRICE_CLOSE;}
else if(array == "close")  {ArraySelected = PRICE_CLOSE;}
//------------------ LOW -------------------------
else if(array == "L")    {ArraySelected = PRICE_LOW;}
else if(array == "LOW")  {ArraySelected = PRICE_LOW;}
else if(array == "Low")  {ArraySelected = PRICE_LOW;}
else if(array == "l")    {ArraySelected = PRICE_LOW;}
else if(array == "low")  {ArraySelected = PRICE_LOW;}
//------------------ HIGH -------------------------
else if(array == "H")     {ArraySelected = PRICE_HIGH;}
else if(array == "HIGH")  {ArraySelected = PRICE_HIGH;}
else if(array == "High")  {ArraySelected = PRICE_HIGH;}
else if(array == "h")     {ArraySelected = PRICE_HIGH;}
else if(array == "high")  {ArraySelected = PRICE_HIGH;}
//------------------ CLOSE -------------------------
else if(array == "O")     {ArraySelected = PRICE_OPEN;}
else if(array == "OPEN")  {ArraySelected = PRICE_OPEN;}
else if(array == "Open")  {ArraySelected = PRICE_OPEN;}
else if(array == "o")     {ArraySelected = PRICE_OPEN;}
else if(array == "open")  {ArraySelected = PRICE_OPEN;}
//------------------ Typical -------------------------
else if(array == "TYPICAL") {ArraySelected = PRICE_TYPICAL;}
else if(array == "Typical") {ArraySelected = PRICE_TYPICAL;}
else if(array == "typical") {ArraySelected = PRICE_TYPICAL;}
else if(array == "T")       {ArraySelected = PRICE_TYPICAL;}
else if(array == "t")       {ArraySelected = PRICE_TYPICAL;}
//------------------ MEDIAN -------------------------------
else if(array == "MEDIAN") {ArraySelected = PRICE_MEDIAN;}
else if(array == "Median") {ArraySelected = PRICE_MEDIAN;}
else if(array == "median") {ArraySelected = PRICE_MEDIAN;}
else if(array == "M")      {ArraySelected = PRICE_MEDIAN;}
else if(array == "m")      {ArraySelected = PRICE_MEDIAN;}
//------------------ DEFAULT -------------------------------
else                       {ArraySelected = PRICE_CLOSE;}

int limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
for(int i=0; i<limit; i++)
ExtMapBuffer1[i]=iMA(NULL,0,Periods,0,MODE_EMA,ArraySelected,i);
for(i=0; i<limit; i++)
ExtMapBuffer2[i]=iMAOnArray(ExtMapBuffer1,Bars,Periods,0,MODE_EMA,i);
for(i=0; i<limit; i++)
ExtMapBuffer1[i] = ExtMapBuffer1[i] + (ExtMapBuffer1[i]-ExtMapBuffer2[i]);
//---- done
return(0);
}
//+------------------------------------------------------------------+

