Подскажите пожалуйста, как в MQL4 можно добиться от OrdersTotal(), чтобы она возвращала количество всех ордеров, а не тока тех, которые открыты?

 
В MQL II это было как бы само собой. А здеся приходится изголяться...

//-------------

int total, cnt = 0;
bool b = true;

while(b=true)
{
b = OrderSelect(cnt, ... );
cnt++;
}
total = cnt - 2;
// цикл заканчивается, када компилятор не находит очередного ордера, и переменной total присваивается
// последнее значение cnt при котором ордер-таки был.
//-------------

Может имеется какой-то неизвестный мне параметр OrdersTotal(), о котором я просто не знаю?
 
В MQL II это было как бы само собой. А здеся приходится изголяться...

//-------------

int total, cnt = 0;
bool b = true;

while(b=true)
{
b = OrderSelect(cnt, ... );
cnt++;
}
total = cnt - 2;
// цикл заканчивается, када компилятор не находит очередного ордера, и переменной total присваивается
// последнее значение cnt при котором ордер-таки был.
//-------------

Может имеется какой-то неизвестный мне параметр OrdersTotal(), о котором я просто не знаю?

Неизвестных Вам параметров функции OrdersTotal() нет.
Для подсчета количества всех ордеров нужно использовать также
функцию HistoryTotal( ) .

int HistoryTotal( )
Возвращает количество закрытых позиций и удаленных ордеров в истории текущего счета, загруженной в клиентском терминале. Размер списка истории зависит от текущих настроек вкладки "История счета" терминала.

int OrdersTotal( )
Возвращает общее количество открытых и отложенных ордеров.
 
В MQL II это было как бы само собой. А здеся приходится изголяться...

//-------------

int total, cnt = 0;
bool b = true;

while(b=true)
{
b = OrderSelect(cnt, ... );
cnt++;
}
total = cnt - 2;
// цикл заканчивается, када компилятор не находит очередного ордера, и переменной total присваивается
// последнее значение cnt при котором ордер-таки был.
//-------------

Может имеется какой-то неизвестный мне параметр OrdersTotal(), о котором я просто не знаю?

Неизвестных Вам параметров функции OrdersTotal() нет.
Для подсчета количества всех ордеров нужно использовать также
функцию HistoryTotal( ) .

int HistoryTotal( )
Возвращает количество закрытых позиций и удаленных ордеров в истории текущего счета, загруженной в клиентском терминале. Размер списка истории зависит от текущих настроек вкладки "История счета" терминала.

int OrdersTotal( )
Возвращает общее количество открытых и отложенных ордеров.


Правда?! Это оч-чень странно. Пойду проверять.
 
Здравствуйте! А как найти общее количество только открытых ордеров не отложенных?
 
barudkinarseniy:
Здравствуйте! А как найти общее количество только открытых ордеров не отложенных?
Перебором в цикле с фильтром по типу ордеров.
 

Здравствуйте!

Хочу чтобы советник открывал один ордер на каждой валюте куда он помещён.

Весь мозг сломал , уже недели 2 наверное((.

Сейчас прописано вот это:

total=OrdersTotal();

  if(total<1)

// разрешает открытие  одного ордера , другой конечно же не откроет пока не произойдёт закрытие //

Может есть функция типа //на данной валютной паре открыто n-ордеров//

 
// количество ордеров на текущем символе
int nCurrentSymbolOrders = 0;

// перебираем все открытые и выставленые ордера и ищем среди них ордер, выставленный (открытый) на текущем инструменте
// если таковой найдётся - увеличиваем счётчик ордеров текущего символа
// при необходимости можно добавить проверку на мэджик, тип и т.д.
for(int i = 0; i < OrdersTotal(); i++)
{
    if(OrderSelect(i, SELECT_BY_POS) == true)
    {
        if(OrderSymbol() == Symbol())
            nCurrentSymbolOrders++;
    }
}

// если на текущем инструменте ещё нет ордеров - открываем
if(nCurrentSymbolOrders == 0)
    // открываем ордер
 
Sergei Vladimirov:

Спосибо!!! вроде сошлошь.

Но до понедельника ждать буду))).

Или можно сразу это проверить?

 
Sergei Vladimirov:

Главное коротко.

На других форумах такой код написали(блин не разобрался я)

Причина обращения: