Подсчет ордеров!
1.Переменная q - у вас объявлена внутри функции
2.Советую использовать OrdersTotal
https://docs.mql4.com/ru/trading/OrdersTotal
1.Переменная q - у вас объявлена внутри функции
2.Советую использовать OrdersTotal
https://docs.mql4.com/ru/trading/OrdersTotal
Проблема как раз в том, что необходимо знать общее количество всех когда-либо открытых ордеров, а OrdersTotal( ) определяет общее количество открытых и отложенных ордеров в данный момент времени! Я прав?
Добрый день! Помогите разобраться как заставить советника считать все открытые за время работы советника ордера!
Используя нижеприведенный код у меня почему-то постоянно обнуляется счетчик?
Вопрос - что в коде не так, и почему q всегда равно 1?
Или может быть есть какой-то другой способ их считать?
Заранее спасибо всем откликнувшимся!
///////////////////////// ReccountOrders/////////////////////////////
int ReccountOrders()
{
int rc_SellStop=0, rc_SellLimit=0, rc_BuyStop=0, rc_BuyLimit=0, rc_Buy=0, rc_Sell=0;
if(OrdersTotal()>0)
{
int rc_Total=OrdersTotal();
for(int i=rc_Total-1; i>=0; i--)
{ rc_Total=OrdersTotal();
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
{
switch(OrderType()) //OrderType() == OP_BUY
{
case OP_SELLSTOP: rc_SellStop=rc_SellStop+1; break;
case OP_SELLLIMIT: rc_SellLimit=rc_SellLimit+1; break;
case OP_BUYSTOP: rc_BuyStop=rc_BuyStop+1; break;
case OP_BUYLIMIT: rc_BuyLimit=rc_BuyLimit+1; break;
case OP_BUY: rc_Buy=rc_Buy+1; break;
case OP_SELL: rc_Sell=rc_Sell+1; break;
}
}
}
}
}
/////////////////////// END ReccountOrders ///////////////////////////////////////////////
Добрый день! Помогите разобраться как заставить советника считать все открытые за время работы советника ордера!
Используя нижеприведенный код у меня почему-то постоянно обнуляется счетчик?
Вопрос - что в коде не так, и почему q всегда равно 1?
Или может быть есть какой-то другой способ их считать?
Заранее спасибо всем откликнувшимся!
Если я правильно понял Вашу проблему, то Вам достаточно использовать static при объявлении q
static int q=0;
Если быть точным, то Ваш код:
OrderSend("EURUSD!",OP_SELL,0.01,Bid,2,Ask+SLnew*Point,Ask-TPnew*Point); q=q+1;
будет подсчитывать количество попыток отправки торговых приказов на сервер.
Чтобы считать не попытки, а выставленные уже на сервере ордера, нужно анализировать ответ сервера:
int ticket=OrderSend("EURUSD!",OP_SELL,0.01,Bid,2,Ask+SLnew*Point,Ask-TPnew*Point); if (ticket > 0) q=q+1;
Если быть точным, то Ваш код:
будет подсчитывать количество попыток отправки торговых приказов на сервер.
Чтобы считать не попытки, а выставленные уже на сервере ордера, нужно анализировать ответ сервера:
Да, абсолютно верно! - вот это я как раз учел, просто не писал здесь, что бы не засорять общую картину! Все равно спасибо!)
Добрый день! Помогите разобраться как заставить советника считать все открытые за время работы советника ордера!
Используя нижеприведенный код у меня почему-то постоянно обнуляется счетчик?
Вопрос - что в коде не так, и почему q всегда равно 1?
Или может быть есть какой-то другой способ их считать?
Заранее спасибо всем откликнувшимся!