Если Вы хотите в индикаторе получать данные с другого таймфрейма, то в таком случае нужно проверить готовность этих данных (Организация доступа к данным). Так как в индикаторе нельзя вызывать
Sleep()
то проверку готовности нужно проводить на следующем тике. Если это выходные и тиков нет - то простой выход - вручную правый клик на графике и "Обновить".
Если Вы хотите в индикаторе получать данные с другого таймфрейма, то в таком случае нужно проверить готовность этих данных (Организация доступа к данным). Так как в индикаторе нельзя вызывать
то проверку готовности нужно проводить на следующем тике. Если это выходные и тиков нет - то простой выход - вручную правый клик на графике и "Обновить".
я описал уже все эти варианты в самом вопросе. похоже вы не читали. и они меня не устраивают. это не удобно, обновлять вручную индикатор. остальные же варианты из известных мне как вы и сами написали не работают
к тому же как я описал данные не становятся готовыми при искусственной задержке циклом. почему? интересно получить ответ на этот вопрос для понимания механизма работы индикатора инициированного из другого индикатора.
я описал уже все эти варианты в самом вопросе. похоже вы не читали. и они меня не устраивают. это не удобно, обновлять вручную индикатор. остальные же варианты из известных мне как вы и сами написали не работают
к тому же как я описал данные не становятся готовыми при искусственной задержке циклом. почему? интересно получить ответ на этот вопрос для понимания механизма работы индикатора инициированного из другого индикатора.
к тому же как я описал данные не становятся готовыми при искусственной задержке циклом. почему? интересно получить ответ на этот вопрос для понимания механизма работы индикатора инициированного из другого индикатора.
написал, и сам догадался почему. видимо потомучто как известно индикаторы выполняются в одном потоке сов сем остальным "графиком" и ставя в нем бесконечный цикл я блокирую все процессы , в том числе расчет данных для вызванного индикатора для другого таймфрейма.
поправьте если я не правильно понял.
и тогда вопрос почему же индикатор для данного таймфрейма считается сразу а для другого нет. это очень неудобно. можно ли это какнибудь исправить или обойти
1)... потому что, как известно, индикаторы выполняются в одном потоке с графиком и ставя в нем бесконечный цикл я блокирую все процессы и в том числе расчет данных для вызванного индикатора для другого таймфрейма.
поправьте если я не правильно понял.
2) Тогда вопрос: "Почему же индикатор для данного таймфрейма считается сразу а для другого нет. Это очень неудобно. Можно ли это как нибудь исправить или обойти?"
- Здесь ответ в самом вопросе.
- Только проверять готовность данных.
- Здесь ответ в самом вопросе.
- Только проверять готовность данных.
проверять то я могу. но как мне ждать готовности если они не готовы. вопрос то изначально состоял именно в этом. ждать следующего тика не устраивает так как его нет.
ждать следующего тика не устраивает так как его нет.
Завести таймер и эмулировать OnCalculate
такая мысль одна из первых приходила. но я не знаю как эмулировать событие OnCalculate. не подскажете?
Вот здесь есть пример: Рецепты MQL5 - Разработка мультивалютного индикатора волатильности на MQL5 >>>
Вот здесь есть пример: Рецепты MQL5 - Разработка мультивалютного индикатора волатильности на MQL5 >>>
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
вопрос в первую очередь к поддержке метаквотов
но может ктото уже нашел решение этой проблемы в рамках существующих инструментов.
понадобилось использовать в индикаторе другой индикатор с другого таймфрейма того же инструмента
чтото типа того что используется в этом примере из справки по mql5
https://www.mql5.com/ru/docs/series/copybuffer
но только вместо
ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
я написал
после этого данный индикатор, текст которого представлю ниже, перестал рисоваться при инициализации, а только после прихода очередного тика, или после внесения каких либо изменений в окно графика (например добавления другого индикатора). то есть только после повторного вызова функции OnCalculate. первый вызов функции натыкается на то что BarsCalculated и CopyBuffer выдают ошибки о неготовности данных (4806). при этом ошибка не исчезает даже если я ставлю проверку BarsCalculated в бесконечный цикл - то есть со временем данные не становятся готовыми (Sleep как известно в индикаторе нельзя использовать). второй же вызов функции OnCalculate приводит к положительному результату.
все вышеописанное приводит к тому что индикатор не рисуется в оффлайне. это очень неудобно.
итого вопрос. как данную проблему можно решить. самое очевидно что приходит в голову инициировать както перезапуск функции OnCalculate. но я не нашел возможно ли это сделать. возвращать 0 из OnCalculate не помогает.
какие будут идеи.
текст кода (немного измененный стандартный пример отсюда https://www.mql5.com/ru/docs/series/copybuffer)