Функция OrdersTotal( )

 
Функция OrdersTotal( ) при получении общего количества открытых и отложенных ордеров в индикаторе возвращает 4, хотя нет ни одного открытого ордера. Эту функцию можно использовать только при написании советника? Есть ли альтернативный вариант получения открытых ордеров именно в индикаторе? Спасибо.
 

Можно подсчитать количество открытых ордеров функцией:

//+--------------------------------------------------------------------+
int OrdersAll(int mag){ int kolvo;
for (int i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if((OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber() == mag )
kolvo++;}} return(kolvo);}
//+--------------------------------------------------------------------+

Пример:

if (OrdersAll(12546)==8) ...

 
total писал (а) >>
Функция OrdersTotal( ) при получении общего количества открытых и отложенных ордеров в индикаторе возвращает 4, хотя нет ни одного открытого ордера. Эту функцию можно использовать только при написании советника? Есть ли альтернативный вариант получения открытых ордеров именно в индикаторе? Спасибо.

Альтернативных вариантов нет. Функция OrdersTotal возвращает общее количество открытых и отложенных ордеров. Если это не так, представляйте доказательства.

 
stringo писал (а) >>

Альтернативных вариантов нет. Функция OrdersTotal возвращает общее количество открытых и отложенных ордеров. Если это не так, представляйте доказательства.

Каким образом предоставить доказательства? Пока только скриншот, запускаю тестер, кидаю индикатор на график и сразу четыре ордера. (См. Коммент)

Код прост

int total=OrdersTotal();

Comment ("total = " + total);

Файлы:
screen.rar  135 kb
 
void start() {
  if (OrdersTotal()<1) {
    OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0);
    OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0);
    OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0);
    OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0);
  }
  int total=OrdersTotal();
  Comment("total = "+total);
}
 
void start() {
  int total=OrdersTotal();
  Comment("total = "+total);
}
 

Тем не менее, очень бы хотелось иметь штатную функцию возвращающую

количество открытых позиций, например типа OrdersOpenTotal();

 

Тоже самое делаю и я!!!

только

int start() {
  int total=OrdersTotal();
  Comment("total = "+total);
}

Хотя тут принципиальной разницы нет, у меня в любом случае total = 4. Индикатор позы не открывает.

На демо открыты четыре позы, но каким образом это связано с тестером. Билд 217.

 
total писал (а) >>

Каким образом предоставить доказательства? Пока только скриншот, запускаю тестер, кидаю индикатор на график и сразу четыре ордера. (См. Коммент)

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


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

 
Я не забываю, просто такой необходимости не было - проверять открытые ордера через индикатор. Век живи - век учись. Всем спасибо за помощь.
Причина обращения: