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;
Если быть точным, то Ваш код:
будет подсчитывать количество попыток отправки торговых приказов на сервер.
Чтобы считать не попытки, а выставленные уже на сервере ордера, нужно анализировать ответ сервера:
Да, абсолютно верно! - вот это я как раз учел, просто не писал здесь, что бы не засорять общую картину! Все равно спасибо!)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день! Помогите разобраться как заставить советника считать все открытые за время работы советника ордера!
Используя нижеприведенный код у меня почему-то постоянно обнуляется счетчик?
Вопрос - что в коде не так, и почему q всегда равно 1?
Или может быть есть какой-то другой способ их считать?
Заранее спасибо всем откликнувшимся!