Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - страница 19
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Входными данными индикатора являются только эти ценовые массивы и одно число.
И больше ничего! Индикаторы не работают с Copy-функциями (и их производными) и Bars-функциями. Если кто-то решил использовать эти функции на свое усмотрение, то они к индикатору никакого отношения не имеют. Это как в советнике их использовать или запрашивать данные с чужого символа/периода.
Не наделяйте индикаторы функционалом, которого в нем не должно быть. Для индикатора есть только данные из шапки OnCalculate. При выполнении Copy-функций они понятия не имеют (и не должны), из какой программы вы их вызываете. Их поведение всегда одинаковое, откуда бы вы их не вызвали.
Может быть я что то пропустил. Если не затруднит, укажите первоисточник, где указано, что я не могу использовать функции в индикаторе. Или вернее их работоспособность никто не гарантирует.
Я и читаю с самого начала. Вчера ещё начал читать. И перед тем как написать о Copy*** проверил, значения не нулевые без ошибки. Потому и спрашиваю, а что важнее получить значение видимого или доступного бара?
Можно и так получить нормальное значение
Не спорю даже. Но я в цикле просчитываю бары, доступные индикатору на данный момент, исходя из значения rates_total.
Зачем мне данные одного конкретного бара.
Вопрос можно и с другой стороны поставить. Для чего индикатор просчитывает бары, которые даже не показываются на графике? Пусть тогда и режется rates_total с приходом каждого нового бара, и показывает всегда одно и тоже значение, скажем 10000. Но ведь нет, нельзя!. Как тогда индикатор отследит появление нового бара?! Но ведь решили обрезать вдруг отображение графика по MAXBARS, и ничего лучше не придумали, как запретить функциям видеть глубже в историю, чем MAXBARS. Но на индикаторе так просто не обрежешь, и функцию iBars(...) тоже видимо не изменишь по тем же причинам. Поэтому и оставили это половинчатое решение, по сути своей неправильное.
Так может же наплевать на обрезание отображения графика по MAXBARS. Вернуть как раньше было, чтобы каждый новый бар добавлялся к количеству, и функции показывали данные всех баров. Так намного правильнее, я считаю.
Может быть я что то пропустил. Если не затруднит, укажите первоисточник, где указано, что я не могу использовать функции в индикаторе. Или вернее их работоспособность никто не гарантирует.
Нигде не указано это, как и то, что Вами придумана гарантированность этих функций.
Например, на M1-чарте в индикаторе можете подождать, когда придет тик XX:XX:59 (конец минуты), и сделать Sleep на несколько секунд (приход цен нового бара).
Так вот Copy-функции будут выдавать данные только что сформированного бара. А вот индикатор (массивы + rates_total) не будет иметь понятия об этом: rates_total и массивы не изменятся до выхода из OnCalculate.
Т.е. получите, что Copy-функции и Bars имеют актуальную информацию, а входные индикатора - нет.
Вызов Copy-функции - это запуск сторонней микро-программы, которая обращается в текущую БД-котировок Терминала, берет оттуда данные и возвращает результат. Эта микро-программа не знает, из какой MQL-программы был инициирован ее вызов. Поскольку это сторонняя микропрограмма, то ее вызов всегда дорогой - занимает много времени.
Индикаторы никакими микропрограммами не оперируют. На входе только заранее подготовленные ценовые массивы и rates_total.
Нигде не указано это, как и то, что Вами придумана гарантированность этих функций.
Например, на M1-чарте в индикаторе можете подождать, когда придет тик XX:XX:59 (конец минуты), и сделать Sleep на несколько секунд (приход цен нового бара).
...
Sleep в индикаторах не работает. Какие же вы все молодцы. Один код в две строчки прочитать не может, другой Sleep ставит в индикатор.
Sleep в индикаторах не работает. Какие же вы все молодцы. Один код в две строчки прочитать не может, другой Sleep ставит в индикатор.
Контекст читайте.
сделать Sleep на несколько секунд (приход цен нового бара).
Плевать, каким техническим средством дожидаться нового бара.
Не без изъянов Документация, но лучше, чем ничего.
Т.е. получите, что Copy-функции и Bars имеют актуальную информацию, а входные индикатора - нет.
Вызов Copy-функции - это запуск сторонней микро-программы, которая обращается в текущую БД-котировок Терминала, берет оттуда данные и возвращает результат. Эта микро-программа не знает, из какой MQL-программы был инициирован ее вызов. Поскольку это сторонняя микропрограмма, то ее вызов всегда дорогой - занимает много времени.
Индикаторы никакими микропрограммами не оперируют. На входе только заранее подготовленные ценовые массивы и rates_total.
Я понимаю вас, и представляю в общих чертах принципы работы индикатора и функций. Но может мне и потребуется актуальная информация. Я уж не беру в расчёт ситуацию, когда нужно переписать индикатор 4-й версии с использованием этих функций.
Вопроса бы вообще не возникло, если бы в документации к функции iTime(...) и прочих было такое же примечание, как к Copy функциям.
Вопроса бы вообще не возникло, если бы в документации к функции iTime(...) и прочих было такое же примечание, как к Copy функциям.
Все эти функции (микропрограммы) содержат внутри себя вызов CopyRates. А потому имеют ровно те же ограничения, что и основная функция.
Не спорю даже. Но я в цикле просчитываю бары, доступные индикатору на данный момент, исходя из значения rates_total.
Зачем мне данные одного конкретного бара.
Вопрос можно и с другой стороны поставить. Для чего индикатор просчитывает бары, которые даже не показываются на графике? Пусть тогда и режется rates_total с приходом каждого нового бара, и показывает всегда одно и тоже значение, скажем 10000. Но ведь нет, нельзя!. Как тогда индикатор отследит появление нового бара?! Но ведь решили обрезать вдруг отображение графика по MAXBARS, и ничего лучше не придумали, как запретить функциям видеть глубже в историю, чем MAXBARS. Но на индикаторе так просто не обрежешь, и функцию iBars(...) тоже видимо не изменишь по тем же причинам. Поэтому и оставили это половинчатое решение, по сути своей неправильное.
Так может же наплевать на обрезание отображения графика по MAXBARS. Вернуть как раньше было, чтобы каждый новый бар добавлялся к количеству, и функции показывали данные всех баров. Так намного правильнее, я считаю.
Ничего не запретили. Пользуйтесь функциями Copy***
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления
Alexey Viktorov, 2023.02.07 12:19
А зачем больше MAXBARS?
Получает количество баров равное rates_total
а потом в цикле перебирайте массив… И зачем вам в индикаторе функции iTime() и ей подобные когда есть все массивы. Если нужны данные другого периода, так и надо обсуждать это, а не PERIOD_CURRENT
Ну не достаёт функция iTime куда нам надо… и флаг ей в руки, есть другие возможности.
Всё, на этом я покидаю это обсуждение. Удачи вам.
Ничего не запретили. Пользуйтесь функциями Copy***
а потом в цикле перебирайте массив… И зачем вам в индикаторе функции iTime() и ей подобные когда есть все массивы. Если нужны данные другого периода, так и надо обсуждать это, а не PERIOD_CURRENT
Ну не достаёт функция iTime куда нам надо… и флаг ей в руки, есть другие возможности.
Всё, на этом я покидаю это обсуждение. Удачи вам.
Алексей, почитайте документацию к функции Copy***, постом выше выложил скрин примечания.
Объясните мне, некоторые люди вообще читают форум, или просто так пишут, лишь бы написать чего...
Все эти функции (микропрограммы) содержат внутри себя вызов CopyRates. А потому имеют ровно те же ограничения, что и основная функция.
Вызов Copy-функции - это запуск сторонней микро-программы, которая обращается в текущую БД-котировок Терминала, берет оттуда данные и возвращает результат. Эта микро-программа не знает, из какой MQL-программы был инициирован ее вызов. Поскольку это сторонняя микропрограмма, то ее вызов всегда дорогой - занимает много времени.