///+------------------------------------------------------------------+
//|                                                       Ordera.mq4 |
//|                                                  Ivanov Alexandr |
//|                                                 jurist70@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Ivanov Alexandr"
#property link      "jurist70@mail.ru"

//---- input parameters
extern int Magic = 12345;
extern int       TP=100;
extern double    Max_Price=1.4;
extern double    Min_Price=1.36;
extern double    Lot=0.1;
//+------------------------------------------------------------------+ 
//+------------------------------------------------------------------+ 
 int orders(int type,string comm){int j=0;for(int i=0;i<OrdersTotal();i++){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)if((OrderComment()==comm)&&(OrderType()==type)&&(OrderMagicNumber()==Magic)&&(OrderSymbol()==Symbol()))j++;}return(j);}
//+------------------------------------------------------------------+
int start()
  {
//  Alert ("Цикл начат");
  string Symb=Symbol();
  int Step=TP+2;
  double Price;
//----Открытие ордеров BuyStop------------------------------------------------------------------------------------------
//------------------------------1---------------------------------------------------------------------------------------
      for (Price=Max_Price-Step*Point; Price>Ask+10*Point; Price=Price-Step*Point) // идем от максимума к текущей цене
         {
         int N=0; //счетчик ордеров
         for(int i=0;i<OrdersTotal();i++) // цикл перебора ордеров
            {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) //выбор ордера
               { //анализ открытого ордера
               if (Price==OrderOpenPrice())                //если цена совпадает
                  N=N+1;
               } //выбираем следующий открытый ордер
            }
         if(N==0) //если ордеров с такой ценой не нашлось
            { //открываем ордер
            //Alert("Новый BUYSTOP ", Price);
            if(orders(OP_BUYSTOP,DoubleToStr(Price,Digits))+orders(OP_BUY,DoubleToStr(Price,Digits))==0)
            {int Ticket=OrderSend(Symb, OP_BUYSTOP, Lot, Price, 0, 0, Price+TP*Point,DoubleToStr(Price,Digits),Magic,0,Blue);}
            //if (GetLastError()>0)Alert("Ошибка ", GetLastError());
            }
         } //Пришли к рынку
//----Открытие ордеров SellStop------------------------------------------------------------------------------------------
//      Alert("Нижняя часть");
      for (Price=Min_Price+Step*Point; Price<Bid-10*Point; Price=Price+Step*Point) // идем от минимума к текущей цене
         {
         N=0; //счетчик ордеров
         for(int ii=0;ii<OrdersTotal();ii++) // цикл перебора ордеров
            {
            if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES)==true) //выбор ордера
               { //анализ открытого ордера
               if (Price==OrderOpenPrice())                //если цена совпадает
                  N=N+1;
               } //выбираем следующий открытый ордер
            }
         if(N==0) //если ордеров с такой ценой не нашлось
            { //открываем ордер
            //Alert("Новый SELLSTOP ", Price);
            if(orders(OP_SELLSTOP,DoubleToStr(Price,Digits))+orders(OP_SELL,DoubleToStr(Price,Digits))==0)
            {Ticket=OrderSend(Symb, OP_SELLSTOP, Lot, Price, 0, 0, Price-TP*Point,DoubleToStr(Price,Digits),Magic,0,Red);}
            //if(GetLastError()>0)Alert("Ошибка ", GetLastError());
            }
         } //Пришли к рынку



// Alert("Цикл окончен");
  return(0);
  }
  
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   //Alert("Программа выгрузилась!");
//----
   return(0);
  }