//+------------------------------------------------------------------+
//|                                           ayman_broken-trend.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//+------------------------------------------------------------------+
//|                     Exported variables                           |
//+------------------------------------------------------------------+
input bool       CloseAtNext=true;

input double Lots=0.01;
input int        MagicNo=2018; 

input double     Step_TakeProfits_Buy=2,
                 Step_TakeProfits_Sell=2,
                 Balance=500,
                 Tryy=20; 
                 
input double     Stoploss=0.1;
                 
 string var2="_______________Ichimoku Settings";
 int InpTenkan=9,InpKijun=26,InpSenkou=52;                 
//+------------------------------------------------------------------+
//|                         Local variables                          |
//+------------------------------------------------------------------+
datetime time;
double point;
int Q,digits,Lot_Decimal;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
    
 if(MarketInfo(Symbol(),MODE_MINLOT)<0.1)Lot_Decimal=2;else Lot_Decimal=1;
 if(_Digits==5||_Digits==3)Q=10;else Q=1;                            
 if(_Digits<4)point=0.01;else point=0.0001;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

 double lp=iLow(Symbol(),PERIOD_W1,0); 
 double hp=iHigh(Symbol(),PERIOD_W1,0);
 
  double pipsbuy=(Ask-lp)/Point;
 if(Tryy>0&&pipsbuy>0)double lotsbuy=(Balance/Tryy/pipsbuy);

 double pipssell=(hp-Bid)/Point;
 if(Tryy>0&&pipssell>0)double lotssell=(Balance/Tryy/pipssell); 
 double Takeprofitbuy=(Ask-lp)/Point/10*Step_TakeProfits_Buy;
 double Takeprofitsell=(hp-Bid)/Point/10*Step_TakeProfits_Sell;
 
 double K=iIchimoku(Symbol(), 0, InpTenkan, InpKijun, InpSenkou, MODE_KIJUNSEN, 1); 
 
 double K2=iIchimoku(Symbol(), 0, InpTenkan, InpKijun, InpSenkou, MODE_KIJUNSEN, 2);
 
 double close=iClose(Symbol(),0,1);
 
  double A=iCustom(Symbol(),0,"Trends_ZigZag",0,1);
  
   double val1=GetObjectVal("uptrend",1);
   double val2=GetObjectVal("dntrend",1);
   
   double val11=GetObjectVal("uptrend",2);
   double val22=GetObjectVal("dntrend",2);   

  double buy=ObjectGet("uptrend",OBJPROP_PRICE1);
  double sell=ObjectGet("dntrend",OBJPROP_PRICE1);
  Comment(buy,"   ",sell);
  
   double low1=iLow(Symbol(),0,1);
   double low2=iLow(Symbol(),0,2); 
   
    double high1=iHigh(Symbol(),0,1);
    double high2=iHigh(Symbol(),0,2);

//if(buy>0&&Close[1]>buy&&Low[1]<buy)//op_buy
//if(sell>0&&Close[1]<sell&&High[1]>sell)//op_sell

   //-------------------------------------------------BUY Order
   
 if(close>K && close>val1 &&  K>val1 && K2<val11)
  {
  if(time!=Time[0])
   {
      if(Stoploss!=0){double SLb=lp-Stoploss*point;}else SLb=0;
   if(Takeprofitbuy!=0){double TPb=Ask+Takeprofitbuy*point;}else TPb=0;
    bool b=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotsbuy,Lot_Decimal),NormalizeDouble(Ask,Digits),3*Q,SLb,TPb,"aymoon",MagicNo,0,Blue); 
   time=Time[0];
   }
  } 
  
  //-----------------------------------------------SELL Order

 if(close<K && close<val2 &&  K<val2 && K2>val22)
  {
  if(time!=Time[0])
   {
   if(Stoploss!=0){double SLs=hp+Stoploss*point;}else SLs=0;
   if(Takeprofitsell!=0){double TPs=Bid-Takeprofitsell*point;}else TPs=0;
    bool s=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell,Lot_Decimal),NormalizeDouble(Bid,Digits),3*Q,SLs,TPs,"aymoon",MagicNo,0,Red); 
   time=Time[0];
   }
  } 
 //------------------------Close Orders Conditions 
 if(CloseAtNext)
 {
  //--------Close Buy Order 

 
  if((close<val1)||(K<val1)||(close<K))CloseOrders1(OP_BUY);
  
  //--------Close Sell Order
 if((close>val2)||(K>val2)||(close>K))CloseOrders1(OP_SELL);
 }
   
  }
//+------------------------------------------------------------------+
double GetObjectVal(string name , int index)
  {
   double val=EMPTY_VALUE ;
   for(int i=0;i<ObjectsTotal();i++)
     {
       string objname=ObjectName(i);
       if(ObjectType(objname)==OBJ_TREND && StringFind(objname,name)>=0)
        {
         val=ObjectGetValueByShift(objname,index) ;
        }
     }
    return(val);
  }
  
  void CloseOrders1(int type)
{ 
 for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
 { 
  bool s=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
  if(OrderType()==type&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNo)
  { 
   bool c=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(OrderClosePrice(),Digits),3*Q); 
  }    
 } 
} 
  
  