Скопируйте выложенный код в новый файл и попробуйте скомпилировать. Думаю, вопросы отпадут.
Скопировал.
(нашел синтаксическую ошибку при сокращении кода для поста, но она дело не решает)
Вопросы не отпали..., а стало еще больше.
В отдельном пустом эксперте код действительно работает правильно.
Но среди другого кода - нет. При том, что скопипастил в точности тот же код и даже выделил его в отдельный блок.
На скринах привожу код, как он у меня есть в редакторе:
код слева выдает:
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
...
Какие mqh-файлы подключены?
Никакие файлы не подключены, но этот код находится в большом эксперте с множеством классов и структур. Сам код в одном из методов класса.
Каким образом и что может влиять на результат метода OrdersTotal()? Скажите куда копать и что проверить, если думаете, что подключенные mqh могут повлиять на результат?
Никакие файлы не подключены, но этот код находится в большом эксперте с множеством классов и структур. Сам код в одном из методов класса.
Каким образом и что может влиять на результат метода OrdersTotal()? Скажите куда копать и что проверить, если думаете, что подключенные mqh могут повлиять на результат?
Наведите текстовый курсор на середину слова OrdersTotal и нажмите ALT+G.
Перед OrdersTotal добавьте ::
::OrdersTotal()
Наведите текстовый курсор на середину слова OrdersTotal и нажмите ALT+G.
Перед OrdersTotal добавьте ::
Понял вашу мысль, хорошая идея - но не помогло.
- переход к определению не происходит (как и ALT+G при наведенном курсоре)
- :: не изменило поведение кода
Понял вашу мысль, хорошая идея - но не помогло.
- переход к определению не происходит (как и ALT+G при наведенном курсоре)
- :: не изменило поведение кода
К сожалению, без исходника не получится разобраться со стороны.
Добавить точку останова (F9) на строке.
int count_ord = OrdersTotal();Запустить дебаг (F5). Как попадете на эту точку, нажать F11.
К сожалению, без исходника не получится разобраться со стороны.
Добавить точку останова (F9) на строке.
Запустить дебаг (F5). Как попадете на эту точку, нажать F11.Спасибо, ошибка найдена
Дело было в подключенной в недрах кода библиотеке <MT4Orders.mqh>
Спасибо, ошибка найдена
Дело было в подключенной в недрах кода библиотеке <MT4Orders.mqh>
OrdersTotal(0);
Это будет вызывать MT5-вариант.
Никакие файлы не подключены
Лог компиляции всегда содержит список всех файлов-исходников.
ЗЫ Поиск (F3) в исходнике #include может помочь...
- :: не изменило поведение кода
Интересно почему не изменило.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Такое ощущение, что OrdersTotal() возвращает количество не только отложенных ордеров, но ордеров и позиций. При этом при переборе методом OrderGetTicket() перебираются только отложенные ордера (без позиций). Также тикет отложенного ордера нулевой (хотя в терминале он есть)
Посмотрите ниже приведенный код и результат. Может я чтото не так делаю? У вас повторяется такой результат?
В конце скрин с открытыми и отложенными позициями. Судя по выводу, похоже, что OrderGetTicket() сначала (за первых два шага) возвращает реальные отложенные ордера, а после их завершения всегда возвращает последний из ордеров (по символу USDRUB.c)
Код выше выдает: