Ошибки, баги, вопросы - страница 1233
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
давным давно поднимался вопрос об ошибке 4806 " Почему функция CopyBuffer, помещенная в пользовательском индикаторе, приводит к ошибке 4806,
в то время, как эта же функция с теми же самыми параметрами в коде эксперта работает нормально? "
мой код работает из под отладчика, но не работает в обычном режиме (вернее работает иногда причем простой закономерности почему работает а почему нет я установить не смог)
зачем вообще нужны индикаторы типа iXXX, если их нельзя нормально использовать?
Добрый день. Данные для CopyBuffer берутся с того же ТФ, на котором запущен Ваш индикатор?
Пробовали пользоваться функцией BarsCalculated() для решения проблемы?
Как в MQL-ном ООП проверить тип указателя на принадлежность к конкретному классу - типа instanceof в JavaScript или typeid в C++?
Добрый день. Данные для CopyBuffer берутся с того же ТФ, на котором запущен Ваш индикатор?
Пробовали пользоваться функцией BarsCalculated() для решения проблемы?
День добрый.
Проблема с вызовами функций из системных dll. Задача -- написать простенький сервер TCP на MQL5, к-ый висит на определенном порту и просто принимает сообщения.
Импортировал из ws2_32.dll функции WSAStartup(), WSAClenup(), socket(), bind(), accept(), listen(), recv(). Все работает ровно до того, пока не попытаешься остановить сервер. После попытки остановит сервер и корректно завершить работу скрипта, терминал просто вылетает.
Методом научного тыка вышел на функцию recv().
в прикрепленном файле есть строчка (171):
если ее привести к виду:
то сервер останавливается безо всяких ошибок. Примеры использования ф-ий для работы с сетью смотрел на MSDN и все сделал по аналогии.
Есть ли у кого-нибудь идеи как решить проблему?
Спасибо за вопрос. Данные брал с iATR на Д1 основной индикатор работает на меньших таймфреймах, BarsCalculated() также возвращает -1 и ту же ошибку. Как я догадываюсь, функция есть, а инидикатора нет (в рантайме). Если создать индикатор в другом окне на том же инструменте, то все работает. В режиме отладки тоже работает. Но мой вопрос Это бага или я че то не понимаю?
Сам недавно бился с этой проблемой. Решил, не знаю насколько оптимально, но решил. Только данные брал с iFractals, но это не важно. Почему спросил про ТФ. По моим наблюдениям, происходит следующая вещь. Например, индикатор работает на М15. Если данные по индикатору запрашиваются с M1 до М15 - все нормально, данные доступны сразу в момент обращения (если не первый вызов). Если же данные запрашиваются с М30 (повторюсь, сам индикатор работает на ТФ М15), то в момент обращения данных по М30 за новую свечу нет (либо нужен предварительный запрос, либо данные запаздывают на тик). Решил следующим образом. Запоминаю результат BarsCalculated() на текущей свече. Как только в следующий раз BarsCalculated() возвращает значение на 1 больше (образовалась новая свеча), запоминаем новое значение BarsCalculated() и копируем данные. Но этот момент (появления данных по индикатору на старшем ТФ) не совпадает с образованием новой свечи по текущему ТФ.
Да, BarsCalculated() возвращает -1, когда вообще нет данных, такое бывает, насколько мне известно, только при первом запуске. Т.е, когда получил handle индикатора и сразу запрашиваешь данные. Тоже нужно подождать.
Сразу после создания хендла индикатора нельзя запрашивать данные, так как они не готовы. Процесс инициализации и перерасчета сложен и зависит от множества факторов.
Правильная стратегия: создать хендл в онините, а работать с данными по приходу первого тика.
Сразу после создания хендла индикатора нельзя запрашивать данные, так как они не готовы. Процесс инициализации и перерасчета сложен и зависит от множества факторов.
Правильная стратегия: создать хендл в онините, а работать с данными по приходу первого тика.
Тогда такой вопрос. Если индикатор запущен на М15. Образовалась новая свеча. При запросе данных для М15 и М30 они должны быть доступны в один момент?
Да.
После создания индикатора(включения его в цикл нормальной обработки) и попадания в нормальный цикл обработки тиков(онтик), данные будут с большой вероятностью доступны. Но не забывайте, что гарантии нет из-за возможной докачки истории по другим символам.
То есть, всегда проверяйте результаты запросов данных индикаторов. Если в онтике запрашиваете данные и их нет, то сразу выходите, чтобы провериться на следующем тике.
Не совершайте типичной ошибки "все всегда готово, я не думаю о технических процессах доставки и расчета данных, меня это не должно касаться, мне всегда везет". Всегда реализовывайте логику ленивой инициализации и контроль данных.
Обязательно тестируйте свои программы на пустой базе чартов. Обычно хватает перезапуска терминала со стертой вручную базой истории, чтобы получить разнообразные ошибки доступа по неверному индексу или делению на ноль.
Если получили бар м15 на символе, то бар м30 на этом же символе точно есть.
Да.