Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 984
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
По факту же вопроса. Sleep не должен никак влиять на пересчет данных в индикаторе. Что-то не так с заполнением буферов. Может есть воспроизводимый кусок кода?Индикатор писался на заказ - там дикий ООП, я его не понимаю :(
Всю ночь просидел с этой проблемой, пока нашел причину расхождения работы тестера и реального счета, возможно поспав уберу часть секретной логики и выложу на обозрение.
Столкнулся с проблемой, советник на базе индикатора работает на реальном счете корректно, а в тестере врет, во режимах генерации тиков как по OHLC так и по всем тикам - результат одинаковый. Результатом ошибки является незаполненный буфер индикатора на нулевом баре (только когда появляется новый бар на верхнем TF, по которому идет расчет индикатора). Однако, мне удалось заставить считать индикатор, добавив Sleep в советник, и тут было выявлено, что в зависимости от режима генерации тиков этот Sleep должен быть разным - для генерации по всем тикам достаточно Sleep(15000), а для OHLC нужно уже Sleep(30000).
Поэтому возникает вопрос, нормальна ли ситуация со Sleep, ведь получается логически, что там разное время задержки моделируется в зависимости от режима генерации тиков!?
Уважаемые разработчики, прошу Вас пояснить по поводу описанной ситуации с индикатором, так-как сам я не могу понять в чем причина - ошибка в коде или в тестере!
Индикатор и советник готов предоставить в личку, только скажите кому.
там такой прикол в индикатороах, что таймсерии бывают еще не готовы, т.е. он не может сразу скопировать цену в массив. Для этого надо проверять доступна ли история по ТФ, если нет то делать попытку копирования снова и ждать поа она не подгрузится, в цикле
это кривые руки программиста, если он об этом не знал
слип это не нормальноОбъясните, пожалуйста..
Нажимаю клавишу = получаю событие id = 0. Это можно повторять многократно. Результат получается тот же до тех пор, пока не нажат пробел.
Нажат пробел = получаю событие id = 0. После этого никакие манипуляции с клавиатурой к событиям не приводят.
Чтобы выйти из ступора, нажимаю кнопку мыши = получаю событие id = 4. После этого опять можно клацать по клавиатуре = события приходят на каждое нажатие. Пока не нажат пробел = с тем же результатом.
Вопрос: Это я дурак чего-то не понимаю или так не должно быть? Прошу указать ссылку.
Здравствуйте, коллеги.
Вопрос такой: в mql4 для того, чтобы посчитать количество позиций можно было прописать функцию, к примеру, такую
Как это дело реализуется в mql5? Как можно посчитать позиции по магику? или по типу?
Добавьте перед MQL4-функцией эту строку
и она станет работать в MT5.
там такой прикол в индикатороах, что таймсерии бывают еще не готовы, т.е. он не может сразу скопировать цену в массив. Для этого надо проверять доступна ли история по ТФ, если нет то делать попытку копирования снова и ждать поа она не подгрузится, в цикле
это кривые руки программиста, если он об этом не знал
слип это не нормальноКак такое возможно в тестере? Я понимаю, если проблема на реале или в тестере там нет истории... Впрочем, как должна выглядеть эта проверка?
Разработчики игнорируют моё сообщение, прискорбно.
Как такое возможно в тестере? Я понимаю, если проблема на реале или в тестере там нет истории... Впрочем, как должна выглядеть эта проверка?
Разработчики игнорируют моё сообщение, прискорбно.
проверка скоприровались ли цены, если Copyclose или что там возвращает -1 значит не скопировались
проверка скоприровались ли цены, если Copyclose или что там возвращает -1 значит не скопировались
Индикатор рассчитывается 1 раз при появление нового бара, что реализовано, если я правильно понимаю таким образом:
это подтверждается и простым принтом.
Поэтому и не ясна ситуация, если предположить, что нет цен для расчета, то произойдет 1 раз расчет индикатора и буфер останется незаполненным, но это не так - он заполнится, если добавить sleep в советник и подождать. Может индикатор медленно ведет расчет и его просто не дожидается тестер? Но как это проверить?
Индикатор рассчитывается 1 раз при появление нового бара, что реализовано, если я правильно понимаю таким образом:
это подтверждается и простым принтом.
Поэтому и не ясна ситуация, если предположить, что нет цен для расчета, то произойдет 1 раз расчет индикатора и буфер останется незаполненным, но это не так - он заполнится, если добавить sleep в советник и подождать. Может индикатор медленно ведет расчет и его просто не дожидается тестер? Но как это проверить?
может, таймером надо засекать тогда
может, таймером надо засекать тогда
Да, с таймером в советнике тест проходит чуть дальше, чем без таймера, но хуже чем со Sleep, да и таймер по сути тот же Sleep.
Кажется, я понял в чем проблема, индикатор рассчитывается по данным двух других индикаторов, в коде происходит запрос числа посчитанных баров других индикаторов
и ожидаемое расчетное число баров
Если эти два значения не совпадают и получается, что буфер не заполняется.
Если я правильно понимаю, то индикаторы выполняются в одном потоке, и их приоритет выстраивается по времени их создания, т.е. получается, что индикатор к которому я обращаюсь из советника имеет больший приоритет и он свой расчет выполняет первым, а потом после окончания расчета отдает поток тем индикаторам, на основании которых (по данным буферов) должен происходить расчет.
В принте видно, что если поставить Sleep достаточного размера, то происходит перерасчет в индикаторе(пока не понимаю как), и почему только через 13 секунд?
В индикаторе таймера нет.
И, что же я должен сделать, что бы получить правильный расчет, попытка использовать while в советнике до ожидания значения в буфере не помогает - происходит зависание.