//+------------------------------------------------------------------+
//|                                                      Test3_L.mq4 |
//|                                                             Test |
//|                                                              TST |
//+------------------------------------------------------------------+
#property copyright "Test3_L"
#property link      "Tst"



extern double Lots            = 0.1;
extern int    TakeProfit      = 300;
extern int    StopLoss        = 50;
extern int    Slippage        = 5;
extern string coment          = "0";
extern int    Magic           = 123;
extern string Indi            = "Данные индикатора";
extern string TimeFrame       = "current time frame";
extern int    HalfLength      = 56;
extern int    Price           = PRICE_CLOSE;
extern double ATRMultiplier   = 2.0;
extern int    ATRPeriod       = 100;
extern bool   Interpolate     = true;

double PriceHigh, PriceLow, 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                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() 
  {

   
  }

//+------------------------------------------------------------------+
//| Expert start function                                             |
//+------------------------------------------------------------------+
int start ()
{
    
    PriceHigh = iCustom(Symbol(),0, "TMA with Distances", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); 
    PriceLow  = iCustom(Symbol(),0, "TMA with Distances", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); 

  if (Bid >= PriceHigh && CountSell()==0)
    {
        SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
        TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
        
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, coment, Magic, 0, clrRed);
        if (ticket>0)
        { 
          if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
              OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
                 
        }
     }
  if (Ask<= PriceLow && CountBuy()==0)
  {
    SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
    TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
    
    ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, coment, Magic, 0, clrBlue);
        if (ticket>0)
        { 
          if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) ==true)
              OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
             
  }      
}
if (Ask <=PriceLow && CountSell() ==0)
  {
    for(int i=OrdersTotal()-1; i >=0; i--)
    {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)
             OrderClose(OrderTicket(),OrderLots(), Ask, Slippage, clrBlack);        
      }
    } 
  }
if (Bid >=PriceHigh && CountBuy() ==0)
  {
    for(i=OrdersTotal()-1; i >=0; i--)
    {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)
             OrderClose(OrderTicket(),OrderLots(), Bid, Slippage, clrBlack);        
      }
    } 
  } 
   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);
}  