Посчитать ордера одного инструмента

 

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

for(int Zf=1; Zf<=OrdersTotal(); Zf++) // Цикл перебора ордер
{
if (OrderSelect(Zf-1,SELECT_BY_POS)==true) // Если есть следующий
if(OrderSymbol()!=Symb||OrderMagicNumber()!=magic)continue;// Не наш ордер
}

if (BuyOp && Zf<z )

{
OrderSend (Symbol(),OP_BUY,Lots,Ask,3,SLb,TPb,"OpSS",magic,0,Blue);
LastOrderOpenTime=TimeCurrent();
}
 

Или так будет правильно?


for(int Zf=1; Zf<=OrdersTotal(); Zf++) // Цикл перебора ордер

{
if (OrderSelect(Zf-1,SELECT_BY_POS)==true) // Если есть следующий
if(OrderSymbol()!=Symb||OrderMagicNumber()!=magic )continue;// Не наш ордер
Order[Zf]=Order[Zf+1];}

if (BuyOp && Order[Zf]<z)
 

Что-то программистов на форуме видимо нет..... :о) Или решают глобальные проблемы :о( Блин подсказали бы и я успокоился. Сразу говорю в учебнике MQL-4 нет такого прикола. А функция должна быть простой. Вот еще один вариант, методом научного втыка....

for(int Zf=1; Zf<=OrdersTotal(); Zf++) // Цикл перебора ордер

{
if (OrderSelect(Zf-1,SELECT_BY_POS)==true) // Если есть следующий
if(OrderMagicNumber()!=magic )continue;// Не наш ордер
Order[Z]=Z+1;}

if (BuyOp && Order[Z]<z)
 

"Не суетитесь"(с).

Я сегодня уже третий раз отвечаю на подобный вопрос, словно "дежурный по ордерам"....

https://www.mql5.com/ru/forum/125859 

https://www.mql5.com/ru/forum/111497/page544 

 
rid >>:

"Не суетитесь"(с).

Я сегодня уже третий раз отвечаю на подобный вопрос, словно "дежурный по ордерам"....

https://www.mql5.com/ru/forum/125859

https://www.mql5.com/ru/forum/111497/page544

Может уже просто терпения не хватает, но это все не то. мне надо посчитать просто общее количество ордеров по инструменту и открыть новый ордер если по инструменту открыто, допустим 8 ордеров, а разрешено 9, и мне все равно какие открыты ордера Селл или Бай на этом инструменте, только количество меня интересует. В тестере все в порядке, там нет сделок по другим парам. а когда запускаешь на демке, то советник начинает учитывать все открытые ордера другими советниками, что не дает возможности проверить его работу в паре с другими экспертами.

 

Я не понял, что вас не устраивает в предложенной функции.

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

if (NumberOfPositions(NULL, -1, Magic Number) <9) { // если позиций, открытых советником меньше 9-ти

Кроме того, вам нужно предусмотреть во внешних параметрах  extern int Magic Number =777 для ордеров вашего советника, в функции Ордерсенд. Именно по этому параметру советник отличает свои позиции от всех других.

 

Я так понимаю, что код мы должны вставить перед функцией старт

//+----------------------------------------------------------------------------+

//| Возвращает количество позиций. |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+

int NumberOfPositions(string sym="", int op=-1, int mn=-1)
{
int w, g=OrdersTotal(), kp=0;

if (sym=="") sym=Symbol();
for (w=0; w<g; w++)
{
if (OrderSelect(w, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==sym)
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (op<0 || OrderType()==op)
{
if (mn<0 || OrderMagicNumber()==mn) kp++;
}
}
}
}
}
return(kp);
}

//+----------------------------------------------------------------------------+

Затем в проверке перед открытием очередного ордера NumberOfPositions(NULL, -1, magic) <z

Не считает советник ордера, шурует их бесконечно много, насколько депо и времени хватает.

if (SellOp && (NumberOfPositions(NULL, -1, magic) <z)
&& TimeCurrent()-LastOrderOpenTime > Xсек_откр)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SLs,TPs,"OpSS",magic,0,Red);
LastOrderOpenTime=TimeCurrent();
}
 
Роман! Благодарю за помощь. Вроде заработало!!!
Причина обращения: