#define OP_BUY 0
#define OP_SELL 1
#define OP_BUYLIMIT 2
#define OP_SELLLIMIT 3
#define OP_BUYSTOP 4
#define OP_SELLSTOP 5
#define MODE_OPEN 0
#define MODE_LOW 1
#define MODE_HIGH 2
#define MODE_CLOSE 3
#define MODE_VOLUME 4
#define MODE_TIME 5
#define MODE_TRADES 0
#define MODE_HISTORY 1
#define SELECT_BY_POS 0
#define SELECT_BY_TICKET 1
#define LONG_VALUE 4
#define FLOAT_VALUE 4
#define DOUBLE_VALUE 8
#define CHART_BAR 0
#define CHART_CANDLE 1
#define MODE_ASCEND 1
#define MODE_DESCEND 2
#define MODE_BID 9
#define MODE_ASK 10
#define MODE_POINT 11
#define MODE_DIGITS 12
#define MODE_SPREAD 13
#define MODE_STOPLEVEL 14
#define MODE_LOTSIZE 15
#define MODE_TICKVALUE 16
#define MODE_TICKSIZE 17
#define MODE_SWAPLONG 18
#define MODE_SWAPSHORT 19
#define MODE_STARTING 20
#define MODE_EXPIRATION 21
#define MODE_TRADEALLOWED 22
#define MODE_MINLOT 23
#define MODE_LOTSTEP 24
#define MODE_MAXLOT 25
#define MODE_SWAPTYPE 26
#define MODE_PROFITCALCMODE 27
#define MODE_MARGINCALCMODE 28
#define MODE_MARGININIT 29
#define MODE_MARGINMAINTENANCE 30
#define MODE_MARGINHEDGED 31
#define MODE_MARGINREQUIRED 32
#define MODE_FREEZELEVEL 33
#define MODE_CLOSEBY_ALLOWED 34
#define EMPTY -1
#define MODE_MAIN 0
#define MODE_SIGNAL 1
#define MODE_PLUSDI 1
#define MODE_MINUSDI 2
#define MODE_UPPER 1
#define MODE_LOWER 2
#define MODE_GATORJAW 1
#define MODE_GATORTEETH 2
#define MODE_GATORLIPS 3
#define MODE_TENKANSEN 1
#define MODE_KIJUNSEN 2
#define MODE_SENKOUSPANA 3
#define MODE_SENKOUSPANB 4
#define MODE_CHIKOUSPAN 5
#define MODE_CHINKOUSPAN 5
#define OBJPROP_TIME1 2000
#define OBJPROP_PRICE1 2001
#define OBJPROP_TIME2 2002
#define OBJPROP_PRICE2 2003
#define OBJPROP_TIME3 2004
#define OBJPROP_PRICE3 2005
#define OBJPROP_FIBOLEVELS 2006

// +----------------------------------------------------------------------------------------+ //
// |                                            XARD                                        | //
// |----------------------------------------------------------------------------------------| //
// | Programming language:     MQL4                                                         | //
// | Development platform:     MetaTrader 4                                                 | //
// |          End product:     Indicator for MetaTrader 4 designed                          | //
// +----------------------------------------------------------------------------------------+ //

#property indicator_chart_window#property indicator_buffers 7
#property indicator_plots 4
#property indicator_color1 Gold
#property indicator_color2 Gold
#property indicator_color3 Blue
#property indicator_color4 C'0xE1,0x00,0x00'

input int Length = 21;
input int Shuffle = 6;
input double Deviation = 4.0;
input bool AlertsOn = TRUE;
input bool AlertsOnCurrent = TRUE;
input bool AlertsMessage = FALSE;
input bool AlertsSound = TRUE;
input bool AlertsEmail = FALSE;
int Gi_112 = 0;
int Gi_116 = 0;
double G_ibuf_120[];
double G_ibuf_124[];
double G_ibuf_128[];
double G_ibuf_132[];
double G_ibuf_136[];
double G_ibuf_140[];
double G_ibuf_144[];
int G_timeframe_148;
string Gs_152;
string Gs_nothing_160 = "nothing";
datetime G_time_168;

void OnInit() {
ObjectCreate("7",(ENUM_OBJECT)OBJ_LABEL,0,10,10);
    ObjectSet("7",OBJPROP_XDISTANCE,2);
    ObjectSet("7",OBJPROP_YDISTANCE,27);
    ObjectSet("7",OBJPROP_CORNER,CORNER_LEFT_LOWER);
    ObjectSetText("7","More free good indicators to go FX141 download FX141.COM",11,"SimSun",Yellow);


    ObjectCreate("9",(ENUM_OBJECT)OBJ_LABEL,0,10,10);
    ObjectSet("9",OBJPROP_XDISTANCE,2);
    ObjectSet("9",OBJPROP_YDISTANCE,12);
    ObjectSet("9",OBJPROP_CORNER,CORNER_LEFT_LOWER);
    ObjectSetText("9","Indicator Source FX141 Network Free Download FX141.COM",11,"SimSun",DeepPink);
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexShift(0,Gi_116);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexShift(1,Gi_116);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexShift(2,Gi_116);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexShift(3,Gi_116);
   SetIndexStyle(4,DRAW_NONE);
   SetIndexShift(4,Gi_116);
   SetIndexStyle(5,DRAW_NONE);
   SetIndexShift(5,Gi_116);
   SetIndexBuffer(6,G_ibuf_144,INDICATOR_DATA,true);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   if (Length < 2) Length = 12;
   int Li_0 = Length - 1;
   string Ls_4 = "Gold_Bands(";
   IndicatorShortName(Ls_4 + Length + ")");
   SetIndexDrawBegin(0,Li_0);
   SetIndexBuffer(0,G_ibuf_136,INDICATOR_DATA,true);
   SetIndexDrawBegin(1,Li_0);
   SetIndexBuffer(1,G_ibuf_140,INDICATOR_DATA,true);
   SetIndexDrawBegin(2,Li_0);
   SetIndexBuffer(2,G_ibuf_128,INDICATOR_DATA,true);
   SetIndexDrawBegin(3,Li_0);
   SetIndexBuffer(3,G_ibuf_132,INDICATOR_DATA,true);
   SetIndexDrawBegin(4,Li_0);
   SetIndexBuffer(4,G_ibuf_120,INDICATOR_DATA,true);
   SetIndexDrawBegin(5,Li_0);
   SetIndexBuffer(5,G_ibuf_124,INDICATOR_DATA,true);
   switch (G_timeframe_148) {
   case PERIOD_M1:
      Gs_152 = " M1";
      break;
   case PERIOD_M5:
      Gs_152 = " M5";
      break;
   case PERIOD_M15:
      Gs_152 = " M15";
      break;
   case PERIOD_M30:
      Gs_152 = " M30";
      break;
   case PERIOD_H1:
      Gs_152 = " H1";
      break;
   case PERIOD_H4:
      Gs_152 = " H4";
      break;
   case PERIOD_D1:
      Gs_152 = " D1";
      break;
   case PERIOD_W1:
      Gs_152 = " W1";
      break;
   case PERIOD_MN1:
      Gs_152 = " MN1";
      break;
   default:
      G_timeframe_148 = Period();
      init();
      return;
   }
   return;
}

void OnDeinit() {
   ObjectsDeleteAll(1,OBJ_LABEL);
   return;
}

int OnCalculate(const int _rates_total,      // size of input time series
           const int _prev_calculated,  // bars handled in previous call
           const datetime& _time[],     // Time
           const double& _open[],       // Open
           const double& _high[],       // High
           const double& _low[],        // Low
           const double& _close[],      // Close
           const long& _tick_volume[],  // Tick Volume
           const long& _volume[],       // Real Volume
           const int& _spread[]         // Spread
) {
	FXD_ONCALCULATE_FAIL = false; // will be set to true if some indicator won't load

   int Bars = _rates_total;

   int Li_0;
   double Ld_4;
   double Ld_12;
   double Ld_20;
   double Ld_28;
   Gold_Bands();
   sma();
   if (Bars <= Shuffle) return (0);
   int ind_counted_36 = ((_prev_calculated>0)?_prev_calculated-1:0);
   for (int Li_40 = 1; Li_40 <= Shuffle; Li_40++) {
      G_ibuf_124[Bars - Li_40] = EMPTY_VALUE;
      G_ibuf_136[Bars - Li_40] = EMPTY_VALUE;
      G_ibuf_140[Bars - Li_40] = EMPTY_VALUE;
      G_ibuf_128[Bars - Li_40] = EMPTY_VALUE;
      G_ibuf_132[Bars - Li_40] = EMPTY_VALUE;
   }
   int Li_44 = Bars - ind_counted_36;
   if (ind_counted_36 > 0) Li_44++;
   Li_40 = Bars - Shuffle + 1;
   if (ind_counted_36 > Shuffle - 1) Li_40 = Bars - ind_counted_36 - 1;
   while (Li_40 >= 0) {
      Ld_12 = 0.0;
      Li_0 = Li_40 + Shuffle - 1;
      Ld_20 = G_ibuf_124[Li_40];
      while (Li_0 >= Li_40) {
         Ld_28 = G_ibuf_120[Li_0] - Ld_20;
         Ld_12 += Ld_28 * Ld_28;
         Li_0--;
      }
      Ld_4 = Deviation * MathSqrt(Ld_12 / Shuffle);
      G_ibuf_136[Li_40] = Ld_20 + Ld_4;
      G_ibuf_140[Li_40] = Ld_20 - Ld_4;
      Li_40--;
   }
   Li_40 = Bars - Shuffle + 1;
   if (ind_counted_36 > Shuffle - 1) Li_40 = Bars - ind_counted_36 - 1;
   while (Li_40 >= 0) {
      G_ibuf_144[Li_40] = G_ibuf_144[Li_40 + 1];
      if (G_ibuf_124[Li_40] < G_ibuf_120[Li_40]) {
         G_ibuf_128[Li_40] = G_ibuf_124[Li_40];
         G_ibuf_132[Li_40] = EMPTY_VALUE;
         if (G_ibuf_128[Li_40] == G_ibuf_124[Li_40] && G_ibuf_132[Li_40] == EMPTY_VALUE) G_ibuf_144[Li_40] = 1;
         if (G_ibuf_128[Li_40 + 1] == EMPTY_VALUE) G_ibuf_128[Li_40 + 1] = G_ibuf_124[Li_40 + 1];
      } else {
         G_ibuf_144[Li_40] = G_ibuf_144[Li_40 + 1];
         if (G_ibuf_124[Li_40] > G_ibuf_120[Li_40]) {
            G_ibuf_132[Li_40] = G_ibuf_124[Li_40];
            G_ibuf_128[Li_40] = EMPTY_VALUE;
            if (G_ibuf_132[Li_40] == G_ibuf_124[Li_40] && G_ibuf_128[Li_40] == EMPTY_VALUE) G_ibuf_144[Li_40] = -1;
            if (G_ibuf_132[Li_40 + 1] == EMPTY_VALUE) G_ibuf_132[Li_40 + 1] = G_ibuf_124[Li_40 + 1];
         }
      }
      Li_40--;
      manageAlerts();
   }	if (FXD_ONCALCULATE_FAIL) {return -1;}

	return _rates_total;

   return (0);
}

void Gold_Bands() {
   int Bars = _rates_total;

   double close_0;
   double Ld_8 = 0.0;
   double Ld_16 = 0.0;
   int Li_24 = 0;
   int Li_28 = Bars - Gi_112 - 1;
   if (Li_28 < Length) Li_28 = Length;
   int Li_32 = 1;
   while (Li_32 <= Length) {
      close_0 = iClose(_Symbol,_Period,Li_28);
      Ld_8 += close_0 * Li_32;
      Ld_16 += close_0;
      Li_24 += Li_32;
      Li_32++;
      Li_28--;
   }
   Li_28++;
   Li_32 = Li_28 + Length;
   while (Li_28 >= 0) {
      G_ibuf_120[Li_28] = Ld_8 / Li_24;
      if (Li_28 == 0) break;
      Li_28--;
      Li_32--;
      close_0 = iClose(_Symbol,_Period,Li_28);
      Ld_8 = Ld_8 - Ld_16 + close_0 * Length;
      Ld_16 -= iClose(_Symbol,_Period,Li_32);
      Ld_16 += close_0;
   }
   if (Gi_112 < 1) for (Li_32 = 1; Li_32 < Length; Li_32++) G_ibuf_120[Bars - Li_32] = 0;
}

void sma() {
   int Bars = _rates_total;

   double Ld_0 = 0;
   int Li_8 = Bars - Gi_112 - 1;
   if (Li_8 < Shuffle) Li_8 = Shuffle;
   int Li_12 = 1;
   while (Li_12 < Shuffle) {
      Ld_0 += G_ibuf_120[Li_8];
      Li_12++;
      Li_8--;
   }
   while (Li_8 >= 0) {
      Ld_0 += G_ibuf_120[Li_8];
      G_ibuf_124[Li_8] = Ld_0 / Shuffle;
      Ld_0 -= G_ibuf_120[Li_8 + Shuffle - 1];
      Li_8--;
   }
   if (Gi_112 < 1) for (Li_12 = 1; Li_12 < Shuffle; Li_12++) G_ibuf_124[Bars - Li_12] = 0;
}

void manageAlerts() {
   int Li_0;
   if (AlertsOn) {
      if (AlertsOnCurrent) Li_0 = 0;
      else Li_0 = 1;
      Li_0 = iBarShift(NULL,0,iTime(NULL,0,Li_0));
      if (G_ibuf_144[Li_0] != G_ibuf_144[Li_0 + 1]) {
         if (G_ibuf_144[Li_0] == 1.0) doAlert(Li_0,"up");
         if (G_ibuf_144[Li_0] == -1.0) doAlert(Li_0,"down");
      }
   }
}

void doAlert(int Ai_0, string As_4) {
   string str_concat_12;
   if (Gs_nothing_160 != As_4 || G_time_168 != iTime(_Symbol,_Period,Ai_0)) {
      Gs_nothing_160 = As_4;
      G_time_168 = iTime(_Symbol,_Period,Ai_0);
      str_concat_12 = (string)(Symbol())+(string)(" ")+(string)(Gs_152)+(string)(" GoldBands : direction changed to ")+(string)(As_4);
      if (AlertsMessage) Alert(str_concat_12);
      if (AlertsEmail) {
         SendMail(str_concat_12,str_concat_12 
            + "\nLocal time " + TimeToStr(TimeLocal(),TIME_SECONDS) + "" 
         + "\nBroker time " + TimeToStr(TimeCurrent(),TIME_SECONDS));
      }
      if (AlertsSound) PlaySound("good-bad-ugly.wav");
   }
}



//== fxDreema MQL4 to MQL5 Converter ==//

//-- Global Variables
int FXD_SELECTED_TYPE = 0; // Indicates what is selected by OrderSelect(), 1 for trade, 2 for pending order, 3 for history trade
ulong FXD_SELECTED_TICKET = 0; // The ticket number selected by OrderSelect()
bool FXD_ONCALCULATE_FAIL = false; // Flag that causes OnCalculate() to return nothing if some indicator is used and failed to load, which means that indicator calculations must be repeated


//-- Functions
string TimeToStr(datetime value, int mode = TIME_DATE|TIME_MINUTES)
{
	return TimeToString(value, mode);
}

int ObjectsDeleteAll(int window=EMPTY, int type=EMPTY)
{
	return ObjectsDeleteAll(0, window, type);
}

bool ObjectCreate(string name,
                  ENUM_OBJECT type,
                  int window,
                  datetime time1,
                  double price1,
                  datetime time2=0,
                  double price2=0,
                  datetime time3=0,
                  double price3=0)
{
	return(ObjectCreate(0,name,type,window,time1,price1,time2,price2,time3,price3));
}

bool ObjectSet(string name, int index, double value)
{
	switch(index)
	{
		case OBJPROP_TIME1:
			ObjectSetInteger(0,name,OBJPROP_TIME,0,(int)value);return(true);
		case OBJPROP_PRICE1:
			ObjectSetDouble(0,name,OBJPROP_PRICE,0,value);return(true);
		case OBJPROP_TIME2:
			ObjectSetInteger(0,name,OBJPROP_TIME,1,(int)value);return(true);
		case OBJPROP_PRICE2:
			ObjectSetDouble(0,name,OBJPROP_PRICE,1,value);return(true);
		case OBJPROP_TIME3:
			ObjectSetInteger(0,name,OBJPROP_TIME,2,(int)value);return(true);
		case OBJPROP_PRICE3:
			ObjectSetDouble(0,name,OBJPROP_PRICE,2,value);return(true);
		case OBJPROP_COLOR:
			ObjectSetInteger(0,name,OBJPROP_COLOR,(int)value);return(true);
		case OBJPROP_STYLE:
			ObjectSetInteger(0,name,OBJPROP_STYLE,(int)value);return(true);
		case OBJPROP_WIDTH:
			ObjectSetInteger(0,name,OBJPROP_WIDTH,(int)value);return(true);
		case OBJPROP_BACK:
			ObjectSetInteger(0,name,OBJPROP_BACK,(int)value);return(true);
		case OBJPROP_RAY:
			ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,(int)value);return(true);
		case OBJPROP_ELLIPSE:
			ObjectSetInteger(0,name,OBJPROP_ELLIPSE,(int)value);return(true);
		case OBJPROP_SCALE:
			ObjectSetDouble(0,name,OBJPROP_SCALE,value);return(true);
		case OBJPROP_ANGLE:
			ObjectSetDouble(0,name,OBJPROP_ANGLE,value);return(true);
		case OBJPROP_ARROWCODE:
			ObjectSetInteger(0,name,OBJPROP_ARROWCODE,(int)value);return(true);
		case OBJPROP_TIMEFRAMES:
			ObjectSetInteger(0,name,OBJPROP_TIMEFRAMES,(int)value);return(true);
		case OBJPROP_DEVIATION:
			ObjectSetDouble(0,name,OBJPROP_DEVIATION,value);return(true);
		case OBJPROP_FONTSIZE:
			ObjectSetInteger(0,name,OBJPROP_FONTSIZE,(int)value);return(true);
		case OBJPROP_CORNER:
			ObjectSetInteger(0,name,OBJPROP_CORNER,(int)value);return(true);
		case OBJPROP_XDISTANCE:
			ObjectSetInteger(0,name,OBJPROP_XDISTANCE,(int)value);return(true);
		case OBJPROP_YDISTANCE:
			ObjectSetInteger(0,name,OBJPROP_YDISTANCE,(int)value);return(true);
		case OBJPROP_FIBOLEVELS:
			ObjectSetInteger(0,name,OBJPROP_LEVELS,(int)value);return(true);
		case OBJPROP_LEVELCOLOR:
			ObjectSetInteger(0,name,OBJPROP_LEVELCOLOR,(int)value);return(true);
		case OBJPROP_LEVELSTYLE:
			ObjectSetInteger(0,name,OBJPROP_LEVELSTYLE,(int)value);return(true);
		case OBJPROP_LEVELWIDTH:
			ObjectSetInteger(0,name,OBJPROP_LEVELWIDTH,(int)value);return(true);

		default: return(false);
	}

	return(false);
}

bool ObjectSetText(string name, string text, int font_size, string font="", color text_color=CLR_NONE)
{
	int tmpObjType = (int)ObjectGetInteger(0,name,OBJPROP_TYPE);
	if (tmpObjType!=OBJ_LABEL && tmpObjType!=OBJ_TEXT) return(false);
	
	if (StringLen(text)>0 && font_size>0)
	{
		if (ObjectSetString(0,name,OBJPROP_TEXT,text)==true && ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size)==true)
		{
			if(StringLen(font)>0 && ObjectSetString(0,name,OBJPROP_FONT,font)==false)
				return(false);

			if(text_color>-1 && ObjectSetInteger(0,name,OBJPROP_COLOR,text_color)==false)
				return(false);

			return(true);
		}
		return(false);
	}
	return(false);
}

bool IndicatorBuffers(int count)
{
   // this function has no equivalent in MQL5
	return true;
}

void SetIndexStyle(
	int index,
	int type,
	int style=EMPTY,
	int width=EMPTY,
	color clr=clrNONE)
{
	if(width>-1)
		PlotIndexSetInteger(index,PLOT_LINE_WIDTH,width);
	if(clr!=CLR_NONE)
		PlotIndexSetInteger(index,PLOT_LINE_COLOR,clr);
	switch(type)
	{
		case 0:
			PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE); break;
		case 1:
			PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_SECTION); break;
		case 2:
			PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_HISTOGRAM); break;
		case 3:
			PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ARROW); break;
		case 4:
			PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ZIGZAG); break;
		case 12:
			PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_NONE); break;

		default:
			PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE);
	}
	switch(style)
	{
		case 0:
			PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_SOLID); break;
		case 1:
			PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASH); break;
		case 2:
			PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DOT); break;
		case 3:
			PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOT); break;
		case 4:
			PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOTDOT); break;

		default: return;
	}
}

void SetIndexShift(int index, int shift)
{
	PlotIndexSetInteger(index, PLOT_SHIFT, shift);
}

bool SetIndexBuffer( 
   int                    index,
   double                 &buffer[],
   ENUM_INDEXBUFFER_TYPE  data_type,
   bool set_as_series
   )
{
	bool ret = SetIndexBuffer(index, buffer, data_type);
	if (ret) {
		ArraySetAsSeries(buffer, true);
	}
	
	return ret;
}

void IndicatorDigits(int digits)
{
	IndicatorSetInteger(INDICATOR_DIGITS, digits);
}

double MarketInfo(string symbol, int type)
{
	switch(type)
	{
		case 1://MODE_LOW:
			return(SymbolInfoDouble(symbol,SYMBOL_LASTLOW));
		case 2://MODE_HIGH:
			return(SymbolInfoDouble(symbol,SYMBOL_LASTHIGH));
		case 5://MODE_TIME:
			return((double)SymbolInfoInteger(symbol,SYMBOL_TIME));
		case 9: {//MODE_BID:
		   MqlTick last_tick; 
		   SymbolInfoTick(symbol, last_tick);
			return(last_tick.bid);
		}
		case 10:{//MODE_ASK:
			MqlTick last_tick;
		   SymbolInfoTick(symbol, last_tick);
			return(last_tick.ask);
		}
		case 11://MODE_POINT:
			return(SymbolInfoDouble(symbol,SYMBOL_POINT));
		case 12://MODE_DIGITS:
			return((double)SymbolInfoInteger(symbol,SYMBOL_DIGITS));
		case 13://MODE_SPREAD:
			return((double)SymbolInfoInteger(symbol,SYMBOL_SPREAD));
		case 14://MODE_STOPLEVEL:
			return((double)SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL));
		case 15://MODE_LOTSIZE:
			return(SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE));
		case 16://MODE_TICKVALUE:
			return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE));
		case 17://MODE_TICKSIZE:
			return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE));
		case 18://MODE_SWAPLONG:
			return(SymbolInfoDouble(symbol,SYMBOL_SWAP_LONG));
		case 19://MODE_SWAPSHORT:
			return(SymbolInfoDouble(symbol,SYMBOL_SWAP_SHORT));
		case 20://MODE_STARTING:
			return((double)SymbolInfoInteger(symbol,SYMBOL_START_TIME));
		case 21://MODE_EXPIRATION:
			return((double)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME));
		case 22://MODE_TRADEALLOWED:
			return(SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE) != SYMBOL_TRADE_MODE_DISABLED);
		case 23://MODE_MINLOT:
			return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN));
		case 24://MODE_LOTSTEP:
			return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP));
		case 25://MODE_MAXLOT:
			return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX));
		case 26://MODE_SWAPTYPE:
			return((double)SymbolInfoInteger(symbol,SYMBOL_SWAP_MODE));
		case 27://MODE_PROFITCALCMODE:
			return((double)SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE));
		case 28://MODE_MARGINCALCMODE:
			return((double)SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE));
		case 29://MODE_MARGININIT:
			return((double)SymbolInfoDouble(symbol,SYMBOL_MARGIN_INITIAL));
		case 30://MODE_MARGINMAINTENANCE:
			return((double)SymbolInfoDouble(symbol,SYMBOL_MARGIN_MAINTENANCE));
		case 31://MODE_MARGINHEDGED:
			return((double)SymbolInfoDouble(symbol,SYMBOL_MARGIN_HEDGED));
		case 32:{//MODE_MARGINREQUIRED:
		   //double freeMargin = AccountInfoDouble(ACCOUNT_FREEMARGIN);
		   double margin = 0.0;
		   if (OrderCalcMargin(0, symbol, 1, SymbolInfoDouble(symbol, SYMBOL_ASK), margin))
			   return(margin);
			else
			   return(0);
		}
		case 33://MODE_FREEZELEVEL:
			return((double)SymbolInfoInteger(symbol,SYMBOL_TRADE_FREEZE_LEVEL));
		case 34://MODE_CLOSEBY_ALLOWED:
			return(0);

		default: return(0);
	}

	return(0);
}

void IndicatorShortName(string name)
{
	IndicatorSetString(INDICATOR_SHORTNAME, name);
}

void SetIndexDrawBegin(int index, int begin)
{
	PlotIndexSetInteger(index, PLOT_DRAW_BEGIN, begin);
}

//== fxDreema MQL4 to MQL5 Converter ==//