Форум » Индикаторы. » Неясности с функцией start() » Ответить

Неясности с функцией start()

babay: Здравствуйте. Возникла неясность при программировании пользовательского индикатора. Раньше этим не занимался (индикаторами), поэтому взял, Сергей, в подспорье Ваш учебник и сразу озадачился: Согласно http://book.mql4.com/ru/programm/special [quote] ... Специальная функция start(). ... ... В пользовательских индикаторах специальная функция start() вызывается (и исполняется) сразу после прихода очередного тика, сразу после прикрепления индикатора к графику, при изменении размеров окна финансового инструмента, при переходе пользователем от одного окна финансового инструмента к другому, при открытии клиентского терминала (если в предыдущем сеансе работы индикатор был прикреплен к графику) а также после смены символа или периода текущего графика вне зависимости от поступления новых котировок. ... ... [/quote] Если свести все это в список, то получатся следующие события, приводящие (или, которые, по идее, должны бы приводить) к вызову ф-ции start(): 1. Поступление очередного тика 2. Прикрепление индикатора к графику 3. Изменение размеров окна 4. Переход пользователем от одного окна финансового инструмента к другому 5. Открытие клиентского терминала 6. Смена символа 7. Смена периода текущего графика плюс не упомянуто 8. Изменение вертикального или горизонтального масштабов 9. Добавление отдельного окна любого лругого индикатора 10. Команда "Обновление" через меню "Графики" или правую кнопку 11. Перекомпиляция У меня не получилось зафиксировать ее вызов при обстоятельствах, выделенных жирным. Да и п.4 требует пояснения, что имеется ввиду под переходом? Касается это любой смены активного окна или же именно от(к) окна(у) с индикатором? Код для проверки взял очень простой: [quote][pre2] #property indicator_chart_window string sFunc; int i; int init() {fReport("init(); ");return(0);} int deinit() {fReport("deinit(); ");return(0);} int start() {fReport("start(); ");return(0);} void fReport(string psSpecFunc) { i++; Print(psSpecFunc, i, ": ", WindowPriceMin(), " ... ", WindowPriceMax()); } [/pre2][/quote] Мне все это нужно для того, чтобы позиционировать индикатор на некоем расстоянии от нижней границы окна инструмента. Сергей, будьте добры, прокомментируйте, а то сумбур какой-то в голове :) P.S. Если кто-то вдруг подскажет индикатор суб-разделителей периодов, буду очень признателен. Ну, типа, на ТФ M1 нанести шкалу с 15-, 30- и 60-минутными делениями разной величины. Для читабельности. .

Ответов - 3

SK: На момент, когда это было написано, всё написанное работало. Причём, этот список был избыточным. Специальным функциям уделялось особое внимание. Всё написанное было опробовано и и согласовано с разработчиками. Так получилось, что учебник стал на тот момент наиболее полным источником свойств спец. функций. Эта ситуация сохраняется и до сих пор. Посмотрите, например, в MeteEditor-е раздел Справочник MQL4 - Основы языка - Функции - Специальные функции. Там не указано и половины свойств спец. функций. С тех пор появилось много новых билдов. Я не отслеживаю изменения, касающиеся специальных функций. Могу только сказать, что вопрос поднимался неоднократно. Например, Возникали проблемы с вызовом спец. функций при переключении между счетами - при неустановленных обстоятельствах не вызывались некоторые спец.функции; в других случаях в зацикленном start() становятся доступны переменные окружения нового счёта (!) в то время, когда счёт ещё старый. Кстати, эта ситуация, насколько я знаю, так и не исправлена. На ранней стадии запуска проекта МТ4 разработчики живо реагировали на все замечания и ошибки, исправляли их. В последнее время МТ4 потерял актуальность. По этой причине можно предположить, что некоторые ошибки уже не будут исправляться. МТ5 будет иметь принципиально другую архитектуру ещё и потому, что некоторые ошибки МТ4 носят концептуальный характер. Так случилось, например, с графикой. Давно известно, что все граф. объекты "съезжают" при изменени таймфрейма. Однако, исправить это в МТ4 не представляется возможным. -- Я уже некоторое время не пишу ничего серьёзного на MQL4. Жду МТ5. Однако, в случае необходимости я проверяю нужное мне свойство или принятое правило и пишу код согласно текущим условиям :) Это лучшее, что я могу посоветовать в подобной ситуации.

babay: Да. К сожалению ситуация, описанная Вами, имеет место, как в непонятках, так и в отношении к ним (вернее - пренебрежении) разработчиков... Я руководствуюсь именно высказанным Вами в последнем абзаце. Но, увы, не писАть я не могу - торгую плотно, каждый день, и постоянно возникают потребности в новом функционале. Да и алгоритмы при этом отрабатываются. В моем случае (т.е. при недостатке опыта практического написания) это весьма полезно. Жаль, что по MT5 нет информации. Во-первых просто любопытно. Во-вторых - очень тревожит процесс перехода.

SK: babay пишет: .. торгую плотно, каждый день, и постоянно возникают потребности в новом функционале. Да и алгоритмы при этом отрабатываются. Вы используете AutoGraf 4?




полная версия страницы