Сколько закрыто ордеров сегодня

 

Приветствую, профи!

Подскажите новичку, пытаюсь вывести в советнике информацию на график, сколько было закрыто ордеров сегодня.

Нашёл функцию от KimIV

+DoubleToStr(ExistInHistoryToDay(),0)

bool ExistInHistoryToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (op<0 || OrderType()==op) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (TimeDay  (OrderOpenTime())==Day()
            &&  TimeMonth(OrderOpenTime())==Month()
            &&  TimeYear (OrderOpenTime())==Year()) return(true);
          }
        }
      }
    }
  }
  return(false);
}

К примеру:

Если в истории выставить фильтр Сегодня, то показывает - 10, а функция показывает почему-то - 1

Что может быть не так?

 
psihodelit:

Приветствую, профи!

Подскажите новичку, пытаюсь вывести в советнике информацию на график, сколько было закрыто ордеров сегодня.

Нашёл функцию от KimIV

К примеру:

Если в истории выставить фильтр Сегодня, то показывает - 10, а функция показывает почему-то - 1

Что может быть не так?

ExistInHistoryToDay()メソッドはboolが返されるので、trueの場合は1が表示されているのではなでしょうか?

         if (op< 0 || OrderType ()==op) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (TimeDay (OrderOpenTime())==Day()
            && TimeMonth(OrderOpenTime())==Month()
            && Timeyear (OrderOpenTime())== Year()) return ( true );
          }

条件に一致すればtrueが返却されています。

件数が必要であれば、この条件でカウント取って、forループを抜けた後にカウントを返却するようにするロジックになると思います。



 
Yutaka Okamoto #:

ExistInHistoryToDay()メソッドはboolが返されるので、trueの場合は1が表示されているのではなでしょうか?

条件に一致すればtrueが返却されています。

件数が必要であれば、この条件でカウント取って、forループを抜けた後にカウントを返却するようにするロジックになると思います。

Да, функция выдает - 1, а не - 10 как в истории "Сегодня".

Немного не понял что на что поменять.

 
psihodelit:

Приветствую, профи!

Подскажите новичку, пытаюсь вывести в советнике информацию на график, сколько было закрыто ордеров сегодня.

Нашёл функцию от KimIV

К примеру:

Если в истории выставить фильтр Сегодня, то показывает - 10, а функция показывает почему-то - 1

Что может быть не так?

Функция считает, сколько ордеров было ОТКРЫТО сегодня. То есть это те ордера, которые были открыты и закрыты в течение сегодняшнего дня. А в терминале считается именно закрытие, неважно, когда ордер был открыт.

 
Ihor Herasko #:

Функция считает, сколько ордеров было ОТКРЫТО сегодня. То есть это те ордера, которые были открыты и закрыты в течение сегодняшнего дня. А в терминале считается именно закрытие, неважно, когда ордер был открытЯ

Я пробовал заменить 

OrderOpenTime()

на

OrderCloseTime()

Ничего не меняется...

Функция показывает счётчик 1, а терминал 10.

Я открывал именно одним днём без переноса на следующие сутки.
 
psihodelit #:

Я пробовал заменить 

на

Ничего не меняется...

Функция показывает счётчик 1, а терминал 10.

Я открывал именно одним днём без переноса на следующие сутки.

М-да, а слона то я и не заметил))

Функция возвращает результат bool. Это не число (при преобразовании в число true равно 1, false - 0). Функция указывает на то, что найден ордер, который был закрыт сегодня. То есть как только обнаружен закрытый сегодня ордер, функция прекращает свое выполнение. О количестве речь не идет. 

 
Ihor Herasko #:

М-да, а слона то я и не заметил))

Функция возвращает результат bool. Это не число (при преобразовании в число true равно 1, false - 0). Функция указывает на то, что найден ордер, который был закрыт сегодня. То есть как только обнаружен закрытый сегодня ордер, функция прекращает свое выполнение. О количестве речь не идет. 

Понял, а как сделать чтобы количество определяло?

 

Переделал функцию, все работает теперь.

Спасибо за подсказку про количество.