Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зарегистрируйся на MQL5.community и оставляй комментарии!
6EDayTrader
51
6EDayTrader 2011.12.13 21:03 
Подскажите, как в советнике реализовать условие чтобы в день открывался один sell и один buy, не больше!

либо с возможностью задавать это количество во входных параметрах
o_O
Модератор
23324
o_O 2011.12.13 22:04  
1. проверить по истории что сегодня уже открывали (OrderSelect, MODE_HISTORY)

или
2. Хранить переменную в которую будете заносить последнее время OrderSend

6EDayTrader
51
6EDayTrader 2011.12.13 23:08  
а могли бы чуть подробнее объяснить, а то все равно не совсем понятно,

в первом варианте, если я правильно понял, используем функцию OrderCloseTime()

получили переменную datetime, и как с помощью нее сделать проверку ???

P.S. плиз хелп, оч нужно ))))
Сергей
256
Сергей 2011.12.14 12:58  
6EDayTrader:
а могли бы чуть подробнее объяснить, а то все равно не совсем понятно,

в первом варианте, если я правильно понял, используем функцию OrderCloseTime()

получили переменную datetime, и как с помощью нее сделать проверку ???

P.S. плиз хелп, оч нужно ))))

Почему OrderCloseTime()?

Условие ведь на открытие.

Дальше

string TimeToStr( datetime value, int mode=TIME_DATE)

два раза, на текущий момент и на время открытия последнего ордера нужного типа, и сравнить.



khorosh
8058
khorosh 2011.12.14 13:35  
6EDayTrader:
Подскажите, как в советнике реализовать условие чтобы в день открывался один sell и один buy, не больше!

либо с возможностью задавать это количество во входных параметрах


if(NumberOfBarOpenLastPos("0", 1440, OP_BUY, MagicNumber)>0)
  {
   //открываем бай
  }
if(NumberOfBarOpenLastPos("0", 1440, OP_SELL, MagicNumber)>0)
  {
   //открываем селл
  }
Функцию возьмите у Кима.
6EDayTrader
51
6EDayTrader 2011.12.15 20:04  
Спасибо друзья, не ожидал на такие быстрые отклики на мою просьюу )))) всем СПАСИБО!

оба варианта интересны и заслуживают внимания, но я успел и сам найти третий способ ))) прикрутил. все работает )))


int start()
  {
//----
  
    
    string CTime = TimeToStr(TimeCurrent(),TIME_MINUTES);
       
   if (CTime == IB_Start) 
    {
      Start_t = TimeCurrent();
      
    }    
   
   if (CTime == IBEnd)  
    {
      End_t = TimeCurrent(); 
            
    }
   
   // открытие и проверка SELL
  //=============================================================================================================== 
    static bool was_closed = false;        //флаг, показывающий был ли закрыт ордер на данном баре
   if(IsNewIB()==true)                   //начался новый бар - обнуляем флаг
      was_closed = false;
   if(was_closed == false)                //флаг говорит нам, что ордер не был закрыт 
   {
      for(int i=OrdersHistoryTotal()-1; i>=0; i--)
      {                                   //перебираем ордера в истории, начиная с самого свежего
         OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
         if(OrderCloseTime()>=End_t && OrderType()==OP_SELL)     //нашли ордер, который был закрыт на текущем баре
         {
            was_closed = true;            //ставим флаг в режим: ордер был закрыт на текущем баре
            break;                        //выходим из цикла
         }
      }
      if(was_closed == false)             //проверяем, что флаг не был изменён в цикле
      {
        Check_Sell();                    //проверяем условие на вход
       
        
                          
      }
                                          //иначе: ждём нового бара
   }
  
   // открытие и проверка BUY
  //=============================================================================================================== 
   
       static bool was_closed_buy = false;        //флаг, показывающий был ли закрыт ордер на данном баре
   if(IsNewIB_buy()==true)                   //начался новый бар - обнуляем флаг
      was_closed_buy = false;
   if(was_closed_buy == false)                //флаг говорит нам, что ордер не был закрыт 
   {
      for(int b=OrdersHistoryTotal()-1; b>=0; b--)
      {                                   //перебираем ордера в истории, начиная с самого свежего
         OrderSelect(b, SELECT_BY_POS, MODE_HISTORY);
         if(OrderCloseTime()>=End_t && OrderType()==OP_BUY)     //нашли ордер, который был закрыт на текущем баре
         {
            was_closed_buy = true;            //ставим флаг в режим: ордер был закрыт на текущем баре
            break;                        //выходим из цикла
         }
      }
      if(was_closed_buy == false)             //проверяем, что флаг не был изменён в цикле
      {
        
        Check_Buy();                         //проверяем условие на вход
        
                              
      }
                                          //иначе: ждём нового бара
   }
   
   
   
   
   
       //----
   return(0);
  }
    //+------------------------------------------------------------------+
   //==========================================================================//
  //             функция проверки для SELL                                    //
 //==========================================================================//
bool IsNewIB()
{
   static datetime BARflag = 0;
   datetime now = End_t ;
   if(BARflag < now)
   {
      BARflag = now;         
      return(1);
   }
   
   else
   {
      return(0);
   }
}

   //=========================================================================//
  //             функция проверки для BUY                                    //
 //=========================================================================//
bool IsNewIB_buy()
{
   static datetime BARflag_buy = 0;
   datetime now_buy = End_t ;
   if(BARflag_buy < now_buy)
   {
      BARflag_buy = now_buy;         
      return(1);
   }
   
   else
   {
      return(0);
   }
}
//============================================================================  
  
       
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий