что необходимо написать чтобы позиции неоткрывались раньше времени?

 

Здраствуйте. Вот если я написал эксперт открывающий позицию бай если цена выше последнего верхнего фрактала, и селл сответственно.....подскажите что необходимо дописать чтобы при закрытии позиции следующую он открывал только после появления следующего соответствующего фрактала???

#property copyright "1"
#property link      ".com"

//+++++++++++++++++++++++++++++++++++++++++++

//---Параметры эксперта для бай сделок-------
 extern bool Test_Up=true;
 extern double Money_Management_Up=0.1;
 extern int STOPLOSS_Up=50;
 extern int TAKEPROFIT_Up=50;
 extern int TRAILINGSTOP_Up=0;
 extern bool ClosePos_Up=true;//парамнтр принудительного закрытия позиции 

 extern int TimeFrame_Up=5;//таймфрейм
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++
//----Параметры эксперта для селл сделок---------
 extern bool Test_Dn=true;
 extern double Money_Management_Dn=0.1;
 extern int STOPLOSS_Dn=50;
 extern int TAKEPROFIT_Dn=50;
 extern int TRAILINGSTOP_Dn=0;
 extern bool ClosePos_Dn=true;//парамнтр принудительного закрытия позиции 
 extern int TimeFrame_Dn=5;//таймфрейм 

//--------------------------------------------------------
int MinBar_Up,MinBar_Dn; 
 
 
 //+=====================================
 //TimeframeCheck() functions
 //+=====================================
 void TimeframeCheck(string Name,int Timeframe)
  {
   if (Timeframe != 1)
    if (Timeframe != 5)
     if (Timeframe != 15)
      if (Timeframe != 30)
       if (Timeframe != 60)
        if (Timeframe != 240)
         if (Timeframe != 1440)
           Print(StringConcatenate("Параметр ",Name,
                     " не может ", "быть равным ", Timeframe, "!!!"));    
  }
  
//=====================================
//Custom Expert functions
#include <Lite_EXPERT1.mqh>

//======================================================================================
int init()
 {
  //проверка таймфраймов на корректность 
  TimeframeCheck("TimeFrame_Up",TimeFrame_Up);
  TimeframeCheck("TimeFrame_Dn",TimeFrame_Dn);
  //инициализация мин кол-ва баров в истории
  MinBar_Up=500;
  MinBar_Dn=500;
  return(0);
 }
//======================================================================================
int deinit()
 {
  return(0);
 }
//=======================================================================================  
int start()
 {
  //обьявление локальных переменых    
 double Up,Dn;
  
  //обьявление статических переменных
  
  static bool BUY_Sing,BUY_Stop,SELL_Sing,SELL_Stop;
  
  
  

  //+++++++++++++++++++++++++++++++++++++++++++++
  //Код для длинных позиций======================
  //+++++++++++++++++++++++++++++++++++++++++++++  
  if(Test_Up)
   {
    int IBARS_Up=iBars(NULL,TimeFrame_Up);    
    if(IBARS_Up>=MinBar_Up)
     {
      
        BUY_Stop=false;
        BUY_Sing=false;
        
        //запоминаем последнее значения верхнего фрактала           
     
        
     if(Bid >= fractal("upper"))  BUY_Sing=true;
    
      
      }
     //----------------------
     //совершение сдлелок
     //----------------------
     if(!OpenBuyOrder1(BUY_Sing,1,Money_Management_Up,STOPLOSS_Up,TAKEPROFIT_Up))
                                             return(-1);
     if(ClosePos_Up)
     if(!CloseOrder1(BUY_Stop,1))
                 return(-1);
     if(!Make_TreilingStop(1,TRAILINGSTOP_Up))
                 return(-1);           
    
   }
                                                                
   //+++++++++++++++++++++++++++++++++++++++++
   //Код для коротких позиций-----------------
   //+++++++++++++++++++++++++++++++++++++++++
   
   if(Test_Dn)
    {
     int IBARS_Dn=iBars(NULL,TimeFrame_Dn);   
     if(IBARS_Dn>=MinBar_Dn)
      {
       
         SELL_Stop=false;
         SELL_Sing=false;
         
         //запоминаем последнее значения нижнего фрактала       
         
          
          if(Bid <= fractal("lower" ))  SELL_Sing=true; 
            
       }          
      //----------------------
      //совершение сдлелок
      //----------------------
      if(!OpenSellOrder1(SELL_Sing,1,Money_Management_Dn,STOPLOSS_Dn,TAKEPROFIT_Dn))
                                             return(-1);
      if(ClosePos_Dn)
       if(!CloseOrder1(SELL_Stop,1))
                 return(-1);       
    
   }  
    
    return(0);
  } 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
double fractal(string mode)
   {
   double fractal_u = 0.0, fractal_d = 0.0;
   int i_u = -1, i_d = -1;
   for ( int i = 0; i < Bars-1; i ++ )
      {
      if ( i_u == -1 && iFractals(Symbol(),0,MODE_UPPER, i ) > 0 ) 
         {
         i_u = i; fractal_u = iFractals(Symbol(),0, MODE_UPPER, i ); 
         }
      if ( i_d == -1 && iFractals(Symbol(),0, MODE_LOWER, i ) > 0 ) 
         { 
         i_d = i; fractal_d = iFractals(Symbol(),0, MODE_LOWER, i ); 
         }
      if ( i_u > -1 && i_d > -1 ) 
         {
         if(mode=="lower")
            {
            return(fractal_d);
            }
         if(mode=="upper")
            {
            return(fractal_u);
            }
         }
      }
   }
 
Можно запоминать время фрактала, и затем ордера из истории перебирать, и сравнивать время открытия ордера с временем фрактала, если меньше то ордера не было, если больше то ордер был.
 
satop >>:
Можно запоминать время фрактала, и затем ордера из истории перебирать, и сравнивать время открытия ордера с временем фрактала, если меньше то ордера не было, если больше то ордер был.

satop спасибо что откликнулись!!!... но я тут полазил по форуму  и состряпал метод попроще...может быть кому на будущее пригодиться: просто при открывании сделки переводим какую нибудь переменую в false, а при появлении в нового фрактала она возвращается в true, ну собственно и торговать можно только когда она true 

Причина обращения: