Нужна помощь, послезакрытия сделки не открывать новых через (внешний параметр) баров

 

Всем доброго дня суток. Ситуация такая: советник по условию открывает и закрывает сделки по сигналам. Сигнал бай, он закрывает сделки селл и открывает бай. Сигнал селл, закрывает сделку бай и открывает селл. Все работает, но

я хочу сделать, чтобы он после закрытия делал перерыв на какое-то кол-во баров с внешним параметром, затем также, если условия совпадают открывался по ним. 

 
Carcass77:

Всем доброго дня суток. Ситуация такая: советник по условию открывает и закрывает сделки по сигналам. Сигнал бай, он закрывает сделки селл и открывает бай. Сигнал селл, закрывает сделку бай и открывает селл. Все работает, но

я хочу сделать, чтобы он после закрытия делал перерыв на какое-то кол-во баров с внешним параметром, затем также, если условия совпадают открывался по ним. 

Ну так просто же - смотрите сколько прошло баров после закрытия последней позиции. Всё же логично.
 
Не подскажете как начать это делать, голову сломал. Спасибо
 
Carcass77:
Не подскажете как начать это делать, голову сломал. Спасибо

1) Запоминаете дату бара закрытия сделки в глобальную переменную (определенную вне функции).

2) На каждом тике перед открытием сделки копируете все бары с запомненной даты по текущую стем таймфреймом на котором запущен робот (PERIOD_CURRENT) .

3) Через ф-цию ArraySize - измеряете кол- во элементов в массиве и сравниваете с внешним параметром.

 
Carcass77:
Не подскажете как начать это делать, голову сломал. Спасибо

Не надо ломать голову!

Пробуйте.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0",int tf=0,int op=-1,int mn=-1)
  {
   datetime t=0;
   int      i,k=OrdersTotal(),b=0;

   if(sy=="" || sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==sy)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(t<OrderOpenTime()) t=OrderOpenTime();
                    }
                 }
              }
           }
        }
     }
   b=iBarShift(sy,tf,t,True);
   if(b==-1)b=0;
   return(b);
  }
//+------------------------------------------------------------------+
 

Добавка.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0",int tf=0,int op=-1,int mn=-1)
  {
   datetime t=0;
   int      i,k=OrdersHistoryTotal(),b=0;

   if(sy=="" || sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==sy)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(t<OrderCloseTime()) t=OrderCloseTime();
                    }
                 }
              }
           }
        }
     }
  return(iBarShift(sy, tf, t, True));
  }
 
Спасибо большое. Я находил функции Игоря Кима, но часто не знаю что дальше делать. Изучаю MQL около недели. Подскажите дальнейшие шаги, пожалуйста. 
 
Carcass77:

хочу сделать, чтобы после закрытия делал перерыв на какое-то кол-во баров с внешним параметром, затем также, если условия совпадают открывался по ним

extern int PauseBarCL = 0;  //Пауза баров после закрытия

void start() 
  {
if(условия для открытий BUY && (BarCL()>=PauseBarCL||BarCL()==-1)) OrderSend(Symbol(),OP_BUY,.............);

if(условия для открытий SELL && (BarCL()>=PauseBarCL||BarCL()==-1)) OrderSend(Symbol(),OP_SELL,.............);
//-----------------+
}//   Start END    |
//-----------------+
//+------------------------------------------------------------------+ 
//| Количество баров после закрытия любой позиции (=0 текущ.бар)     | 
//+------------------------------------------------------------------+ 
int BarCL(){
   datetime t=0;
   for(i=OrdersHistoryTotal()-1;i>=0;i--) 
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderType()<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {   
   if(t<OrderCloseTime())t=OrderCloseTime();}
return(iBarShift(Symbol(),0,t,true));}
Так понятно будет что куда ?
 
Спасибо большое, сделал, скомпилировалось. Но ничего в тестере не открылось, т.к советник ищет закрытые сделки в истории ИМХО. Надо что-то  прописать в OnInit? А, ну и чтоб он на следующем сигнале входил, а не посередине текущего сигнала после запуска советника
 
Carcass77:
Спасибо большое, сделал, скомпилировалось. Но ничего в тестере не открылось, т.к советник ищет закрытые сделки в истории ИМХО. Надо что-то  прописать в OnInit?

А, ну да, закрытых то нет ещё с первого запуска)) Щас там же поправлю.

Carcass77:
А, ну и чтоб он на следующем сигнале входил, а не посередине текущего сигнала после запуска советника

Ну это уже надо код смотреть и сигналы фильтровать.

 
FXwin:

А, ну да, закрытых то нет ещё с первого запуска)) Щас там же поправлю.

Ну это уже надо код смотреть и сигналы фильтровать.

Проверил, все равно открывает сразу после закрытия. 
Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Причина обращения: