//+------------------------------------------------------------------+
//|                                               0AlMeu_PendingOrders.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "0AlMeu_PendingOrders"

#define MAGICMA  20131111


extern double buyPrice = 0;
extern double buyLots = 0;
extern double buySl = 0;
extern double buyTp =0;
extern double sellPrice = 0;
extern double sellLots =0;
extern double sellSl =0;
extern double sellTp =0;

// pENTRU LABELS
extern color  Clock_Color = Magenta;
extern string Corner_Placement = "1 is top right 3 is bottom right";
extern int    Corner = 2;
string objname="Spread&Bar";
//GATA LABELS


//--- Inputs
extern double Lots          =0.1;
input double MaximumRisk   =0.02;
input double DecreaseFactor=3;
input int    MovingPeriod  =12;
input int    MovingShift   =6;

int deinit()
{
   resetBuy();
   resetSell();
   ObjectDelete(objname);
   deleteEmptyLines();
   return(0);
}




int init()
{
  //PT LABELS
  ObjectCreate(objname, OBJ_LABEL,0, 0, 0);
  ObjectSet(objname, OBJPROP_CORNER, Corner);
  ObjectSet(objname, OBJPROP_XDISTANCE, 10);
  ObjectSet(objname, OBJPROP_YDISTANCE, 2);  
  //GATA LABELS
}








//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
   RefreshRates();
//--- sell conditions
   if(MarketInfo(0,MODE_BID) >= sellPrice && sellPrice!=0)
     {
      res=OrderSend(Symbol(),OP_SELL,sellLots,Bid,3,0,0,"sellPrice"+sellPrice,MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(MarketInfo(0,MODE_BID) <= buyPrice && buyPrice !=0)
     {
      res=OrderSend(Symbol(),OP_BUY,buyLots,Ask,3,0,0,"buyPrice"+buyPrice,MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   RefreshRates();
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if((MarketInfo(0,MODE_BID) <= buySl && buySl !=0) || (MarketInfo(0,MODE_BID) >=buyTp && buyTp !=0))
           {
            bool closeBuy = OrderClose(OrderTicket(),OrderLots(),Bid,3,NULL);
               
            resetBuy();
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if((MarketInfo(0,MODE_BID) >= sellSl && sellSl !=0)|| (MarketInfo(0,MODE_BID) <= sellTp && sellTp !=0))
           {
           bool closeSell =  OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
             
            resetSell();
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }   
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void start()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
   DrawLinesBuy();
   DrawLinesSell();
//--- calculate open orders by current symbol
   //if(CalculateCurrentOrders(Symbol())==0) 
   CheckForOpen();
  // else                                    
   CheckForClose();
//---
   deleteEmptyLines();

   //PTLABEL
   ObjectSetText(objname,"BPrice: " +buyPrice +" BLots: "+buyLots+
   " bSL:"+ buySl + " bTP: " + buyTp+" SPrice: " +buyPrice +" SLots: "+sellLots+
   " sSL:"+ sellSl + " sTP: " + sellTp ,16, "Courier", Clock_Color);
   //GATA LABEL



  }
//+------------------------------------------------------------------+


void resetBuy()
{
    buyPrice = 0;
    buyLots = 0;
    buySl = 0;
    buyTp =0;
    ObjectDelete(ObjectName("PriceToBuy"));
    ObjectDelete(ObjectName("SLforBuy"));
    ObjectDelete(ObjectName("TPforBuy"));
}

void resetSell()
{
    sellPrice = 0;
    sellLots= 0;
    sellSl = 0;
    sellTp =0;
    ObjectDelete(ObjectName("PriceToSell"));
    ObjectDelete(ObjectName("SLforSell"));
    ObjectDelete(ObjectName("TPforSell"));
}



void DrawLinesBuy()
{
 
 if (buyPrice !=0)
   {
      ObjectCreate(0,"PriceToBuy",OBJ_HLINE,0,TimeCurrent(),buyPrice);
      ObjectSet("PriceToBuy",OBJPROP_COLOR,LimeGreen);
      ObjectSet("PriceToBuy",OBJPROP_WIDTH,1);
      ObjectSet("PriceToBuy",OBJPROP_STYLE,STYLE_DOT);
      ObjectSet("PriceToBuy",OBJPROP_SELECTABLE,false);
      ObjectSet("PriceToBuy",OBJPROP_BACK,true);
      ObjectSetText("PriceToBuy","buy Price "+buyPrice);
   }
  
  if (buySl!=0) 
  {
      ObjectCreate(0,"SLforBuy",OBJ_HLINE,0,TimeCurrent(),buySl);
      ObjectSet("SLforBuy",OBJPROP_COLOR,DarkOrange);
      ObjectSet("SLforBuy",OBJPROP_WIDTH,1);
      ObjectSet("SLforBuy",OBJPROP_STYLE,STYLE_DOT);
      ObjectSet("SLforBuy",OBJPROP_SELECTABLE,false);
      ObjectSet("SLforBuy",OBJPROP_BACK,true);
      ObjectSetText("SLforBuy","buy StopLoss "+buySl);
  }
  if (buyTp!=0) 
  {
      ObjectCreate(0,"TPforBuy",OBJ_HLINE,0,TimeCurrent(),buyTp);
      ObjectSet("TPforBuy",OBJPROP_COLOR,Blue);
      ObjectSet("TPforBuy",OBJPROP_WIDTH,1);
      ObjectSet("TPforBuy",OBJPROP_STYLE,STYLE_DOT);
      ObjectSet("TPforBuy",OBJPROP_SELECTABLE,false);
      ObjectSet("TPforBuy",OBJPROP_BACK,true);
      ObjectSetText("TPforBuy","buy TakeProfit "+buyTp);
  } 
 WindowRedraw();
 
 return;
 }
 
 
 void DrawLinesSell()
{
 
 if (sellPrice !=0)
   {
      ObjectCreate(0,"PriceToSell",OBJ_HLINE,0,TimeCurrent(),sellPrice);
      ObjectSet("PriceToSell",OBJPROP_COLOR,LimeGreen);
      ObjectSet("PriceToSell",OBJPROP_WIDTH,1);
      ObjectSet("PriceToSell",OBJPROP_STYLE,STYLE_DASH);
      ObjectSet("PriceToSell",OBJPROP_SELECTABLE,false);
      ObjectSet("PriceToSell",OBJPROP_BACK,true);
      ObjectSetText("PriceToSell","sell Price "+sellPrice);
   }
  
  if (sellSl!=0) 
  {
      ObjectCreate(0,"SLforSell",OBJ_HLINE,0,TimeCurrent(),sellSl);
      ObjectSet("SLforSell",OBJPROP_COLOR,DarkOrange);
      ObjectSet("SLforSell",OBJPROP_WIDTH,1);
      ObjectSet("SLforSell",OBJPROP_STYLE,STYLE_DASH);
      ObjectSet("SLforSell",OBJPROP_SELECTABLE,false);
      ObjectSet("SLforSell",OBJPROP_BACK,true);
      ObjectSetText("SLforSell","sell StopLoss "+sellSl);
  }
  if (sellTp!=0) 
  {
      ObjectCreate(0,"TPforSell",OBJ_HLINE,0,TimeCurrent(),sellTp);
      ObjectSet("TPforSell",OBJPROP_COLOR,Blue);
      ObjectSet("TPforSell",OBJPROP_WIDTH,1);
      ObjectSet("TPforSell",OBJPROP_STYLE,STYLE_DASH);
      ObjectSet("TPforSell",OBJPROP_SELECTABLE,false);
      ObjectSet("TPforSell",OBJPROP_BACK,true);
      ObjectSetText("TPforSell","sell TakeProfit "+sellTp);
  } 
 WindowRedraw();
 
 return;
 }
 
void deleteEmptyLines()
{
   if (sellPrice ==0)
   ObjectDelete("PriceToSell");
   if (buyPrice ==0)
   ObjectDelete("PriceToBuy");
   if (sellTp ==0)
   ObjectDelete("TPforSell");
   if (sellSl ==0)
   ObjectDelete("SLforSell");
   if (buySl ==0)
   ObjectDelete("SLforBuy");
   if (buyTp ==0)
   ObjectDelete("TPforBuy");

} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 /*
void DrawLine(string LineLabel,string LineText,string TMLine,int LnType,color LnColor,double LinePrice)
  {
   if(ObjectFind(LineLabel)!=0)
     {
      ObjectCreate(LineLabel,OBJ_TEXT,0,Time[0]+Period()*60*1,LinePrice);
      ObjectSetText(LineLabel,LineText,8,"Arial",EMPTY);
     }
   else
     {
      ObjectMove(LineLabel,0,Time[0]+Period()*60*1,LinePrice);
      ObjectSetText(LineLabel,LineText,8,"Arial",EMPTY);
     }

   if(ObjectFind(TMLine)!=0)
     {
      ObjectCreate(TMLine,LnType,0,Time[1],LinePrice,Time[0],LinePrice);
      ObjectSet(TMLine,OBJPROP_STYLE,STYLE_DASHDOTDOT);
      ObjectSet(TMLine,OBJPROP_COLOR,LnColor);
      //         ObjectSet(TMLine, OBJPROP_RAY, true);
     }
   else
     {
      ObjectMove(TMLine,0,Time[1],LinePrice);
      ObjectMove(TMLine,1,Time[0],LinePrice);
     }
  }
//+------------------------------------------------------------------+
void DeleteAllLines()
  {
   ObjectDelete(0,"HiddenSSLPrice label");
   ObjectDelete(0,"HiddenBSLPrice label");
   ObjectDelete(0,"HSSL line");
   ObjectDelete(0,"HBSL line");
   ObjectDelete(0,"HiddenTP label");
   ObjectDelete(0,"HSTP line");
   ObjectDelete(0,"HBTP line");
   ObjectDelete(0,"HiddenBE label");
   ObjectDelete(0,"HBE line");
   ObjectDelete(0,"HiddenTS label");
   ObjectDelete(0,"HTS line");
   ObjectDelete(objname);
   return;
  }*/