//+------------------------------------------------------------------+
//|                                                AhalayMahalay.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//|                                               Автор : Batmanyuga |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lots      = 0.10;
extern int    Magic     = 1111;
extern int    StopLoss  = 8;
extern int    TakeProfit= 10;
extern int    Slippage  = 3;
extern int    HourStart = 9;
extern int    HourStop  = 19;

//+------------------------------------------------------------------+
extern string  STO      = "Параметры индюка 100 пипс";
extern int BPERIOD = 36;
extern int APERIOD = 3;
extern int aTake_Profit = 0;
extern int aStop_Loss = 0;
extern bool aAlerts = TRUE;
extern bool EmailOn = false;
extern int SignalTextSize = 9;
extern color BuySignalColor = Yellow;
extern color SellSignalColor = Red;
//+------------------------------------------------------------------+
double SL, TP,ArrowBuy,ArrowSell ;
int ticket ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{ 

   if(Digits==3 || Digits==5)
  {
   StopLoss*=  10;
   Slippage*=  10;
   TakeProfit*=10;
  
  }
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{ 
 if(TimeHour(TimeCurrent())>=HourStart && TimeHour(TimeCurrent())<= HourStop)
 {
  StopBuy();
  StopSell();
  ArrowBuy =iCustom(NULL,0,"100pipstodayscalper",BPERIOD,APERIOD,aTake_Profit,aStop_Loss,aAlerts,EmailOn,SignalTextSize,BuySignalColor,SellSignalColor,0,1);
  ArrowSell =iCustom(NULL,0,"100pipstodayscalper",BPERIOD,APERIOD,aTake_Profit,aStop_Loss,aAlerts,EmailOn,SignalTextSize,BuySignalColor,SellSignalColor,1,1); 
  int l_error_60;
  int l_count_56 = 0;
  
  
   
   if(CountBuy()==0 && ArrowBuy!=2147483647 && CountBuyClose()==0  )
   {
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);
    if(ticket>0)
    while (true)
     {
    SL=NormalizeDouble(Ask-StopLoss*Point,Digits);
    TP=NormalizeDouble(Ask+TakeProfit*Point,Digits);
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
    if(! OrderModify(ticket,OrderOpenPrice(),SL,TP,0,Blue))
    Alert("Ошибка модификации ордера на покупку");   
      l_error_60 = GetLastError();
            if (l_error_60 == 0/* NO_ERROR */) break;
            Sleep(500);
            RefreshRates();
            l_count_56++;
            if (l_count_56 <= 5) continue;
            Alert(" SL , TP ордера на покупку не модифицированы по символу ", Symbol(), " Ошибка № ", GetLastError());
            break;
     }
    }    
   
    
    
     
   if(CountSell()==0 && ArrowSell!=2147483647 && CountSellClose()==0   )
   {
     ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red);
     if(ticket>0)
     while (true)
     {
      SL=NormalizeDouble(Bid+StopLoss*Point,Digits);
      TP=NormalizeDouble(Bid-TakeProfit*Point,Digits);
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      if(!OrderModify(ticket,OrderOpenPrice(),SL,TP,0,Red))
      Alert("Ошибка модификации ордера на продажу");
      l_error_60 = GetLastError();
            if (l_error_60 == 0/* NO_ERROR */) break;
            Sleep(500);
            RefreshRates();
            l_count_56++;
            if (l_count_56 <= 5) continue;
            Alert(" SL , TP ордера на продажу не модифицированы по символу ", Symbol(), " Ошибка № ", GetLastError());
            break;
     }
   } 
  
     
 }  
}
//+------------------------------------------------------------------+
void StopBuy()
 { 
   if (CountBuy()>=0 && ArrowSell!=2147483647 )
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
     if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black))
     Alert("Ошибка закрытия ордера на продажу");
    }
   }
  }
 }
//+------------------------------------------------------------------+ 
 void StopSell() 
 { 
   if (CountSell()>=0 && ArrowBuy!=2147483647 )
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
     if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
     if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black))
     Alert("Ошибка закрытия ордера на продажу");
    }
   }
  }
 }
//+------------------------------------------------------------------+ 
 int CountBuy()
 {
  int count=0;
  for(int trade=OrdersTotal()-1; trade>=0; trade--)
  {
    if(OrderSelect(trade,SELECT_BY_POS , MODE_TRADES ))
    {
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic && OrderType()==OP_BUY)
      count++;
    }
  }
  return(count);
 }
//+------------------------------------------------------------------+
 int CountSell()
 {
  int count=0;
  for(int trade=OrdersTotal()-1; trade>=0; trade--)
  {
    if(OrderSelect(trade,SELECT_BY_POS , MODE_TRADES ))
    {
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic && OrderType()==OP_SELL)
      count++;
    }
  }
  return(count);
 }
//+------------------------------------------------------------------+
  
 int CountBuyClose()
 {
  int count=0;
   for( int trade=OrdersHistoryTotal()-1; trade>=0;trade--)
   {
    if(OrderSelect(trade,SELECT_BY_POS , MODE_HISTORY ))
    {
     if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY )
     {count=1;
      break;
     }  
     else count=0;
     break;
    }
   }
  return(count);
 }
//+------------------------------------------------------------------+ 
   int CountSellClose()
 {
  int count=0;
   for( int trade=OrdersHistoryTotal()-1; trade>=0;trade--)
   {
    if(OrderSelect(trade,SELECT_BY_POS , MODE_HISTORY ))
    {
     if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL )
     {count=1;
      break;
     }  
     else count=0;
     break;
    }
   }
  return(count);
 }
//+------------------------------------------------------------------+ 