Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 984
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Объясните, пожалуйста..
Нажимаю клавишу = получаю событие 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 в советнике до ожидания значения в буфере не помогает - происходит зависание.
do { ... код заполнения буфера
}
while(эти два значения не совпадают)
короче получать значения до тех пор в цикле, пока они не совпадут, только после этого выполнять следующий кодdo { ... код заполнения буфера
}
while(эти два значения не совпадают)
короче получать значения до тех пор в цикле, пока они не совпадут, только после этого выполнять следующий кодТак дело в том, что пока не отработает один индикатор, данные (поток) не передаются другому, т.е. цикл в индикаторе без окончания работы OnCalculate этого индикатора не поможет. А как только OnCalculate заканчивается, то сразу отдаются данные советнику, а они ошибочны.
Или я не понял Вашу идею.