Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 846
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У меня после функций прописан GetLastError и если возникает ошибка разве она в этот блок не поступит (так как написано) и команды не будут выполняться? Я так понимаю цепочку например OrderSend() -> GetLastError -> блок ошибок Sleep(3000) RefreshRates() -> выход из блока и если условия остались опять идет запрос OrderSend(). Или мои рассуждения и представления не верны. Я понимаю,что вы мне предлагаете прописать возвращаемое return значение 1 или 0 в блок, но у меня функции простые не привязаны к булевым значения типа SignalBuy, если я правильно понимаю туда и должны потом возвращаться значения return.
У меня после функций прописан GetLastError и если возникает ошибка разве она в этот блок не поступит (так как написано) и команды не будут выполняться? Я так понимаю цепочку например OrderSend() -> GetLastError -> блок ошибок Sleep(3000) RefreshRates() -> выход из блока и если условия остались опять идет запрос OrderSend(). Или мои рассуждения и представления не верны. Я понимаю,что вы мне предлагаете прописать возвращаемое return значение 1 или 0 в блок, но у меня функции простые не привязаны к булевым значения типа SignalBuy, если я правильно понимаю туда и должны потом возвращаться значения return.
Нужен совет. В соответствии с условиями позиция должна закрывается и после 121 секунд потом должна открыться новая позиция. Как это сделать c Sleep(121000)?
Добрый день!
Нужен совет. В соответствии с условиями позиция должна закрывается и после 121 секунд потом должна открыться новая позиция. Как это сделать c Sleep(121000)?
OnTimer() в помощь
народ только что переустановиль виндовс 7 после хотель установить Мт4 проблема втом что файлы не скачивается что делать ?
Спасибо! OnTimer() не пользовался никогда . Эта часть кода находится в void OnTick(). Получится тогда функцию OpenPosition( обработать по OnTimer()? Если можете, пожалуйста, поправьте код как надо правильно туда вставить OnTimer()..
Таймер запускается в OnInit()
Для того, чтобы начать отсчёт, вам нужно в таймере найти время закрытия последней позиции и от этого времени отсчитать 121 сукунду. Для передачи флага, разрешающего открыть новую позицию, используйте глобальную переменную, область видимости которой распространяется на всю программу. Можно её сделать изначально содержащей значение больше 121, например 122 (сможете в настройках менять время ожидания).
В OnTick() Проверяете эту переменную. Если больше 121, и нет позиции - открываете позицию - и, после проверки успешности её открытия, сбрасываете переменную в ноль.
Как только позиция будет закрыта, таймер видит её время закрытия (он это делает постоянно раз в секунду) и, если от текущего времени до времени закрытия позиции прошло меньше 121-й секунды, запускается отсчёт времени - каждую секунду значение переменно прибавляете на 1.
Примерно так. Где может быть баг - если позиция ещё не закрыта, то время её закрытия равно нулю. Это может вызвать проблему с запуском отсчёта. Можно сбрасывать переменную в -1, например.
Да, не забудьте в OnDeinit() уничтожить таймер:
Таймер запускается в OnInit()
Для того, чтобы начать отсчёт, вам нужно в таймере найти время закрытия последней позиции и от этого времени отсчитать 121 сукунду. Для передачи флага, разрешающего открыть новую позицию, используйте глобальную переменную, область видимости которой распространяется на всю программу. Можно её сделать изначально содержащей значение больше 121, например 122 (сможете в настройках менять время ожидания).
В OnTick() Проверяете эту переменную. Если больше 121, и нет позиции - открываете позицию - и, после проверки успешности её открытия, сбрасываете переменную в ноль.
Как только позиция будет закрыта, таймер видит её время закрытия (он это делает постоянно раз в секунду) и, если от текущего времени до времени закрытия позиции прошло меньше 121-й секунды, запускается отсчёт времени - каждую секунду значение переменно прибавляете на 1.
Примерно так. Где может быть баг - если позиция ещё не закрыта, то время её закрытия равно нулю. Это может вызвать проблему с запуском отсчёта. Можно сбрасывать переменную в -1, например.
Да, не забудьте в OnDeinit() уничтожить таймер:
Ясно, спасибо. Наделся одной строкой это сделать, но видимо надо будет по дольше поработать.
Ясно, спасибо. Наделся одной строкой это сделать, но видимо надо будет по дольше поработать.