Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Nikita Zubarov
367
Nikita Zubarov  

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

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

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

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

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

 

 

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

Файлы:
Nikita Zubarov
367
Nikita Zubarov  
ух как там много всего, щас посмотрим есть ли то что нужно.  СПС!
Nikita Zubarov
367
Nikita Zubarov  
Блин.. нашол ток Функцию CountOrders() ток чёт не получается((
khorosh
10086
khorosh  
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);
Константин
66
Константин  

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

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);
}
Nikita Zubarov
367
Nikita Zubarov  
khorosh:

без этой функции он через каждый тик открывает зделку пока депо хватает
Nikita Zubarov
367
Nikita Zubarov  
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()]++;
}
}

 

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

dualbit:

 

Теперь пишит

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

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

 


Константин
66
Константин  
да ссори надо действительно ; код не компилил 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий