Ошибки, баги, вопросы - страница 3338
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Даже Стилизатор понимает, что #define не нужно трогать
Было:
Стало:
Большая просьба к разработчикам.
В тестере на графике Balance/Equity очень не хватает самой цены тестируемого периода, синхронизированной по трейдам.
Было бы очень полезно при анализе слабых и сильных мест в стратегии. Пусть будет очень бледной, едва заметной. Это ведь совсем не сложно реализовать.
Например так:
Спасибо за ответ!
Да, я уже посмотрел файлы СБ, и в том и дело, что в CheckGroup.mqh массив m_rows
еще при создании группы принудительно урезается до числа видимых в окне чек-боксов
(строка 106, метод CCheckGroup::Create(...) - ArrayResize(m_rows,m_total_view);,
а при скроллинге на графике в каждый момент присутствуют только объекты,
соответствующие видимым чек-боксам.
Поэтому при обращении за пределы окна гарантированно получим out of range.
Просто думал, что полностью понять их алгоритм не могу, поэтому надеялся,
что где-то моя ошибка...
Но вот воспроизвел этот эффект и в советнике Controls.mq5 из раздела примеров
в стандартной поставке терминала, из папки:
...\MQL5\Experts\Examples\Controls
Там если во включаемом файле ControlsDialog.mqh в методе CControlsDialog::CreateCheckGroup(void)
дополнить код, и создать не 5, а 8 чек-боксов
и затем выбрать програмно шестой, то после компиляции - тот же out of range
Для приватного m_total_view нет метода, возвращающего его значение. Значит, нужно либо исправлять сам класс в СБ (и делать это с каждым обновлением терминала), либо скопировать класс себе под другим именем и там поправить - сделать контроль видимых чекбоксов при попытке поставить галку на невидимом
Можете предоставить минимальный код, воспроизводящий описанный баг? Чтобы можно было скомпилировать и запустить.
А что мешает...
Да и так нормально:
Я вел речь не про обходные костыли, а про появление дополнительных потенциальных ошибок практически на ровном месте (нет примера пользы).
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления
Slava, 2023.02.15 09:10
Не все фичи C++ реализованы. Некоторые реализованы с ошибкой.
Но в данном случае, с высоты 30-летнего опыта программирования на C++, я бы сказал: "не надо так делать". Это - путь к трудноуловимым ошибкам.
Позиция слепого следования стандартам чужого языка ради совместимости с кодом говно-кодеров этого языка - отказ от собственного опыта ради занудства. Не сомневаюсь, что обсуждаемая хрень будет реализована разработчиками. Только ради галочки совместимости, конечно.
Я вел речь не про обходные костыли, а про появление дополнительных потенциальных ошибок практически на ровном месте (нет примера пользы).
Позиция слепого следования стандартам чужого языка ради совместимости с кодом говно-кодеров этого языка - отказ от собственного опыта ради занудства.
Польза очевидна: 99% пользователей изучивших Документацию MQL (а не только избранный круг посвященных), а также все пользователи C\C++ будут одинаково понимать совместимый код
Польза многократна: код написанный C\C++ в будет работать и в MQL и наоборот
У меня нет требования, чтобы все возможности C++ были реализованы в MQL, но те, которые реализованы, а тем более описаны в MQL Документации - должны работать без ошибок
Если Вы считаете, что ошибки нет, то докажите это конкретным примером, а не общими рассуждениями
Действую не по стандартам чужого языка, а строго по Документации MQL: разбиваю длинный макрос обратным слешем на несколько строк - как это указано в Документации именно MQL: Если запись директивы получается слишком большой, то её можно разбить на несколько строк с помощью обратного слеша '\', в таком случае следующая строка будет считаться продолжением записи директивы.
#define MACRO qwertyuiop asdfghjkl zxcvbnm
#define MACRO qwertyuiop\ asdfg\hjkl zxcvbnm
Результат:
#define MACRO qwertyuiop\ asdfg\ hjkl zxcvbnm
Что может быть проще для понимания?
Это не компилятор делает - это Вы сами должны разбить длинный макрос на несколько строк
Действуйте строго по Документации и тогда не будет никаких, даже потенциальных ошибок
Можете предоставить минимальный код, воспроизводящий описанный баг? Чтобы можно было скомпилировать и запустить.
Проще всего из моего предыдущего поста - файлы Controls.mq5 и включаемый в него ControlsDialog.mqh
уже находятся на вашем компе, в папке терминала
...\MQL5\Experts\Examples\Controls
Открыть ControlsDialog.mqh и в строке 355 в операторе for заменить 5 на 8,
и после оператора for добавить 2 строки:
Скомпилировать Controls.mq5 и кинуть на график.
И еще, самое важное в исправлении этого бага - не просто избежать попадания на невидимый бокс,
а чтобы галки без проблем програмно ставились в невидимых боксах!
Только тогда панель будет работать функционально полно:
Запустил советник, открыл панель, руками выбрал настройки, закрыл панель, сет настроек сохранился.
При следующем запуске сет настроек вызвался програмно и должен быть автоматически отображен на панели при ее вызове.
То есть должна быть возможность програмно ставить галки в скролируемых списках на всю глубину.
А иначе можно обойтись без панели, просто входными параметрами.
Действую не по стандартам чужого языка, а строго по Документации MQL: разбиваю длинный макрос обратным слешем на несколько строк - как это указано в Документации именно MQL: Если запись директивы получается слишком большой, то её можно разбить на несколько строк с помощью обратного слеша '\', в таком случае следующая строка будет считаться продолжением записи директивы.
Использую обратный слеш повсеместно (пример). Опыт есть, так сказать.
Сейчас можно взять любой чужой макрос, скопировать его и сдвинуть на любое количество пробелов. И его суть не изменится.
Вы же предлагаете ради "совместимости" с говно-практиками кодинга изменить это поведение. Когда скопировал макрос, разместил его, как удобно согласно своему стилю, а он перестал работать. И создал трудноуловимую ошибку, который найти крайне сложно.
В общем, вижу в этом больше вреда, чем пользы. Больше не вижу смысла говорить по этой теме.
Использую обратный слеш повсеместно (пример). Опыт есть, так сказать.
Сейчас можно взять любой чужой макрос, скопировать его и сдвинуть на любое количество пробелов. И его суть не изменится.
Вы же предлагаете ради "совместимости" с говно-практиками кодинга изменить это поведение. Когда скопировал макрос, разместил его, как удобно согласно своему стилю, а он перестал работать. И создал трудноуловимую ошибку, который найти крайне сложно.
В общем, вижу в этом больше вреда, чем пользы. Больше не вижу смысла говорить по этой теме.
А не нужно бездумно сдвигать. В Python например каждый сдвиг - смысловой и может кардинально изменить выполнение программы. Наверное не дураки это придумали, и с MQL его интегрировали