Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1800
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Что такое DecreaseFactor в стандартном советнике МТ на машках?
Странно, сейчас кнопки есть. А нагромождение кода, потому что это черновик. В общем я уже сделал рабочий вариант, осталось последнее - удаление кнопок, тут опять эта херота началась: в ф-ции удаления не находит ни один из 4-ех объектов.
По клику на кнопке создаются все линии:
Если кнопка отжата - удаляем:
Какая дичь написана, вы уж извините.
А не нужно смотреть события. Они вообще в тестере не работают. Нужно смотреть состояние.
UPD. Не скромно конечно, но если бы хоть раз послушали мои подсказки, то давно бы уже всё сделали. Правильно и без костылей многоэтажных.
Но каждый сам выбирает пучину, в которую хочет обмакнуться окунуться.
Для использования дебага в тестере учись писать на MQL5. Там всё работает.
Никакого переименования объекта не существует. Думай об этом как о замене существующего объекта новым объектом.
Быть такого не может. Твой код напоминает беспорядочное нагромождение всего. Возможно, поэтому, у тебя и лаги возникают с кнопками. Как я тебе уже говорил, начни с простого. Не усложняй ничего. И постепенно усложняй когда простое начнет работать и ты будешь в нем уверен.
И как мне состояния посмотреть если они запускаются по событию (по клику)? Да но я пишу на mql4, это одно и тоже что сказать "учись писать на c# там дебаг работает".
"Правильно и без костылей многоэтажных. " - так скрытие объектов это и есть костыли.
В общем всё сделал, всё работает https://gist.github.com/satorkain/0cf7a8df8ec1f4b3191defd04c94a418
По клику на кнопке создаются все линии сразу, тут же скрываются и остётся только одна в зависимости от расположения панели кнопок. Далее линии скрываются/показываются в зависимости от расположения курсора относительно цены.
З.Ы
Если бы не кривой mql4, то не пришлось бы придумывать этот бред со скрытием объектов, всё должно было работать и в первый раз с удалением/переименованием объектов.
И как мне состояния посмотреть если они запускаются по событию (по клику)? Да но я пишу на mql4, это одно и тоже что сказать "учись писать на c# там дебаг работает".
"Правильно и без костылей многоэтажных. " - так скрытие объектов это и есть костыли.
В общем всё сделал, всё работает https://gist.github.com/satorkain/0cf7a8df8ec1f4b3191defd04c94a418
По клику на кнопке создаются все линии сразу, тут же скрываются и остётся только одна в зависимости от расположения панели кнопок. Далее линии скрываются/показываются в зависимости от расположения курсора относительно цены.
З.Ы
Если бы не кривой mql4, то не пришлось бы придумывать этот бред со скрытием объектов, всё должно было работать и в первый раз с удалением/переименованием объектов.
Сокрытие объекта - это как раз-таки рекомендованный разработчиком метод. И есть для этого специальное свойство. Чтобы посмотреть состояние, нужно посмотреть на свойство кнопки "Состояние".
Кривое тут - ваша логика и подмена понятий - вы за костыль принимаете рекомендованные разработчиком средства, а постоянное прожорливое создание/удаление объекта принимаете за чистый код, но именно он и является лютым костылём в обход рекомендуемого быстрого способа.
Кстати, чтобы быстро сделать объект поверх всех остальных, нужно сделать его невидимым, и сразу же видимым - это переопределит его расположение в списке объектов, и он станет наверху.
ЗЫ. И даже там, на гите, вы опубликовали код на троечку с минусом. Абсолютно неустойчивый к ошибкам. Стоит только одной линии не быть созданной, всё у вас рухнет. Это сразу же в глаза бросилось. Линии создаёте в обработчике событий - зачем? OnInit() вам для чего? Создали, проверили успешность - выставили флаг и скрыли. В OnDeinit() удалили созданные своей программой объекты. Для этого ещё и префикс имени нужен.
В обработчике событий только показываете и скрываете - никаких построений не должно быть. Для вашего случая - точно.
Мне было бы стыдно на гите такое публиковать в публичном доступе. Но это мне.
А вам? Нормально, что этим могут воспользоваться люди?
Сокрытие объекта - это как раз-таки рекомендованный разработчиком метод. И есть для этого специальное свойство. Чтобы посмотреть состояние, нужно посмотреть на свойство кнопки "Состояние".
Кривое тут - ваша логика и подмена понятий - вы за костыль принимаете рекомендованные разработчиком средства, а постоянное прожорливое создание/удаление объекта принимаете за чистый код, но именно он и является лютым костылём в обход рекомендуемого быстрого способа.
Кстати, чтобы быстро сделать объект поверх всех остальных, нужно сделать его невидимым, и сразу же видимым - это переопределит его расположение в списке объектов, и он станет наверху.
ЗЫ. И даже там, на гите, вы опубликовали код на троечку с минусом. Абсолютно неустойчивый к ошибкам. Стоит только одной линии не быть созданной, всё у вас рухнет. Это сразу же в глаза бросилось. Линии создаёте в обработчике событий - зачем? OnInit() вам для чего? Создали, проверили успешность - выставили флаг и скрыли. В OnDeinit() удалили созданные своей программой объекты. Для этого ещё и префикс имени нужен.
В обработчике событий только показываете и скрываете - никаких построений не должно быть. Для вашего случая - точно.
Мне было бы стыдно на гите такое публиковать в публичном доступе. Но это мне.
А вам? Нормально, что этим могут воспользоваться люди?
Прожорливость создавать по мере необходимости 1 линию из 4? :) А что если линий 200? Экономично будет их создать по вашей логике все сразу? А как было задумано разработчиками, это известно только им самим, причем задумано весьма не интуитивно. Как бы ничего невероятного или нелогичного не требовалось. Ну вот откуда мне было знать, что работать с объектами надо только так и не как иначе? Может быть из учебника по mql4? Сомневаюсь что там этот момент объясняется.
Оно хотя бы работает как было задумано :) Там в названии в скобочках (public) то есть он ещё не полный, но да, проверки на создание объектов нет, исправим. И я выложил на гите только потому что не мог вспомнить paste bin. Стыдится? Гит в том числе и был придуман для того, чтобы люди учились, обменивались опытом, делились кодом, рабочим или нет, без разницы, любой может сделать форк и внести изменения если его что-то не устраивает.
Вот пожалуйста, 250 объектов создали и храним их в памяти на протяжении всей работы эксперта. Ну ладно, спасибо, буду знать. Про это я и говорю "не интуитивная логика". В учебнике например про OnInit() можно вычитать только, что ф-ция обрабатывается при инициализации советника/индикатора.
Открою тебе один секрет. Ты можешь создать хоть 1000 объектов и больше, если у тебя не "калькулятор". Но это под силу и ему. Калькулятор, это комп. с ОЗУ 4GB. Всё что ниже, это "бабушкины счёты"... :) Так что создавай объекты хоть все сразу, хоть по одному. Без разницы. Но без фанатизма.
Таким образом, всё у всех получается, если делать с умом!...
Прожорливость создавать по мере необходимости 1 линию из 4? :) А что если линий 200? Экономично будет их создать по вашей логике все сразу? А как было задумано разработчиками, это известно только им самим, причем задумано весьма не интуитивно. Как бы ничего невероятного или нелогичного не требовалось. Ну вот откуда мне было знать, что работать с объектами надо только так и не как иначе? Может быть из учебника по mql4? Сомневаюсь что там этот момент объясняется.
Оно хотя бы работает как было задумано :) Там в названии в скобочках (public) то есть он ещё не полный, но да, проверки на создание объектов нет, исправим. И я выложил на гите только потому что не мог вспомнить paste bin. Стыдится? Гит в том числе и был придуман для того, чтобы люди учились, обменивались опытом, делились кодом, рабочим или нет, без разницы, любой может сделать форк и внести изменения если его что-то не устраивает.
Вот пожалуйста, 250 объектов создали и храним их в памяти на протяжении всей работы эксперта. Ну ладно, спасибо, буду знать. Про это я и говорю "не интуитивная логика". В учебнике например про OnInit() можно вычитать только, что ф-ция обрабатывается при инициализации советника/индикатора.
Можно создать одновременно объектов столько, сколько нужно. Пока МТ был не совсем развит в плане создания отрисовки индикаторных буферов, приходилось рисовать 400 видимых свечей трендовыми линиями, на одну свечу нужно 5 линий, 400*5=2000, плюс по одному объекту на каждую и прочие. Итого получалось около 2500 объектов. Работало без тупизма.
Вы не совсем понимаете логику работы с объектами, но спорить умеете. Лучше делать наоборот.
Прожорливость создавать по мере необходимости 1 линию из 4? :) А что если линий 200? Экономично будет их создать по вашей логике все сразу? А как было задумано разработчиками, это известно только им самим, причем задумано весьма не интуитивно. Как бы ничего невероятного или нелогичного не требовалось. Ну вот откуда мне было знать, что работать с объектами надо только так и не как иначе? Может быть из учебника по mql4? Сомневаюсь что там этот момент объясняется.
Оно хотя бы работает как было задумано :) Там в названии в скобочках (public) то есть он ещё не полный, но да, проверки на создание объектов нет, исправим. И я выложил на гите только потому что не мог вспомнить paste bin. Стыдится? Гит в том числе и был придуман для того, чтобы люди учились, обменивались опытом, делились кодом, рабочим или нет, без разницы, любой может сделать форк и внести изменения если его что-то не устраивает.
Вот пожалуйста, 250 объектов создали и храним их в памяти на протяжении всей работы эксперта. Ну ладно, спасибо, буду знать. Про это я и говорю "не интуитивная логика". В учебнике например про OnInit() можно вычитать только, что ф-ция обрабатывается при инициализации советника/индикатора.
Добро. Попробую по-русски простыми словами.
Вы собрались на рыбалку.
А можно сразу же из кладовки (OnInit) взять всё необходимое для рыбалки, порыбачить без беготни и, вернувшись домой, сложить всё в кладовку и холодильник (OnDeinit).
Знать вы могли об этом здесь на форуме. Просто иногда нужно слушать и слышать что вам говорят.
А то получается, вопрос задали, получили ответ, сказали - фигня, и делаете так как вам кажется.
Сначала нужно вопрос обдумать, поспрашивать, а уже потом браться за редактор.
Вы в курсе, что в программировании самое простое - это печатать код? А львиную долю разработки занимает обдумывание логики.
Извините, что поднимаю вопрос второй раз.
но есть проблема. которую пока не могу решить, а именно
открытие серии ордеров (один за другим) на одной свече.
Мне нужно, чтобы советник не мог открыть новый ордер на той же самой свече.
думал решить через Sleep() но Макар сказал что процесс лучше не останавливать.
код сейчас выглядит так:
Мне нужно, чтобы советник не мог открыть новый ордер на той же самой свече.