Ошибки, баги, вопросы - страница 2541
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Sergey Dzyublik, 2019.05.26 15:12
К сожалению, на текущий момент возможности указателей на функции (function pointer types) в МТ4/MT5 весьма ограничены и не практичны из-за ряда дефектов:# (не исправлено в MT5(build 2118)) "Ошибка компиляции при повторном использовании одной и той же сигнатуры функции в рамках typedef".
# (не исправлено в MT5(build 2118)) "При работе с typedef использование шаблонной функции с явной специализацией не вызывает генерацию кода этой шаблонной функции".
В виду ожидаемого внедрения пространства имен, прошу в рамках исправлений дефектов рассмотреть возможность внедрения поддержки следующего С++ подобного поведения:
MT5 (build 2118), Сколько еще можно ждать исправлений багов в работе функциональности typedef?
Какой-то бред - шаг влево от примитивного примера по использованию typedef и все - куча багов, блокирующих дальнейшую разработку.
Дай угадаю. Если запускаешь из dll цикл в потоке терминала, то зависание, а если в отдельном потоке, которому detach() делаешь, то терминал падает с ошибкой?
Не совсем так.
Запуск цикла работает нормально.
Проблема когда принудительно останавливаешь программу, и передаёшь флаг в цикл, чтобы он вышел из цикла и завершил работающую функцию.
Но терминал не даёт корректно выйти из цикла и завершить работающую функцию, потому что уже сработала ранняя выгрузка dll. Получаем висяк.
dll выгружается раньше, чем передаётся состояние флага, и функция Fn не завершается, ранняя выгрузка всё ломает.
В потоке терминала сделал для примера, чтоб не писать весь код, так как в блокирующем режиме проблему лучше видно.
Уже и отдельную функцию завел для флага цикла, запущенный цикл работает в другом потоке, но всё то же самое поведение.
И когда пытаюсь из не заблокированного кода mql, через функцию перевести флаг в другое состояние чтобы выйти из цикла,
терминал не ждёт завершения работающего цикла, и не даёт завершить функцию Fn где крутится цикл.
Терминал сразу производит раннюю выгрузку dll не дожидаясь когда функция Fn завершится. Вот в чём проблема.
так приводите сразу правильный пример. и оставьте аттачи детачи в покое. управляйте созданием\удалением потоков явно сами.
В заблокированном режиме лучше видно проблему. По сути не важно чем изменяется состояние флага. Точкой входа или отдельной функцией.
Для блокирующего режима лучше подходит точка входа, так как управление обратно не передано, и вызвать функцию изменения флага не получиться. По этому атачи детачи для примера.
Атачи детачи оставил в покое, завёл отдельную функцию как вы посоветовали, нифига, на рабочем проекте в неблокирующем режиме, то же поведение.
Происходит ранняя выгрузка dll, работающая функция где крутится цикл while не успевает завершится, как прилетает висяк.
Происходит ранняя выгрузка dll, работающая функция где крутится цикл while не успевает завершится, как прилетает висяк.
не может быть висяка в нормальной реализации
Кто-нибудь сталкивался со следующей проблемой с кастом-символами? В функцию CustomRatesUpdate передаются нормальные котировки, а по факту на график и в окно данных попадает нечто странное (в данном случае, в close и low значения в 100 раз меньше, чем переданные):
Также параллельно эмулируются одиночные тики с помощью CustomTicksAdd с теми же значениями цены close, что в логе (непосредственно перед CustomRatesUpdate), т.е. откуда берутся уменьшенные значения в котировках - не понятно.
UPD:
На USDCAD получил "обратную" в некотором смысле ситуацию - котировки после записи увеличиваются в 10 раз. Вот такой лог получаю:
Первый ArrayPrint - то, что записывалось в CustomRatesUpdate, а второй ArrayPrint - то, что прочитано с помощью CopyRates из последнего самого свежего бара сразу после записи. Во-первых, различие в последнем разряде в open, но что более важно - high и close увеличены в 10 раз.
Кто-нибудь сталкивался со следующей проблемой с кастом-символами? В функцию CustomRatesUpdate передаются нормальные котировки, а по факту на график и в окно данных попадает нечто странное (в данном случае, в close и low значения в 100 раз меньше, чем переданные):
Также параллельно эмулируются одиночные тики с помощью CustomTicksAdd с теми же значениями цены close, что в логе (непосредственно перед CustomRatesUpdate), т.е. откуда берутся уменьшенные значения в котировках - не понятно.
Да, сталкивался, только у меня ноль не понятный проскакивал. У тебя в 100 крат проскакивает.
Продублируй проблему в эту веткуДелал доп проверку на ноль, не помогло, работало криво, то нормально то рисовал такие шипы.
В основном такое поведение наблюдал при первом запуске программы, и при первом запуске создавались файлы истории с несуществующей датой.
Чистил папку тиков, корректировал код, чтоб найти где же баг, надоело, пока отложил, но тоже предстоит мне ещё вернуться к этой проблеме ((
Проверь ещё папку кастомной истории, там могут быть файлы с несуществующей датой ))
В общем жук живёт там конкретный.
Там вроде Слава по кастомным символам заведует.
Чтобы напомнить о проблеме.
Говорили уже про эту ошибку? Не могу найти. Суть: при загрузке результатов оптимизации из кэш файла результаты форвардов отображаются некорректно. В значениях параметров левые цифры.
Заходишь во вкладку оптимизация. Выбираешь эксперта. Выбираешь одну из бывших оптимизаций. Бэк-тесты загружаются нормально. Форварды выдают это:
МТ5, билд последний. х64.
Разработчики, привет.
В CArrayList из джинерика capacity неверно используется. Если это резервный размер, то надо вызывать в конструкторе так:
Сейчас там так:
ArrayResize(m_items,m_default_capacity);Если же хотите сами выделять и учитывать, то заведите позиционирование и используйте везде, включая bsearch и прочее, хотя так себе затея.
PS. В ходе изучения кода нашел, что передаете m_size все-таки. При пустом массиве BinarySearch возвращает 0, а не -1.
И зачем самим организовывать capacity, если есть это на уровне ArrayResize?
PPS. Планируется ли создание LowerBound?Вообщем по CArrayList 3 основных момента:
1. Подумать, чтобы убрать дополнительную реализацию capacity, раз она уже есть в ArrayResize
2. Исправить BinarySearch для пустого массива. У вас в массиве по умолчанию 4 элемента и передается 0й индекс первым, он же и возвращается при нулевом размере.
3. Желательно добавить LowerBound. Странно, что никто не просил до этого
Почему когда я выключая комп и захожу в МТ4 на на следующий день уровни не сохраняются?
Тут два варианта - либо есть индикатор/советник, который чистит все уровни при инициализации, либо не успевает сохранится сет. Сталкивался с обеими проблемами, первая лечится правкой кода, а вторая сохранением сета два раза и загрузкой сохраненной версии при запуске терминала.