Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Странный подход к жизни. Есть некая данность. Вам хочется, чтобы было по-другому. И что? Вы в силах создать свой торговый терминал и свой язык типа MQL?
Да не подход странный. Мне надо что бы данные всегда были при инициализации индикатора, а то иногда бывает что количество свечей = 0. А то ведь иногда только при выполнении функции START() появляются данные.
По делу. Вам, вижу, ну совсем не хочется отказываться совсем от init() (я исключительно про индикаторы сейчас) - пардон за тавтологию, но здесь "совсем" несут разные смысловые нагрузки - т.е. это даже не тавтология.))) Элегантность по-вашему - это заставить init() таки работать как вам хочется, а не как есть. Согласен. Значит, нужно напрягать разработчиков и ждать результата (вот выпустят они MQL5 и сразу займутся этой проблемой!)))
Более короткого (элегантного) решения в практическом плане, чем заменить ф-ю init () на пользовательскую, у меня нет. Да. Для этого нужно вводить аж 1 (одну) переменную и вызывать ф-ю явно - ну не получается ее выдрессировать запускаться как init() по умолчанию при запуске индюка!)))
Менее элегантно (что уже предлагалось здесь) это просто вынести из init() неработающие участки в ту же отдельную ф-ю. Тогда init() будет по прежнему радовать глаз своим присутствием в коде. Говорят, что она таки работает быстрее, чем пользовательская. Хотя какое это имеет значение - выполнение ее однократно, время исполнения ничтожно по сранению с start(). Хоть при тестировании, хоть (и тем более) в реале.
Кстати! Инициализация с вызовом через start() упрощает определение номера подокна индюка. В init() в лоб там его не получишь. Но это так... к слову.
Svinozavr писал(а) >>
А может, так и было задумано? Ну, типа, стат. переменные при смене тайм-фрейма не переинициализируются спецом. Хотя зачем?
Ну, скажем так, это негативная сторона того, что было задумано.
З.Ы. В индикаторах такого не происходит.
Да, у индикаторов такой проблемы нету, у них другая схема расположения в памяти.
Кстати. Бары совершенно корректно определяются в init() эксперта при смене тайм-фрейма.
А при запуске терминала проверяли?
А вообще, кто забыл, речь шла изначально про индикаторы.)))
Ну лучше перебдеть :) .
Но если объявить эту переменную как extern, то все канает.
Угу, но инкапсуляция.
Ну, скажем так, это негативная сторона того, что было задумано.
А что было задумано? В чем фишка-то?
А при запуске терминала проверяли?
Мы про смену тайм-фреймов или про запуск?
Ну лучше перебдеть :) .
Это да. Я даже тему сделал про этот баг вот только-что. Может, кто чего пояснит...
Поясните. Я всего как с полгода назад MQL в MetaEditor'е увидел и не в курсе.
А что было задумано? В чем фишка-то?
Точно не помню. Оптимизация чего-то. Искать надоть.
Мы про смену тайм-фреймов или про запуск?
Мы про индикаторы. У них есть функция инит. Если индикатор повешен на график, то при запуске терминала код в ините имеет свойство работать не всегда так, как нужно.
Это к слову о корректном обращении к истории.
Дык внутренние настройки выносятся наружу, т.е. они видимы и могут модифицироваться пользователем -- явное нарушение инкапсуляции.
Точно не помню. Оптимизация чего-то. Искать надоть.
Хрен с ним. Забудьте.
Мы про индикаторы. У них есть функция инит. Если индикатор повешен на график, то при запуске терминала код в ините имеет свойство работать не всегда так, как нужно.
Это к слову о корректном обращении к истории.
Дык внутренние настройки выносятся наружу, т.е. они видимы и могут модифицироваться пользователем -- явное нарушение инкапсуляции.
А, это... Ну да, конечно. Через анус приходится. А что делать?)))
А вообще, "где ты ничего не можешь, ты не должен ничего хотеть". По латыни звучит красивей, но уже не помню. Я к тому, что есть данность в виде Метатрейдера, у которого есть баги, которые ты исправить не можешь, потому как не разработчик. Отсюда, рассуждать об этом - праздное занятие. Чего-то не работает? Фигня! Сделаем, не заморачиваясь, обходной маневр в своем коде.
Вот не загрузил бы топикстартер этим ...))), не потратил бы стока времени - ей-богу, сутки уже обсуждаем! ))) Работает и работает, и хрен с ним.
Хотя кой-чего интересного всплыло.
Bars содержит данные ТЕКУЩЕГО инструмента на ТЕКУЩЕМ тайм-фрейме, в отличии от iBars(), которая вернет данные ЛЮБОГО инструмента на ЛЮБОМ тайм-фрейме. Вот и все разница! А мне надо что бы функция INIT() выполнилась после получения данных терминалом! Если данных нет, то и Bars и iBars() вернут НОЛЬ!
Чего вы раскричались то? )))
Насчет отличий Bars от iBars ответ неверный. Об этом почему то умолчали в хэлпере, но где-то от разработчиков проскакивало, что данные массивов-таймсерий всегда содержат свежие данные в то время как их "младшие сестры" (Bid, Ask, Open, High, Low, Close) обновляются только с новым тиком или по RefreshRates.
Ну а насчет выполнения init после получения данных - вставьте указанную конструкцию в самом начале init и только после отработки конструкции выполняйте необходимые вам действия. Всего то. За вас это все равно делать никто не будет. Поймите одну простую вещь - информации по разным символам много, таймфрейм тоже не один. Если ежесекундно МТ будет полностью обновлять всю информацию, которая в таком объеме пользователю не нужна, то на саму торговлю и времени то не останется. От вас же всего лишь требуется запросить необходимую информацию и немного подождать, пока она будет формироваться.
где-то от разработчиков проскакивало, что данные массивов-таймсерий всегда содержат свежие данные в то время как их "младшие сестры" (Bid, Ask, Open, High, Low, Close) обновляются только с новым тиком или по RefreshRates.
Интересно. И каким же образом массивы-таймсерии получат свежие данные если тика не было? Функция start() ведь не запускалась. Каким же образом iBars или MarketInfo(Symbol(), MODE_BID) получат новое значение, если они находятся внутри start-а?
Интересно. И каким же образом массивы-таймсерии получат свежие данные если тика не было? Функция start() ведь не запускалась. Каким же образом iBars или MarketInfo(Symbol(), MODE_BID) получат новое значение, если они находятся внутри start-а?
Вообще-то речь идет о функции init, которой тика не требуется. Причем тут start?