mql4. Помогите написать условие

 

Помогите написать правильно условие. Нужно чтобы сделки открывались за каналом, а не внутри и по пересечению ма.


//+------------------------------------------------------------------+
//|                                                        22222.mq4 |
//|                                                         Mr. Gold |
//|                                         anna.furmanova@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Mr. Gold"
#property link      "anna.furmanova@yandex.ru"
#property version   "1.00"
#property strict

#define magic 888

extern string Indic1             = " Параметры ExtremeTMALine ";
extern string TimeFrame          = "Current";
extern int TMAPeriod             = 56;
extern int Price_TMA             = PRICE_CLOSE;
extern double ATRMultiplier      = 2.0;
extern int ATRPeriod             = 100;
extern double TrendThreshold     = 0.5;
extern bool ShowCenterLine       = false;

extern string Indic2             = " Параметры HMA ";
extern int period                = 15; 
extern int method                = 3;                         
extern int price_MA              = 0; 

extern string Parametr           = " Параметры советника ";
extern double Lot                = 0.01;
extern int Magic                 = 888;
extern bool Clock                = true;
extern int TestingMode           = 1;

static int PreBars=0;
static int DT=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string CurDay()
  {
   string CurDay;
   switch(DayOfWeek())
     {
      case 0: CurDay = "Вс";break;
      case 1: CurDay = "Пн";break;
      case 2: CurDay = "Вт";break;
      case 3: CurDay = "Ср";break;
      case 4: CurDay = "Чт";break;
      case 5: CurDay = "Пт";break;
      case 6: CurDay = "Сб";break;
     }
   return(CurDay);
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   RefreshRates();
    // определяем наличие достаточных средств на депозите
        if(AccountFreeMargin()<(1000*Lot)) 
                {
                Print("Денег нет. Свободная Маржа = ", AccountFreeMargin());
                Alert("Денег нет. Свободная Маржа = ", AccountFreeMargin());
                }
                
   int i,tiket;

   if(TestingMode>0)
     {
      if(TestingMode==1)
        {
         if(Bars == PreBars) return(0);
         else PreBars=Bars;
           } else {
         if(Bars!=PreBars)
           {
            DT=0;
            PreBars=Bars;
           }
         if(TimeCurrent() < Time[0]+DT) return(0);
         else DT=DT+Period()*60/TestingMode;
        }
     }
   if(Clock) ObjectSetText("Clock",TimeToStr(TimeCurrent(),TIME_MINUTES)+", "+CurDay(),20,"Tahoma",Maroon);
// можно менять на ходу 
   if(GlobalVariableCheck("g_TestingMode")==true)
      TestingMode=GlobalVariableGet("g_TestingMode");

   // ИНДИКАТОРЫ
   
   double Val_1=iCustom(Symbol(),0,"ExtremeTMALine",TimeFrame,TMAPeriod,Price_TMA,ATRMultiplier,ATRPeriod,TrendThreshold,ShowCenterLine,1,0);
   double Val_2=iCustom(Symbol(),0,"ExtremeTMALine",TimeFrame,TMAPeriod,Price_TMA,ATRMultiplier,ATRPeriod,TrendThreshold,ShowCenterLine,2,0);
   
   double MA_0=iCustom(Symbol(),0,"HMA",period,method,price_MA,0,0);
   double MA_1=iCustom(Symbol(),0,"HMA",period,method,price_MA,1,0);
   
//BUY===================================== 
   
   bool Open_BUY=(Val_2>Ask && MA_0>=MA_1);
   bool Close_BUY=(Val_1<Bid && MA_1<=MA_0);
   bool Open_SELL=(Val_1<Bid && MA_1<=MA_0);
   bool Close_SELL=(Val_2>Ask && MA_0>=MA_1);
   bool CheckCanal=(Val_1>=Bid) && (Bid>=Val_2);  // Истина - если цена внутри канала

   if (CheckCanal==false)
   {
    if(Open_BUY && !Close_BUY)
     {
      tiket=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),3,0,0,"",Magic,0,clrNONE);
      if(tiket<0) { Print("Ошибка при выборе ордера BUY #",GetLastError());}
      PlaySound("alert.wav");
     }}
     
   if(Close_BUY)
     {
      for(i=OrdersTotal()-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderSymbol()==Symbol())
              {
               if(OrderType()==OP_BUY)
                 {
                  tiket=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,Violet);
                  PlaySound("ok.wav");
                 }
              }
           }
        }
     }
//SELL================================
   
   if(Open_SELL && !Close_SELL)
     {
      tiket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),3,0,0,"",Magic,0,clrNONE);
      if(tiket<0) { Print("Ошибка при выборе ордера SELL #",GetLastError());}
      PlaySound("alert.wav");
     }

   if(Close_SELL)
     {
      for(i=OrdersTotal()-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderSymbol()==Symbol())
              {
               if(OrderType()==OP_SELL)
                 {
                  tiket=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,Violet);
                  PlaySound("ok.wav");
                 }
              }
           }
        }
     }
    
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Возвращает количество позиций.                                            |
//|  Параметры:                                                                |
//|    sym - наименование инструмента  ("" - текущий символ)                   |
//|    op  - операция                  (-1 - любая позиция)                    |
//|    mn  - MagicNumber               (-1 - любой магик)                      |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sym="",int op=-1,int mn=-1) 
  {
   int i,k=OrdersTotal(),kp=0;

   if(sym=="") sym=Symbol();
   for(i=0; i<k; i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if(OrderSymbol()==sym) 
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
              {
               if(op<0 || OrderType()==op) 
                 {
                  if(mn<0 || OrderMagicNumber()==mn) kp++;
                 }
              }
           }
        }
     }
   return(kp);
  }
//+------------------------------------------------------------------+
 
Бесплатно вряд ли кто-то будет. А долларов за 10 может и я возьмусь через Фриланс. 
Причина обращения: