Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 986
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В OnInit() сделайте обращение к таймсерии символа: iTime(Symbol,Timeframe,1);
В OnTick() в самом начале сделайте запрос нужного бара нужной таймсерии через соответствующую iFunc(), хотя бы тем же if( iTime(Symbol,Timeframe,10)==0) return;
Тогда советник не дойдёт до определения нового бара и будет ждать следующего тика.
В OnInit() мы запросили данные таймсерии, тем самым активизировав подкачку данных.
В OnTick()проверяем доступность минимально-требуемой советнику истории и, если она ещё не доступна - уходим в ожидание следующего тика.
И пока не будут получены все требуемые советнику данные, он так и будет ожидать следующий тик.
Как только все необходимые данные будут подкачаны и получены, советник начнёт работу с новым баром и нужной ему историей.
Для поддержания серийных данных в актуальном состоянии, обязательно нужно к ним обращаться не менее одного раза в две минуты. Сделайте секундный таймер примерно на полторы минуты (90 секунд) и в нём просто обращайтесь к любой таймсерии нужного символа, например iTime(Symbol,Timeframe,1); Без проверки полученных данных - просто "шевельнуть" историю. Тогда все данные по символу будут всегда находиться в актуальном состоянии.
Я конечно попробую вариант с проверкой нового бара по всем TF, но разве это происходит не синхронно, это же не MT4. Да и проблема не в баре, а в не отработки индикаторов, которые вызываются из индикатора, который в свою очередь вызывается из советника.
Я работаю на минутках, поэтому история по идеи всегда актуальна должна быть.
И, все эти проверки делаем для теста, а на реале они просто будут замедлять работу, так-как там и так все отрабатывает медленней, чем в стационарных условиях тестера, повторюсь, что на реальном счете индикатор работает корректно.
Пока решил проблему так, перед началом работы основного кода сделал проверку готовности индикаторов, которые давали сбой
Но такой подход не универсален, так-как надо перечислять все индикаторы, есть ли иной, более универсальный метод заставить корректно работать окружение тестера?
В OnTick()проверяем доступность минимально-требуемой советнику истории и, если она ещё не доступна - уходим в ожидание следующего тика.
И пока не будут получены все требуемые советнику данные, он так и будет ожидать следующий тик.
Как только все необходимые данные будут подкачаны и получены, советник начнёт работу с новым баром и нужной ему историей.
Как Вы предлагаете проверять доступность истории, я что-то не понял...
Добавьте перед MQL4-функцией эту строку
и она станет работать в MT5.
Гениально. Огромное спасибо!
Подскажите в МТ5 можно реализовать такие кнопки, может уже есть у кого поделитесь кодом...
Предусмотреть проскальзывание и реквоты.
Здравствуйте, если по ценам Ask и Bid из класса CSymbolInfo более или менее пнятно, то как получить например SessionInterest или SessionBuyOrdersVolume или SessionPriceLimitMin, Выдает ноли, не могу понять почему...
Здравствуйте, если по ценам Ask и Bid из класса CSymbolInfo более или менее пнятно, то как получить например SessionInterest или SessionBuyOrdersVolume или SessionPriceLimitMin, Выдает ноли, не могу понять почему...
Если торговый сервер транслирует эту информацию - Вы её получите.
Как правило эту информацию транслируют Брокеры для биржевых символов (не путайте Брокера и дилинговые центры).
Если торговый сервер транслирует эту информацию - Вы её получите.
Как правило эту информацию транслируют Брокеры для биржевых символов (не путайте Брокера и дилинговые центры).
Брокер Открытие, Фьючерс на индекс РТС, предполагаю, что должен транслировать по крайней мере SessionPriceLimitMin и SessionPriceLimitMax (т.к. они насколько я понимаю по ценам открытия используются в рыночных ордерах). Неужели открытие не транслирует... Прописываю например:
Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - из вашего советника
В журнал получаю только цены Ask
Прошу помощи в написании кусочка кода, который правильно бы определял дату последнего бара с любым сдвигом в любом TF с точностью до текущего ТФ.
Такой код в целом рабочий, но если только время начала текущего бара совпадает с фактическим (с округлением до минуты) баром, так как мой текущий график M1. А если не совпадает, то возникают различные казусы, в зависимости от разных TF. К примеру, мне надо узнать дату начала последнего бара M1 в прошлом часе, если это был час 12 то проблем нет, время будет 12:59, а если это 13 часов, то время будет уже 13:58 так как бар часовой открылся не в 14:00, а в 14:05 и функция iBarShift вернула ближайший бар к 14:00, а именно 13:59.
Добавлено: сделал так, кажется работает
Брокер Открытие, Фьючерс на индекс РТС, предполагаю, что должен транслировать по крайней мере SessionPriceLimitMin и SessionPriceLimitMax (т.к. они насколько я понимаю по ценам открытия используются в рыночных ордерах). Неужели открытие не транслирует... Прописываю например:
Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - из вашего советника
В журнал получаю только цены Ask