//------------------------------------------------------------------+
//|                                               |
//|                                              |
//|                                       |
//------------------------------------------------------------------+
#property copyright "u"
#property link      "h"

extern double Lot      = 0.2;
extern int TakeProfit  = 25;
extern int StopLoss    = 18;

extern int Slippage = 5;
extern int KPeriod  = 5;
extern int DPeriod  = 3;
extern int Slowing  = 3;

extern int Magic    = 112312;
 
 
 
double BullDiver, BearDiver, SL, TP;
int ticket;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

if (Digits ==3 || Digits == 5)
{
      TakeProfit *=10;
      StopLoss   *=10;
      Slippage   *=10;
      
 
}
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
 
    
   return(0);
   }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
  BullDiver = iCustom(Symbol(), 0, "DiverStoch",KPeriod, DPeriod, Slowing, 1, 0);
  BearDiver = iCustom(Symbol(), 0, "DiverStoch",KPeriod, DPeriod, Slowing, 2, 0);

if(Bid == BearDiver && CountSell() == 0) // Ордер на продажу
       {
      SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
      TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
      
      ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, 0, Magic, 0, Red);
      
      if(ticket > 0)
            {
      if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
                     {
                      OrderModify(ticket,OrderOpenPrice(), SL, TP, 0);
                     }
            }
       }
 if (Ask == BullDiver && CountBuy() == 0) //Ордер на покупку; 
         {
           SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
           TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
 
      ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, Slippage, 0, 0, 0, Magic, 0, Blue);
      
      if(ticket > 0)
               {
      if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
                     {
                      OrderModify(ticket,OrderOpenPrice(), SL, TP, 0);
                     }
               }
         }     


   return(0);
  }
//+------------------------------------------------------------------+
int CountSell()
   {
   int count = 0;
   for (int trade = OrdersTotal()-1; trade>=0; trade --)
            {
            OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
                  {
                  if (OrderType() == OP_SELL)
                  count++; 
       
                  }
           }
           return(count);
  }

//+------------------------------------------------------------------+
int CountBuy()
   {
   int count = 0;
   for (int trade = OrdersTotal()-1; trade>=0; trade --)
            {
            OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
                  {
                  if (OrderType() == OP_BUY)
                  count++; 
       
                  }
           }
         return(count);  
  }




//+------------------------------------------------------------------+