Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 120

 
hoz:


Это уже признак сонности видимо у меня.

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

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

Вот получилась функция такая:

Вызываю со старта, где изначально значения счётчиков тоже обнуляю:

Ну, как бы t++ срабатывает в любом случае
 
Forexman77:

Переделал Ваш советник немного, комментарии в коде. Обратите внимание на формирование signal и stop. Я поставил их особенно не задумываясь. Измените по своему вкусу если необходимо.

Файлы:
 
artmedia70:
Ну, как бы t++ срабатывает в любом случае


Единственный вариант так?

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)
      {
          p++;
          t++;
      }
      else if (OrderType() < 2)
          t++;
      else 
      {
         Print("Позиций в рвнке нет!");
      }
      
      pr ("FindOrders(): " + "t = " + t);
      pr ("FindOrders(): " + "p = " + p);
   }
}

Выглядит он как-то не особо. Не оптимизирован. Повторение t++ не радует...

 
hoz:


Единственный вариант так?

Выглядит он как-то не особо. Не оптимизирован. Повторение t++ не радует...

А зачем при любом раскладе увеличивать t ? Да и вообще, что тут:

if (OrderType() > 1 && OrderType() < 6)
      {
          p++;
          t++;
      }
      else t++;

Если тип ордера больше 1 и меньше 6, увеличим p, увеличим t

Иначе (даже, если тип ордера==6) опять увеличим t

Странно, да?

 
artmedia70:

А зачем при любом раскладе увеличивать t ? Да и вообще, что тут:

Если тип ордера больше 1 и меньше 6, увеличим p, увеличим t

Иначе (даже, если тип ордера==6) опять увеличим t

Странно, да?




Я пока что Ваш комментарий писался, уже переправил своё. Выше исправленный вариант.
 
hoz:

Я пока что Ваш комментарий писался, уже переправил своё. Выше исправленный вариант.
А зачем увеличивать t, если ордер отложенный, а потом опять увеличивать t, если следующий ордер рыночный?
 
Создайте массив из шести элементов. Передавайте его в функцию по ссылке. Как только ордер выбран и он подходит по всем фильтрам (символ, магик) увеличивайте ячейку массива, адресуемую типом ордера. После работы функции у вас в массиве будет содержаться количество ордеров, отсортированное по их типам.
 
artmedia70:
А зачем увеличивать t, если ордер отложенный, а потом опять увеличивать t, если следующий ордер рыночный?


t - это кол-во всех ордеров.

p - кол-во отложек

Если условие:

if (OrderType() > 1 && OrderType() < 6)

истинно, то увеличивается и t и p т.к. любой ордер типа от 2 до 5 это как отложка так и вообще ордер. А значит нада увеличить оба счётчика. А если истинно условие:

else if (OrderType() < 2)

Тогда отложки уже нет, но есть ордер рыночный. Значит увеличим тока счётчик t т.е. счётчик общего кол-ва ордеров.

Ну а если ничего нет, значит принтуем, что ордеров нет...

 
artmedia70:
Создайте массив из шести элементов. Передавайте его в функцию по ссылке. Как только ордер выбран и он подходит по всем фильтрам (символ, магик) увеличивайте ячейку массива, адресуемую типом ордера. После работы функции у вас в массиве будет содержаться количество ордеров, отсортированное по их типам.

То что тут массив будет предпочтительнее я уже понял)) А в том варианте, что я выше описал есть неточность?(Сугубо ради интереса. Вроде уже всё чётко же)
 
hoz:

То что тут массив будет предпочтительнее я уже понял)) А в том варианте, что я выше описал есть неточность?(Сугубо ради интереса. Вроде уже всё чётко же)

Может так

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
      {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)   p++;
      if (OrderType() < 6)  t++;
       }
  pr ("FindOrders(): " + "t = " + t);
  pr ("FindOrders(): " + "p = " + p);
}