Как ограничить количество одновременно открытых ордеров советником?

 
Здравствуйте. Как мне в советнике ограничить количество одновременно открытых сделок до одной?
Файлы:
regression.mq4  11 kb
 

У KimIV-а есть функция ExistPosition

Найдете ее на этом форуме

 

int Orders=1;

if(total<Orders)


у меня так...

 

Сергей, это ты так пошутил?

Откуда у тебя total взялся?

По моему это и есть основной вопрос - не "как ограничить..." а как получить количество открытых ордеров. А уже как это количество с единицей сравнить - это и коню понятно. :)

 
int OrdersTotal( )

Возвращает общее количество открытых и отложенных ордеров.

Используется в 99% советников, достаточно взять любой и посмотреть...

 
ну всё просто, есть ордер, нехер мозги парить, возврат на исходную. Есть другой способ, предлагайте.
 

Вот, например, можно - 

//---- input parameters---------

extern string     ___  = "Параметры Длинных позиций";
extern int       MaxOpenPos_BUY = 3;//кол-во одновременно откр. поз
... ... ...
... ... ... 
... ... ...
if(NumberOfPositions(NULL,OP_BUY, Magic) < MaxOpenPos_BUY) {//если позиций
//  версии BUY менее заданного знач. 
 if (iBarShift(NULL,0,OpenTime1) != 0)    {//если на этом баре
// не было откр. поз
 //---------проверяем условие на покупку----------------------------
  if   (  условия открытия позиции  )           
//----------------------------------------------------------------         
   {//ПОКУПАЕМ  
  ticket=OrderSend(Symbol(),0,Lots,Ask,Slippage,Bid-sl*Point,Ask+tp*Point,
                                            "EXPERT",Magic,0,CLR_NONE);
  if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return (0); } 
   }
    OpenTime1 = iTime(NULL,0,0);
... ... ...
... ... ...
... .. ...   

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

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++)                                    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()==sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op)                   {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }}}}}
  return(kp);
} 
 
int OrdersTotal( )

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

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

Но для топик-стартера хватит и OrdersTotal()


Пока писал стало уже не актульно.

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