Помогите с Советником

 

Здравствуйте! Может ли кто помоч с написанием советника, искал в интернете информацию, но не удолось найти интересующую меня.

Я пытаюсь написать советника, но не как не получается осуществить задуманое.

Мне вот нужно для моего советника зделать ограничение на количество открываемых позиций,  например чтобы он открыл 10 покупок и 10 подаж, это у меня получилось, но нужно чтобы он при закрытии например 5 покупок, он снова открыл 5 покупок И 5 ПРОДАЖ, таким образом уже получается 15 продаж и 10 покупок!!!   А МОЙ советник  при ограничении 10 позиций открывает только 5 покупок потому что  10 продаж уже есть! (((( 

Тоесть: Что бы он открывал столько позиция сколько закрылось по Tp или  SL не зависимо от вида позиции Sell или Buy.

ПРИМЕР: было открыто  5 позиций продажи и 7 покупки =>  2 покупки закрылось по Sl он должен открыть заного 2 покупки и 2 продажи.

 

 

Я не как немогу найти подходящую функцию, Напишите пожалуйсто кто знает или посмотрите на мой советник может там  косяк  какой... 

Файлы:
 
ух как там много всего, щас посмотрим есть ли то что нужно.  СПС!
 
Блин.. нашол ток Функцию CountOrders() ток чёт не получается((
 
Frostr:

Здравствуйте! Может ли кто помоч с написанием советника, искал в интернете информацию, но не удолось найти интересующую меня.

Я пытаюсь написать советника, но не как не получается осуществить задуманое.

Мне вот нужно для моего советника зделать ограничение на количество открываемых позиций,  например чтобы он открыл 10 покупок и 10 подаж, это у меня получилось, но нужно чтобы он при закрытии например 5 покупок, он снова открыл 5 покупок И 5 ПРОДАЖ, таким образом уже получается 15 продаж и 10 покупок!!!   А МОЙ советник  при ограничении 10 позиций открывает только 5 покупок потому что  10 продаж уже есть! (((( 

Я не как немогу найти подходящую функцию, Напишите пожалуйсто кто знает или посмотрите на мой советник может там  косяк  какой... 



/+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 start()
{
   int   i,count;

   if (BUY)
   {
      if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 

      count =  10 - NumberOfPositions(Symbol(),OP_BUY,Magic):  

      if(count>0)
      {
         for(int i=0;i<count;i++)
            OPENORDER ("Buy");

         if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
         if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; 
         for(int i=0;i<10;i++)
            OPENORDER ("Sell");
      }
   }
   if (SELL)
   { 
      if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; 

      count =  10 - NumberOfPositions(Symbol(),OP_SELL,Magic):  

      if(count>0)
      {
         for(int i=0;i<count;i++)
            OPENORDER ("Sell");

      if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 
         for(int i=0;i<10;i++)
            OPENORDER ("Buy");
      }

   }
   return(0);
}
 
khorosh:

без этой функции он через каждый тик открывает зделку пока депо хватает
 
dualbit:

Попробуйте так, если правильно понял Вашу мысль

 

я пробую пишит 'i' - variable already defined непойму где эт параметр может из за

void CountOrders(int& mo[], int mn=-1) {
int i, k=OrdersTotal();

if (ArraySize(mo)!=6) ArrayResize(mo, 6);
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (mn<0 || OrderMagicNumber()==mn) mo[OrderType()]++;
}
}

 

 
         for(int i=0;i<count;i++)
заменить на for(i=0;i<count;i++)
по привычке написал Int i
 

dualbit:

 

Теперь пишит

'if' - too complex expression   где    if(count>0) стоит

'=' - assignment expected      где     count = 10 - NumberOfPositions(Symbol(),OP_BUY,Magic):  стоит

 


 
да ссори надо действительно ; код не компилил