Хочу написать интересный советник.

 
Хочу написать советник, который бы при достижении определенного количества открытых позиций (допустим десяти) запрещал бы открывать другие (то есть в данном случае одиннадцатый). Как это выразить в тексте программы. Писать программы умею, просто нужен соответствующий оператор или способ реализации такого плана. Спасибо заранее. Дмитрий.
 

Доброго времени суток!

Вы не конкретно ставите задачу. Есть несколько простых вариантов ее реализации, здесь необходимо более конкретно поставить вопрос.

1.Советник считает только свои ордера.

2.Советник считает ордера не только свои, но и пользовательские.

3.Советник считает все открытые позиции на всех инструментах или только на том графике, на котором сидит сам.

4.Советник считает только рыночные ордера или отложенные тоже.

Без конкретной постановки вопроса "А то мы хотим получить в результате" и детального ответа на него - программа не получится.

Если сформулируете необходимые условия работы программы - обращайтесь придумаем.

P.S.Чтоб у вас все было и вам за это ничего не было.

 

функция считает количество ордеров

 
int CalculateOrders(string simbol,int type) {   int count=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==simbol )//&& OrderMagicNumber()==mn)
        {
         if(OrderType()==type)  count++;
        
        }
     }
     
 return(count);
  }


на пример

if(CalculateOrders("EURUSD",OP_SELL)<11) OrderSend("EURUSD",OP_SELL,Lots,....)
 

Все гораздо проще...

Просто к условию открытия позиции добавить


if (.............. && OrdersTotal() < 10 )
 

А как сделать сброс счета .,?Тоже считаю OrdersTotal()<N, но увеличиваюN

 
Sta2066 писал(а) >>

А как сделать сброс счета .,?Тоже считаю OrdersTotal()<N, но увеличиваюN

extern bool sbros=false;
int OrdersTotal_=0;
int init()  {   if(sbros)OrdersTotal_=OrdersTotal();}
int start()
  { if(......N<OrdersTotal()+OrdersTotal_){....}
  }
 
vasya_vasya понял воспользуюсь
 
Спасибо, но я имел в виду следующее: на счёте трудятся несколько советников, каждый из которых открывает ордера (будем считать только рыночные). Так вот хочу написать советник, который бы запретил бы всем работающим советникам открывать позиции в том случае, если открытых и ещё не закрытых рыночных ордеров много (к примеру аж 10 штук). Когда что-то закроется следует снова позволить советникам открывать позиции. При этом ни при каких условиях нельзя запретить советникам модифицировать ордера, т. е. запретить вообще им торговать - нельзя. Другими словами, пусть будет 10 открытых позиций - нужно обеспечить запрет на открытие новых рыночных позиций, при этом не препятствовать МОДИФИКАЦИИ советниками выставленных ими рыночных ордеров. Выкладывайте любые варианты, хоть частично решающие данную проблему. Спасибо.
 
Dmitrii писал(а) >>
Выкладывайте любые варианты, хоть частично решающие данную проблему. Спасибо.

а что тут выкладывать? считай только рыночные (OP_BUY, OP_SELL) если надо. где открываешь позиции (OrderSend() видимо) вставляешь доп.условие - если больше ордеров, то не открываешься. выше уже есть коды примерные..

 
Dmitrii писал(а) >>
Спасибо, но я имел в виду следующее: на счёте трудятся несколько советников, каждый из которых открывает ордера (будем считать только рыночные). Так вот хочу написать советник, который бы запретил бы всем работающим советникам открывать позиции в том случае, если открытых и ещё не закрытых рыночных ордеров много (к примеру аж 10 штук). Когда что-то закроется следует снова позволить советникам открывать позиции. При этом ни при каких условиях нельзя запретить советникам модифицировать ордера, т. е. запретить вообще им торговать - нельзя. Другими словами, пусть будет 10 открытых позиций - нужно обеспечить запрет на открытие новых рыночных позиций, при этом не препятствовать МОДИФИКАЦИИ советниками выставленных ими рыночных ордеров. Выкладывайте любые варианты, хоть частично решающие данную проблему. Спасибо.

Чем вас не устраивают предложенные алгоритмы, кроме того что они считают не только рыночные ордера?

Если вы не знаете как организовать подсчет только рыночных ордеров, то почему не зададите конкретный вопрос?

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

все, что вам понадобится использовать

for( int j=OrdersTotal()-1;j>=0;j--){OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==...){}
}
а как? - кроме вас судя по всему никто не знает.
 
Да, согласен. Но исходников работающих советников у меня нету. Они просто торгуют, а я хочу другим советником вмешаться в их деятельность, то есть каким-либо образом запретить им открывать новые позиции. Я не имею возможности влезть в их код. А хочу для этого написать отдельный советник, который по сути должен управлять другими (разрешать/запрещать новые рыночные ордера). Вот и все. Дмитрий.