//+------------------------------------------------------------------+
//|                                              RonnieRott's v3.mq4 |
//|                       Copyright © 2011, Giurgia Stefan aka. JUBU |
//|                                               http://www.jubu.ro |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, JuBu Software Corp."
#property link      "http://www.jubu.ro"

extern double Lots = 0.01;
extern string Info1 = "For exponential lots set UseExp to true";
extern bool UseExp = false;
extern int Percent = 1;
extern string Info2 = "Set UseBreakEven to true for Break Even";
extern bool UseBreakEven = true;
extern int BreakEvenPips = 50;
extern string ParamInfo = "Other custom parameters below";
extern int EMA = 15;
extern int HIGHEMA = 50;
extern int LOWEMA = 50;
extern int MacdFastEMA = 35;
extern int MacdSlowEMA = 70;
extern int SignalEMA=1;
extern int MAofSignal=12;
extern int StopLoss = 100;
extern int TakeProfit = 100;
extern string Info3 = "Max. distance between EMA15 and HIGH/LOW of the setup candle";
extern int DistanceEHL = 50;
extern string Info4 = "Min. distance between HighEMA and EMA15(LONG)";
extern int DistanceHE = 6;
extern string Info5 = "Min. distance between LowEMA and EMA15(SHORT)";
extern int DistanceLE = 6;
extern string Info6 = "Distance between High/Low and order price";
extern int DistanceOfOrder = 10;
extern string Info7 = "Interval of hours. Set to true to work";
extern bool UseInterval = false;
extern int FromHour = 6;
extern int ToHour = 18;
extern string Info8 = "Trailing stop option below";
extern bool UseTrailingStop = false;
extern int TrailingStop = 50;
extern string Info9 = "Max. added distance from normal order price in case of some error";
extern int MaxAddedDistance = 11;
extern string Info10 = "Allow next trade if current trade breaks even";
extern bool AllowNextTrade = true;
extern string Info11 = "Custom Stop Condition";
extern bool UseCustomStop = false;
extern int CustomStopHitPrice = 80;
extern int CustomStopLoss = 50;
extern string Info12 = "Exit according to ema straregy";
extern bool UseExitOfEMA = false;
extern int DistanceOfExitFromEMA = 30;
extern int EMAOfExit = 15;
extern string Info13 = "Continuous TrailingStop";
extern bool UseContinuousTrailingStop = false;
extern bool UseTakeProfit = true;
extern int ContinuousTrailingStop = 50;
extern string Info14 = "It only enters a trade if the 3 TFs H1, D1, and H4 are showing the same trend";
extern bool UseTrendsCondition = false;
extern int TendEMAs = 50;

double Lot, Min_Lot, Free, One_Lot, Step, Max_Lot, HEMA50, LEMA50, EMA15, MACDBUFF, MACDMA, point, spread, EMAOE, HEMA50D, LEMA50D, HEMA50H4, LEMA50H4, HEMA50H1, LEMA50H1;
string DTREND, H1TREND, H4TREND, DTREND1, H1TREND1, H4TREND1;
bool lumnoua = false;
bool merge = true;
bool merge2;
int i, co, j, m;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   switch(Digits)
   {
   case 2: point=0.01;
   break;
   case 3: point=0.01;
   break;
   case 4: point=0.0001;
   break;
   case 5: point=0.0001;
   break;
   default: point=0.0001;
   }
   if(UseTrailingStop == true)
   UseBreakEven = false;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {   
lum_noua();
TrendD();
//----------------------- Double trailing stop error
if(UseTrailingStop == true && UseContinuousTrailingStop == true)
{
Alert("Error: You cannot use both the normal trailing stop and the continous trailing stop at the same time.");
return;
}
//----------------------- Atributing values to variables
HEMA50 = iMA(NULL,0,HIGHEMA,0,MODE_EMA,PRICE_HIGH,1);
LEMA50 = iMA(NULL,0,LOWEMA,0,MODE_EMA,PRICE_LOW,1);
EMA15 = iMA(NULL,0,EMA,0,MODE_EMA,PRICE_CLOSE,1);
EMAOE = iMA(NULL,0,EMAOfExit,0,MODE_EMA,PRICE_CLOSE,0);
MACDBUFF = iCustom(NULL,0,"Macd-with-EMA",MacdFastEMA,MacdSlowEMA,SignalEMA,MAofSignal,4,1);
MACDMA = iCustom(NULL,0,"Macd-with-EMA",MacdFastEMA,MacdSlowEMA,SignalEMA,MAofSignal,6,1);
spread = MarketInfo(Symbol(),MODE_SPREAD)*point;
//-----------------------
//------------------------- Exponential lots calculation
if(UseExp == true)
{
Min_Lot=MarketInfo(Symbol(),MODE_MINLOT); 
Max_Lot=MarketInfo(Symbol(),MODE_MAXLOT); 
Free   =AccountFreeMargin();            
One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);
Step   =MarketInfo(Symbol(),MODE_LOTSTEP);   
Lots = MathFloor(Free*Percent/100/One_Lot/Step)*Step;
if(Lots < Min_Lot) Lots = Min_Lot;
if(Lots > Max_Lot) Lots = Max_Lot;
}
//---------------------------
//--------------------------- Break Even and Delet Order functions
co = OrdersTotal();
for(j = 0; j < co; j ++)
{
if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES) == true && OrderSymbol() == Symbol() && OrderMagicNumber() == 123)
{
OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
//----------------------- Delete order case 2nd candle closes below/above EMA
   if(OrderType() == OP_BUYSTOP)
   {
     if(Close[1] < EMA15)                    
       OrderDelete(OrderTicket());
   }
   if(OrderType() == OP_SELLSTOP)
   { 
     if(Close[1] > EMA15)            
       OrderDelete(OrderTicket());
   }
//----------------------- Break Even code
   if(UseBreakEven == true)
   {
   if(OrderType() == OP_BUY && OrderStopLoss() < OrderOpenPrice())
   {
     if(Close[0] >= OrderOpenPrice()+BreakEvenPips*point)                    
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+1*point,OrderTakeProfit(),0);
   }
   if(OrderType() == OP_SELL && OrderStopLoss() > OrderOpenPrice())
   {
     if(Close[0] <= OrderOpenPrice()-BreakEvenPips*point)                    
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-1*point,OrderTakeProfit(),0);
   }
   }
//----------------------- Trailing Stop code
   if(UseTrailingStop == true)
   {
   if(OrderType() == OP_BUY)
   {
     if(Close[0] >= OrderStopLoss()+(TrailingStop*point)*2)                    
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+TrailingStop*point,OrderTakeProfit()+TrailingStop*point+20*point,0);
   }
   if(OrderType() == OP_SELL)
   {
     if(Close[0] <= OrderStopLoss()-(-TrailingStop*point)*2)                   
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-TrailingStop*point,OrderTakeProfit()-TrailingStop*point+20*point,0);
   }
   }
//----------------------- Custom Change StopLoss Option
   if(UseCustomStop == true)
   {
   if(OrderType() == OP_BUY && OrderStopLoss() < OrderOpenPrice()+CustomStopLoss*point)
   {
     if(Close[0] >= OrderOpenPrice()+CustomStopHitPrice*point)                    
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+CustomStopLoss*point,OrderTakeProfit(),0);
   }
   if(OrderType() == OP_SELL && OrderStopLoss() > OrderOpenPrice()-CustomStopLoss*point)
   {
     if(Close[0] <= OrderOpenPrice()-CustomStopHitPrice*point)                    
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-CustomStopLoss*point,OrderTakeProfit(),0);
   }
   }
//----------------------- Exit of EMA
   if(UseExitOfEMA == true)
   {
   if(OrderType() == OP_BUY)
   {
     if(Close[0] <= EMAOE - DistanceOfExitFromEMA*point)                    
       OrderClose(OrderTicket(),OrderLots(),Bid,2);
   }
   if(OrderType() == OP_SELL)
   {
     if(Close[0] >= EMAOE + DistanceOfExitFromEMA*point)                    
       OrderClose(OrderTicket(),OrderLots(),Ask,2);
   }
   }
//----------------------- Continous trailing stop
   if(UseContinuousTrailingStop == true)
   {
     if(UseTakeProfit == true)
     {
     if(OrderType() == OP_BUY)
     {
       if(Close[0] > OrderStopLoss()+ContinuousTrailingStop*point)
       OrderModify(OrderTicket(),OrderOpenPrice(),Close[0]-ContinuousTrailingStop*point,OrderTakeProfit(),0);
     }
     if(OrderType() == OP_SELL)
     {
       if(Close[0] < OrderStopLoss()-ContinuousTrailingStop*point)
       OrderModify(OrderTicket(),OrderOpenPrice(),Close[0]+ContinuousTrailingStop*point,OrderTakeProfit(),0);
     }
     }
     if(UseTakeProfit == false)
     {
     if(OrderType() == OP_BUY)
     {
       if(Close[0] > OrderStopLoss()+ContinuousTrailingStop*point)
       OrderModify(OrderTicket(),OrderOpenPrice(),Close[0]-ContinuousTrailingStop*point,NULL,0);
     }
     if(OrderType() == OP_SELL)
     {
       if(Close[0] < OrderStopLoss()-ContinuousTrailingStop*point)
       OrderModify(OrderTicket(),OrderOpenPrice(),Close[0]+ContinuousTrailingStop*point,NULL,0);
     }
     }
   }
}
}
//-----------------------
//----------------------- Alert error if the Hours parameters aren't right
  if(FromHour > ToHour)
  Alert("Error: FromHour parameter must be less than ToHour parrameter in order for interval to work");
//-----------------------
//----------------------- Code for opening orders while using interval
  if(UseInterval == true)
  {
  if(TimeHour(TimeCurrent()) >= FromHour && TimeHour(TimeCurrent()) < ToHour)
  {
//----------------------- Open pending orders functions if there are none opened
if(co == 0)
{
//----------------------- UseTrendsCondition == true code (while interval)
   if(UseTrendsCondition == true)
   {
   if(merge2 == true && OrderSelect(0,SELECT_BY_POS,MODE_TRADES) == false && Close[1] > EMA15 && EMA15 > HEMA50+DistanceHE*point && High[1] > EMA15 && High[1] < EMA15 + DistanceEHL*point && Low[1] <= EMA15 && Low[1] > EMA15 - DistanceEHL*point && Low[1] > HEMA50 && MACDMA < MACDBUFF && MACDMA > 0 && MACDBUFF > 0)  
   {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point,3,High[1]+DistanceOfOrder*point-StopLoss*point,High[1]+DistanceOfOrder*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point+m*point,3,High[1]+DistanceOfOrder*point+m*point-StopLoss*point,High[1]+DistanceOfOrder*point+m*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m++;
     if(m >= MaxAddedDistance)
     break;
     }                                               
   }
   if(merge2 == true && OrderSelect(0,SELECT_BY_POS,MODE_TRADES) == false && Close[1] < EMA15 && EMA15 < LEMA50-DistanceLE*point && Low[1] < EMA15 && Low[1] > EMA15 - DistanceEHL*point && High[1] >= EMA15 && High[1] < EMA15 + DistanceEHL*point && High[1] < LEMA50 && MACDMA > MACDBUFF && MACDMA < 0 && MACDBUFF < 0) 
   {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point,3,Low[1]-DistanceOfOrder*point+StopLoss*point,Low[1]-DistanceOfOrder*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point-m*point,3,Low[1]-DistanceOfOrder*point-m*point+StopLoss*point,Low[1]-DistanceOfOrder*point-m*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m++;
     if(m >= MaxAddedDistance)
     break;
     }
   }
   }
//----------------------- UseTrendsCondition == false code (while interval)
   else
   {
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) == false && Close[1] > EMA15 && EMA15 > HEMA50+DistanceHE*point && High[1] > EMA15 && High[1] < EMA15 + DistanceEHL*point && Low[1] <= EMA15 && Low[1] > EMA15 - DistanceEHL*point && Low[1] > HEMA50 && MACDMA < MACDBUFF && MACDMA > 0 && MACDBUFF > 0)  
   {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point,3,High[1]+DistanceOfOrder*point-StopLoss*point,High[1]+DistanceOfOrder*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point+m*point,3,High[1]+DistanceOfOrder*point+m*point-StopLoss*point,High[1]+DistanceOfOrder*point+m*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m++;
     if(m >= MaxAddedDistance)
     break;
     }                                               
   }
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) == false && Close[1] < EMA15 && EMA15 < LEMA50-DistanceLE*point && Low[1] < EMA15 && Low[1] > EMA15 - DistanceEHL*point && High[1] >= EMA15 && High[1] < EMA15 + DistanceEHL*point && High[1] < LEMA50 && MACDMA > MACDBUFF && MACDMA < 0 && MACDBUFF < 0) 
   {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point,3,Low[1]-DistanceOfOrder*point+StopLoss*point,Low[1]-DistanceOfOrder*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point-m*point,3,Low[1]-DistanceOfOrder*point-m*point+StopLoss*point,Low[1]-DistanceOfOrder*point-m*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m++;
     if(m >= MaxAddedDistance)
     break;
     }
     } 
   }
}
//----------------------- Open pending orders functions if there are some opened
if(co != 0)
{
 merge = true;
 for(j = 0; j < co; j ++)
 {
    OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
    if(OrderSymbol() == Symbol() && OrderMagicNumber() == 123)
    {
      merge = false;
      if(OrderType() == OP_BUY && OrderStopLoss() == OrderOpenPrice()+1*point && AllowNextTrade == true)
      {
        merge = true;
      }
      if(OrderType() == OP_SELL && OrderStopLoss() == OrderOpenPrice()-1*point && AllowNextTrade == true)
      {
        merge = true;
      }
    }
 }
//----------------------- UseTrendsCondition == true code (while interval and if co!=0)
   if(UseTrendsCondition == true)
   {
   if(merge2 == true && merge == true && Close[1] > EMA15 && EMA15 > HEMA50+DistanceHE*point && High[1] > EMA15 && High[1] < EMA15 + DistanceEHL*point && Low[1] <= EMA15 && Low[1] > EMA15 - DistanceEHL*point && Low[1] > HEMA50 && MACDMA < MACDBUFF && MACDMA > 0 && MACDBUFF > 0)  
   {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point,3,High[1]+DistanceOfOrder*point-StopLoss*point,High[1]+DistanceOfOrder*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
       OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point+m*point,3,High[1]+DistanceOfOrder*point+m*point-StopLoss*point,High[1]+DistanceOfOrder*point+m*point+TakeProfit*point,NULL,123,0,CLR_NONE);
       m++;
       if(m >= MaxAddedDistance)
       break;
     }                                                 
   }
   if(merge2 == true && merge == true && Close[1] < EMA15 && EMA15 < LEMA50-DistanceHE*point && Low[1] < EMA15 && Low[1] > EMA15 - DistanceEHL*point && High[1] >= EMA15 && High[1] < EMA15 + DistanceEHL*point && High[1] < LEMA50 && MACDMA > MACDBUFF && MACDMA < 0 && MACDBUFF < 0) 
   {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point,3,Low[1]-DistanceOfOrder*point+StopLoss*point,Low[1]-DistanceOfOrder*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
       OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point-m*point,3,Low[1]-DistanceOfOrder*point-m*point+StopLoss*point,Low[1]-DistanceOfOrder*point-m*point-TakeProfit*point,NULL,123,0,CLR_NONE);
       m++;
       if(m >= MaxAddedDistance)
       break;
     }  
   }
   }
//----------------------- UseTrendsCondition == false code (while interval and if co!=0)
   else
   {
   if(merge == true && Close[1] > EMA15 && EMA15 > HEMA50+DistanceHE*point && High[1] > EMA15 && High[1] < EMA15 + DistanceEHL*point && Low[1] <= EMA15 && Low[1] > EMA15 - DistanceEHL*point && Low[1] > HEMA50 && MACDMA < MACDBUFF && MACDMA > 0 && MACDBUFF > 0)  
   {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point,3,High[1]+DistanceOfOrder*point-StopLoss*point,High[1]+DistanceOfOrder*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
       OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point+m*point,3,High[1]+DistanceOfOrder*point+m*point-StopLoss*point,High[1]+DistanceOfOrder*point+m*point+TakeProfit*point,NULL,123,0,CLR_NONE);
       m++;
       if(m >= MaxAddedDistance)
       break;
     }                                                 
   }
   if(merge == true && Close[1] < EMA15 && EMA15 < LEMA50-DistanceHE*point && Low[1] < EMA15 && Low[1] > EMA15 - DistanceEHL*point && High[1] >= EMA15 && High[1] < EMA15 + DistanceEHL*point && High[1] < LEMA50 && MACDMA > MACDBUFF && MACDMA < 0 && MACDBUFF < 0) 
   {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point,3,Low[1]-DistanceOfOrder*point+StopLoss*point,Low[1]-DistanceOfOrder*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
       OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point-m*point,3,Low[1]-DistanceOfOrder*point-m*point+StopLoss*point,Low[1]-DistanceOfOrder*point-m*point-TakeProfit*point,NULL,123,0,CLR_NONE);
       m++;
       if(m >= MaxAddedDistance)
       break;
     }  
   }
   }
}
}
}
//-----------------------
//----------------------- Code for opening orders while not using interval
else
{
//----------------------- Open pending orders functions if there are none opened
if(co == 0)
{
//----------------------- UseTrendsCondition == true code (no interval and if co==0)
   if(UseTrendsCondition == true)
   {
   if(merge2 == true && OrderSelect(0,SELECT_BY_POS,MODE_TRADES) == false && Close[1] > EMA15 && EMA15 > HEMA50+DistanceHE*point && High[1] > EMA15 && High[1] < EMA15 + DistanceEHL*point && Low[1] <= EMA15 && Low[1] > EMA15 - DistanceEHL*point && Low[1] > HEMA50 && MACDMA < MACDBUFF && MACDMA > 0 && MACDBUFF > 0)  
   {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point,3,High[1]+DistanceOfOrder*point-StopLoss*point,High[1]+DistanceOfOrder*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point+m*point,3,High[1]+DistanceOfOrder*point+m*point-StopLoss*point,High[1]+DistanceOfOrder*point+m*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m++;
     if(m >= MaxAddedDistance)
     break;
     }                                               
   }
   if(merge2 == true && OrderSelect(0,SELECT_BY_POS,MODE_TRADES) == false && Close[1] < EMA15 && EMA15 < LEMA50-DistanceLE*point && Low[1] < EMA15 && Low[1] > EMA15 - DistanceEHL*point && High[1] >= EMA15 && High[1] < EMA15 + DistanceEHL*point && High[1] < LEMA50 && MACDMA > MACDBUFF && MACDMA < 0 && MACDBUFF < 0) 
   {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point,3,Low[1]-DistanceOfOrder*point+StopLoss*point,Low[1]-DistanceOfOrder*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point-m*point,3,Low[1]-DistanceOfOrder*point-m*point+StopLoss*point,Low[1]-DistanceOfOrder*point-m*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m++;
     if(m >= MaxAddedDistance)
     break;
     }   
   }
   }
//----------------------- UseTrendsCondition == false code (no interval and if co==0)
   else
   {
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) == false && Close[1] > EMA15 && EMA15 > HEMA50+DistanceHE*point && High[1] > EMA15 && High[1] < EMA15 + DistanceEHL*point && Low[1] <= EMA15 && Low[1] > EMA15 - DistanceEHL*point && Low[1] > HEMA50 && MACDMA < MACDBUFF && MACDMA > 0 && MACDBUFF > 0)  
   {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point,3,High[1]+DistanceOfOrder*point-StopLoss*point,High[1]+DistanceOfOrder*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point+m*point,3,High[1]+DistanceOfOrder*point+m*point-StopLoss*point,High[1]+DistanceOfOrder*point+m*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m++;
     if(m >= MaxAddedDistance)
     break;
     }                                               
   }
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) == false && Close[1] < EMA15 && EMA15 < LEMA50-DistanceLE*point && Low[1] < EMA15 && Low[1] > EMA15 - DistanceEHL*point && High[1] >= EMA15 && High[1] < EMA15 + DistanceEHL*point && High[1] < LEMA50 && MACDMA > MACDBUFF && MACDMA < 0 && MACDBUFF < 0) 
   {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point,3,Low[1]-DistanceOfOrder*point+StopLoss*point,Low[1]-DistanceOfOrder*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point-m*point,3,Low[1]-DistanceOfOrder*point-m*point+StopLoss*point,Low[1]-DistanceOfOrder*point-m*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m++;
     if(m >= MaxAddedDistance)
     break;
     }   
   }
   }
}
//----------------------- Open pending orders functions if there are some opened
if(co != 0)
{
 merge = true;
 for(j = 0; j < co; j ++)
 {
    OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
    if(OrderSymbol() == Symbol() && OrderMagicNumber() == 123)
    {
      merge = false;
      if(OrderType() == OP_BUY && OrderStopLoss() == OrderOpenPrice()+1*point && AllowNextTrade == true)
      {
        merge = true;
      }
      if(OrderType() == OP_SELL && OrderStopLoss() == OrderOpenPrice()-1*point && AllowNextTrade == true)
      {
        merge = true;
      }
    }
 }
//----------------------- UseTrendsCondition == true code (no interval and if co!=0)
   if(UseTrendsCondition == true)
   {
   if(merge2 == true && merge == true && Close[1] > EMA15 && EMA15 > HEMA50+DistanceHE*point && High[1] > EMA15 && High[1] < EMA15 + DistanceEHL*point && Low[1] <= EMA15 && Low[1] > EMA15 - DistanceEHL*point && Low[1] > HEMA50 && MACDMA < MACDBUFF && MACDMA > 0 && MACDBUFF > 0)  
   {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point,3,High[1]+DistanceOfOrder*point-StopLoss*point,High[1]+DistanceOfOrder*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
       OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point+m*point,3,High[1]+DistanceOfOrder*point+m*point-StopLoss*point,High[1]+DistanceOfOrder*point+m*point+TakeProfit*point,NULL,123,0,CLR_NONE);
       m++;
       if(m >= MaxAddedDistance)
       break;
     }                                                 
   }
   if(merge2 == true && merge == true && Close[1] < EMA15 && EMA15 < LEMA50-DistanceHE*point && Low[1] < EMA15 && Low[1] > EMA15 - DistanceEHL*point && High[1] >= EMA15 && High[1] < EMA15 + DistanceEHL*point && High[1] < LEMA50 && MACDMA > MACDBUFF && MACDMA < 0 && MACDBUFF < 0) 
   {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point,3,Low[1]-DistanceOfOrder*point+StopLoss*point,Low[1]-DistanceOfOrder*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
       OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point-m*point,3,Low[1]-DistanceOfOrder*point-m*point+StopLoss*point,Low[1]-DistanceOfOrder*point-m*point-TakeProfit*point,NULL,123,0,CLR_NONE);
       m++;
       if(m >= MaxAddedDistance)
       break;
     }  
   }
   }
//----------------------- UseTrendsCondition == false code (no interval and if co!=0)
   else
   {
   if(merge == true && Close[1] > EMA15 && EMA15 > HEMA50+DistanceHE*point && High[1] > EMA15 && High[1] < EMA15 + DistanceEHL*point && Low[1] <= EMA15 && Low[1] > EMA15 - DistanceEHL*point && Low[1] > HEMA50 && MACDMA < MACDBUFF && MACDMA > 0 && MACDBUFF > 0)  
   {
     OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point,3,High[1]+DistanceOfOrder*point-StopLoss*point,High[1]+DistanceOfOrder*point+TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
       OrderSend(Symbol(),OP_BUYSTOP,Lots,High[1]+DistanceOfOrder*point+m*point,3,High[1]+DistanceOfOrder*point+m*point-StopLoss*point,High[1]+DistanceOfOrder*point+m*point+TakeProfit*point,NULL,123,0,CLR_NONE);
       m++;
       if(m >= MaxAddedDistance)
       break;
     }                                                 
   }
   if(merge == true && Close[1] < EMA15 && EMA15 < LEMA50-DistanceHE*point && Low[1] < EMA15 && Low[1] > EMA15 - DistanceEHL*point && High[1] >= EMA15 && High[1] < EMA15 + DistanceEHL*point && High[1] < LEMA50 && MACDMA > MACDBUFF && MACDMA < 0 && MACDBUFF < 0) 
   {
     OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point,3,Low[1]-DistanceOfOrder*point+StopLoss*point,Low[1]-DistanceOfOrder*point-TakeProfit*point,NULL,123,0,CLR_NONE);
     m = 1;
     while(GetLastError() == 130)
     {
       OrderSend(Symbol(),OP_SELLSTOP,Lots,Low[1]-DistanceOfOrder*point-m*point,3,Low[1]-DistanceOfOrder*point-m*point+StopLoss*point,Low[1]-DistanceOfOrder*point-m*point-TakeProfit*point,NULL,123,0,CLR_NONE);
       m++;
       if(m >= MaxAddedDistance)
       break;
     }  
   }
   }
}
}

//-----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//------------------- New candle
void lum_noua()                          
  {                                        
   static datetime New_Time=0;  
   lumnoua = false;                                       
   if(New_Time!=Time[0])                   
     {
      New_Time=Time[0];                
      lumnoua = true;
     }
  }
//-------------------
void TrendD()
{
//-- Initial strat of trend direction deduction function
HEMA50D = iMA(NULL,PERIOD_D1,TendEMAs,0,MODE_EMA,PRICE_HIGH,0);
LEMA50D = iMA(NULL,PERIOD_D1,TendEMAs,0,MODE_EMA,PRICE_LOW,0);
HEMA50H4 = iMA(NULL,PERIOD_H4,TendEMAs,0,MODE_EMA,PRICE_HIGH,0);
LEMA50H4 = iMA(NULL,PERIOD_H4,TendEMAs,0,MODE_EMA,PRICE_LOW,0);
HEMA50H1 = iMA(NULL,PERIOD_H1,TendEMAs,0,MODE_EMA,PRICE_HIGH,0);
LEMA50H1 = iMA(NULL,PERIOD_H1,TendEMAs,0,MODE_EMA,PRICE_LOW,0);
//--
if(Close[0] > HEMA50D)
{
DTREND = "UP";
}
if(Close[0] < HEMA50D && Close[0] > LEMA50D)
{
DTREND = "IN-BETWEEN";
}
if(Close[0] < LEMA50D)
{
DTREND = "DOWN";
}
//--
if(Close[0] > HEMA50H4)
{
H4TREND = "UP";
}
if(Close[0] < HEMA50H4 && Close[0] > LEMA50H4)
{
H4TREND = "IN-BETWEEN";
}
if(Close[0] < LEMA50H4)
{
H4TREND = "DOWN";
}
//--
if(Close[0] > HEMA50H1)
{
H1TREND = "UP";
}
if(Close[0] < HEMA50H1 && Close[0] > LEMA50H1)
{
H1TREND = "IN-BETWEEN";
}
if(Close[0] < LEMA50H1)
{
H1TREND = "DOWN";
}
merge2 = false;
if(DTREND == "UP" && H4TREND == "UP" && H1TREND == "UP")
merge2 = true;
if(DTREND == "DOWN" && H4TREND == "DOWN" && H1TREND == "DOWN")
merge2 = true;
}

