OrdersTotal() выдает количество всех ордеров и позиций, вместо только ордеров

 

Такое ощущение, что OrdersTotal() возвращает количество не только отложенных ордеров, но ордеров и позиций. При этом при переборе методом OrderGetTicket() перебираются только отложенные ордера (без позиций). Также тикет отложенного ордера нулевой (хотя в терминале он есть)

Посмотрите ниже приведенный код и результат. Может я чтото не так делаю? У вас повторяется такой результат?

В конце скрин с открытыми и отложенными позициями. Судя по выводу, похоже, что OrderGetTicket() сначала (за первых два шага) возвращает реальные отложенные ордера, а после их завершения всегда возвращает последний из ордеров (по символу  USDRUB.c)

   // открытые
   int count_pos = PositionsTotal();
   Print("count_pos ", count_pos);
   
   // выставленные
   
   int count_ord = OrdersTotal();
   Print("count_ord ", count_ord);
   for(int j=0; j < count_ord; j++)
   {
      int ticket =  OrderGetTicket(j);
      Print("ticket ", ticket);
      Print(OrderGetString(ORDER_SYMBOL));
      Print(OrderGetDouble(ORDER_VOLUME_CURRENT));
      
   }

Код выше выдает:

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  count_pos 10

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  count_ord 12

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  PFE

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  4.0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.040 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.041 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.041 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.041 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.041 AutotradeSignals (USDRUB.c,H1)  0.02

2020.12.14 14:41:59.041 AutotradeSignals (USDRUB.c,H1)  ticket 0

2020.12.14 14:41:59.041 AutotradeSignals (USDRUB.c,H1)  USDRUB.c

2020.12.14 14:41:59.041 AutotradeSignals (USDRUB.c,H1)  0.02


Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Свойства ордеров - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Какие mqh-файлы подключены?
 
Скопируйте выложенный код в новый файл и попробуйте скомпилировать. Думаю, вопросы отпадут.
 
Rashid Umarov:
Скопируйте выложенный код в новый файл и попробуйте скомпилировать. Думаю, вопросы отпадут.

Скопировал.

(нашел синтаксическую ошибку при сокращении кода для поста, но она дело не решает)

Вопросы не отпали..., а стало еще больше.

В отдельном пустом эксперте код действительно работает правильно.

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


На скринах привожу код, как он у меня есть в редакторе:

код слева выдает:

2020.12.14 15:33:02.554 test (SPLK,M5) count_pos 10

2020.12.14 15:33:02.554 test (SPLK,M5) count_ord 2

...

код справа выдает:

2020.12.14 15:33:44.120 AutotradeSignals (USDRUB.c,H1) count_pos 10

2020.12.14 15:33:44.120 AutotradeSignals (USDRUB.c,H1) count_ord 12

...




 
fxsaber:
Какие mqh-файлы подключены?

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

Каким образом и что может влиять на результат метода OrdersTotal()? Скажите куда копать и что проверить, если думаете, что подключенные mqh могут повлиять на результат?

 
Viktor Lubimov:

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

Каким образом и что может влиять на результат метода OrdersTotal()? Скажите куда копать и что проверить, если думаете, что подключенные mqh могут повлиять на результат?

Наведите текстовый курсор на середину слова OrdersTotal и нажмите ALT+G.

Перед OrdersTotal добавьте ::

::OrdersTotal()
 
fxsaber:

Наведите текстовый курсор на середину слова OrdersTotal и нажмите ALT+G.

Перед OrdersTotal добавьте ::

Понял вашу мысль, хорошая идея - но не помогло.

- переход к определению не происходит (как и ALT+G при наведенном курсоре)

- :: не изменило поведение кода


 
Viktor Lubimov:

Понял вашу мысль, хорошая идея - но не помогло.

- переход к определению не происходит (как и ALT+G при наведенном курсоре)

- :: не изменило поведение кода

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


Добавить точку останова (F9) на строке.

int count_ord = OrdersTotal();
Запустить дебаг (F5). Как попадете на эту точку, нажать F11.
 
fxsaber:

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


Добавить точку останова (F9) на строке.

Запустить дебаг (F5). Как попадете на эту точку, нажать F11.

Спасибо, ошибка найдена

Дело было в подключенной в недрах кода библиотеке  <MT4Orders.mqh>

 
Viktor Lubimov:

Спасибо, ошибка найдена

Дело было в подключенной в недрах кода библиотеке  <MT4Orders.mqh>

Вызывайте OrdersTotal так.

OrdersTotal(0);

Это будет вызывать MT5-вариант.

Viktor Lubimov:

Никакие файлы не подключены

Лог компиляции всегда содержит список всех файлов-исходников.



ЗЫ Поиск (F3) в исходнике #include может помочь...

 

- :: не изменило поведение кода


Интересно почему не изменило.