Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1188
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вообще судя по вашему ответу, Вы сами не очень понимаете, как работает программа. Раз кажется, что это глупый вопрос. Да как и предыдущий комментатор думает, что она останавливается. Просто по опыту программирования в других языках думаю, что она выполняет в цикле своё тело, и когда событие приходит, она в него ныряет. Если программа выполняет в цикле своё тело, то это объясняет, почему так написана программа.
Программа с приходом события "новый тик" запускается в обработчике OnTick(), выполняется до конца и останавливается. С приходом нового тика всё повторяется сначала. Если за время выполнения программы пришёл следующий тик, а программа ещё не завершила обработку прошлого тика (всё ещё работает), то этот тик пропускается.
Программы на MQL не зацикленные. Имеют три точки входа - OnInit(), OnDeinit() и OnTick()
При запуске выполняется OnInit(), затем при поступлении тика - OnTick(), при завершении работы - OnDeinit().
Есть ещё другие обработчики. Но вам лучше просто открыть справку, чем просить её сюда кого-нибудь продублировать.
Здравствуйте. Работая над своим индикатором обнаружил сбой при перезапуске терминала. На основе этого бага я сделал небольшой исходник для его тестирования:
Если данный пример бросить на график (или же это первый запуск терминала после запуска системы) то всё работает нормально. В журнале пишет следующее:
2020.06.24 21:05:50.773 Loader::Loader symbol: EURUSD timeframe: PERIOD_H1
2020.06.24 21:05:50.773 Loader::Loader bars: 140433
2020.06.24 21:05:50.773 Loader::Loader Error: 0
2020.06.24 21:05:50.773 Loader::Loader bars (2): 140433
Но если я перезапускаю терминал с данным индикатором, то получаю ошибку:
2020.06.24 21:07:34.963 Loader::Loader symbol: EURUSD timeframe: PERIOD_H1
2020.06.24 21:07:34.963 Loader::Loader bars: 0
2020.06.24 21:07:34.963 Loader::Loader Error: 4401
2020.06.24 21:07:34.964 Loader::Loader bars (2): 140433
Символ и таймфрейм нормально проинициализировались
2020.06.24 21:07:34.963 Loader::Loader symbol: EURUSD timeframe: PERIOD_H1
Но iBars(symbol, timeframe) почему-то дает 0
2020.06.24 21:07:34.963 Loader::Loader bars: 0
При этом появляется ошибка 4401.
Но iBars(Symbol(), Period()) отрабатывает отлично.
2020.06.24 21:07:34.964 Loader::Loader bars (2): 140433
Хоть symbol = Symbol(), а timeframe = Period() согласно сообщениям в журнале (даже во время лага, при перезапуске терминала). Как iBars(symbol, timeframe), с абсолютно корректными symbol и timeframe может давать ноль, в то время как iBars(Symbol(), Period()) нормально отрабатывает, если параметры в функциях, согласно журналу, одинаковые?
Как открыть демо-счет МТ4 на MetaQuotes Demo? Раньше работало без проблем, сейчас на последней странице диалога пишет: Registration, Wait a little, please, и в таком состоянии бездействует бесконечно, поля с логином и паролем остаются пустыми. Никаких сообщений в логе. Пробовал и "демо", и "реал", и разные типы счетов.
UPD. Попробовал демо одного брокера - та же фигня.
Программа с приходом события "новый тик" запускается в обработчике OnTick(), выполняется до конца и останавливается. С приходом нового тика всё повторяется сначала. Если за время выполнения программы пришёл следующий тик, а программа ещё не завершила обработку прошлого тика (всё ещё работает), то этот тик пропускается.
Программы на MQL не зацикленные. Имеют три точки входа - OnInit(), OnDeinit() и OnTick()
При запуске выполняется OnInit(), затем при поступлении тика - OnTick(), при завершении работы - OnDeinit().
Есть ещё другие обработчики. Но вам лучше просто открыть справку, чем просить её сюда кого-нибудь продублировать.
Спасибо. Да я это понимаю, просто функция написана в теле программы. Может я гдето не заметил ее вызов.
Мы как можем увидеть то, о чём вы говорите? Приведите пример.
Мы как можем увидеть то, о чём вы говорите? Приведите пример.
Спасибо. Да я это понимаю, просто функция написана в теле программы. Может я гдето не заметил ее вызов.
в mql4 функции пишутся в любом порядке, выше ниже по барабану, может показаться что она работает раньше или позже. В с++ такого нет там все функции могут сработать только в порядке очереди написания и если вы хотите её вызвать то она должна быть определена до место вызова иначе программа падает. Человек показывал как сделать так чтобы в разнобой функции писать но я уже не помню как это делать на с++, да и это мало важно.
Приветствую. Помогите пожалуйста. У меня вот такой вопрос. Правильно ли я понимаю. Что программа выполняется с начала и до конца, но обрывается, если приходит событие, например тик, начинает выполняться функция ontick, потом она заканчивает выполнение, и опять выполняется программа сначала? Этот вопрос связан вот с чем, где мне писать например размер торгового лота? в теле программы или в функции ontick ?
Я смотрю на официального бота, который как пример в терминале , там обсчёт лота выполняется в теле программы, и я не понял почему так.
У меня лот высчитывается так
стоит в начале советника...и ставил в самый конец кода
Когда идет обращение в функции OnTick к переменной Lots, то советник находит и пересчитывает.
@Artyom Trishkin
Вы модератор в этой ветке?