Да, есть эффект. Сложно сказать в чём дело, возможно буфер всё же рассчитывается, но отображение до прихода тика не делается, нужно в рабочее время проверять. Насчёт Bars и других предопределённых переменных я всё же рекомендовал бы не использовать их в init().
lna01:
Да, есть эффект. Сложно сказать в чём дело, возможно буфер всё
же рассчитывается, но отображение до прихода тика не делается,
нужно в рабочее время проверять. Насчёт Bars и других предопределённых
переменных я всё же рекомендовал бы не использовать их в init().
Ну конечно предопределенные переменные нельзя использовать в init(), но значение Bars, как мне кажется, должно
расчитываться без проблем в любой момент времени (не уверен,
но мне так кажется).
Renat:
Задайте полный, точный и однозначный вопрос, пожалуйста.
Берем тестовый индикатор, который прикреплен ниже. Компилируем
его в Метаэдиторе. Затем, добавляем его на открытый график и
.... ничего не видим в окне индикатора. Теперь, сново откомпилируйте
индикатор не снимая его с графика и он заработает как надо.
Вопрос: это особенность работы терминала, или глюк?
В init доступна не вся информация об рыночном окружении. Поэтому
в init не нужно заниматься рыночными расчетами.
Индикатор некорректный, так как в нем нет заполнения данными.
В init даже массив ExtMapBuffer (Вы ведь его просто описали, но не выделили
под него память - выделением индикаторного буфера занимается
сама подсистема MQL4) может быть не распределен (он перераспределяется
в момент необходимости расчетов). Моментом необходимости расчетов
индикатора является вызов функции start.
Ваш индикатор вообще содержит только одно значение, которое
не отрисовывается, так как это просто точка без продолжений.
Нормальный индикатор должен содержать примерно такой код (заполняющий
всю область индикатора):
Хорошо я понял все с init(). Можно было бы об этом поподробней в
хелпе рассказать. Заодно и дать определение, какие действия
являются рыночными расчетами, чтобы знать.
Вот такая конструкция индикатора тоже не работает, что здесь
не так?:
Спасибо за ответы. Я не просто так спрашиваю, ведь любой, кто
первый раз пишет индикатор наткнется на эти грабли, потому что
о них нет информации в хелпе.
Кстати в хелпе так и сказано, что функция Start() вызывается только
по приходу новой котировки. Тогда возникает вопрос, а как же
индикатор нанесенный на график будет пересчитан для уже имеющегося
графика в офлайн режиме, если котировки больше не поступают?
Кстати в хелпе так и сказано, что функция Start() вызывается только по приходу новой котировки. Тогда возникает вопрос, а как же индикатор нанесенный на график будет пересчитан для уже имеющегося графика в офлайн режиме, если котировки больше не поступают?
У индикатора start() вызывается также при первом наложении и при подгрузке/импорте данных.
Renat и все остальные, спасибо, что уделили время для разъяснений.
Все оказалось до банального просто. Все дело в том, что после перекомпилляции индикатора, который находится на графике, не происходит вызова функции start(). Она происходит только по приходу новой котировки или подгрузке истории. У меня, мой простейший индикатор, работал на некоторых графиках, а на некоторых нет. Теперь понимаю, что он работал на тех графиках, которые подгружали историю (дело было в выходной, когда новые котировки не поступали). На остальных же он работал только после удаления его и наложении снова (тут понятно, функция start() запускалось при наложении).
Поиски истины запутали меня настолько, что привели к не верным выводам. Плюс, желание выпендрится перед публикой в том, что обнаружен очередной глюк и были причиной создания этой ветки.
Да, есть эффект. Сложно сказать в чём дело, возможно буфер всё же рассчитывается, но отображение до прихода тика не делается, нужно в рабочее время проверять. Насчёт Bars и других предопределённых переменных я всё же рекомендовал бы не использовать их в init().
Ну конечно предопределенные переменные нельзя использовать в init(), но значение Bars, как мне кажется, должно расчитываться без проблем в любой момент времени (не уверен, но мне так кажется).
Эффект есть, подождем ответов разработчиков.
Этот момент многократно обсуждался в форуме.
В init доступна не вся информация об рыночном окружении. Поэтому в init не нужно заниматься рыночными расчетами.
Этот момент многократно обсуждался в форуме.
С этим все понятно.
Что скажете по существу вопроса?
Задайте полный, точный и однозначный вопрос, пожалуйста.
Берем тестовый индикатор, который прикреплен ниже. Компилируем его в Метаэдиторе. Затем, добавляем его на открытый график и .... ничего не видим в окне индикатора. Теперь, сново откомпилируйте индикатор не снимая его с графика и он заработает как надо.
Вопрос: это особенность работы терминала, или глюк?
тестовый индикатор:
Спасибо.Ваш индикатор вообще содержит только одно значение, которое не отрисовывается, так как это просто точка без продолжений. Нормальный индикатор должен содержать примерно такой код (заполняющий всю область индикатора):
Хорошо я понял все с init(). Можно было бы об этом поподробней в хелпе рассказать. Заодно и дать определение, какие действия являются рыночными расчетами, чтобы знать.
Вот такая конструкция индикатора тоже не работает, что здесь не так?:
Спасибо за ответы. Я не просто так спрашиваю, ведь любой, кто первый раз пишет индикатор наткнется на эти грабли, потому что о них нет информации в хелпе.
Кстати в хелпе так и сказано, что функция Start() вызывается только по приходу новой котировки. Тогда возникает вопрос, а как же индикатор нанесенный на график будет пересчитан для уже имеющегося графика в офлайн режиме, если котировки больше не поступают?
Спасибо.
Как и требовалось - горизонтальная линия со значением 5.
А если изменить индикатор вот так, то получится синусоида:
Renat и все остальные, спасибо, что уделили время для разъяснений.
Все оказалось до банального просто. Все дело в том, что после перекомпилляции индикатора, который находится на графике, не происходит вызова функции start(). Она происходит только по приходу новой котировки или подгрузке истории. У меня, мой простейший индикатор, работал на некоторых графиках, а на некоторых нет. Теперь понимаю, что он работал на тех графиках, которые подгружали историю (дело было в выходной, когда новые котировки не поступали). На остальных же он работал только после удаления его и наложении снова (тут понятно, функция start() запускалось при наложении).
Поиски истины запутали меня настолько, что привели к не верным выводам. Плюс, желание выпендрится перед публикой в том, что обнаружен очередной глюк и были причиной создания этой ветки.
Право, это было крайне поучительно.
Спасибо всем, кто откликнулся в этой ветке.
Тему можно закрыть.