- Шаблоны и профили - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ
- Навигатор - Рабочая область
- Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы
Здравствуйте, уважаемый программисты буду краток, прошу вас помочь с кодом, при нажатии клавиши появляется число атр при нажатии 2-й клавиши оно удаляется, не знаю как заставить удаляться это число атр при удалении графика, т.е если сейчас добавить в OnDeinit код: ObjectDelete(0,"L"); sтогда образуется новая проблема, при смене ТФ число не сохраняется!, Прошу помочь знающих людей! Спасибо
Добавить в OnDeinit() код:
void OnDeinit(const int reason) { if(reason != 3) ObjectDelete(0,"L"); }
Описание здесь
- www.mql5.com
оххххх, спасибо вам огромное я 2 месяца а то и более искал ка решить эту проблему, емае, мне не верится!
я писал только это:
void OnDeinit(const int reason) { ObjectDelete(0,"L"); }
Подскажите пожалуйста что значит:
if(reason != 3)
Спасибо еще раз огромное!!!! Блин неужели!!! Спасибо!!!!!
1)Если у меня много чего нужно удалять, то везде использовать if(reason != 3) или можно как то объеденить это все?
2) как правильно выглядит блок удаления?
Спасибо
void OnDeinit(const int reason) { if(reason != 3) { ObjectDelete("Баываыва"); ObjectDelete("ываываыва"); ObjectDelete("ываываываыва"); ObjectDelete("ываываыва"); ............. } }
1)Если у меня много чего нужно удалять, то везде использовать if(reason != 3) или можно как то объеденить это все?
2) как правильно выглядит блок удаления?
Спасибо
Если объектов много, то программа должна их всех идентифицировать как свои. Для этого нужно, чтобы в имени каждого объекта был один и тот же набор символов, например - имя программы.
Значит нужно иметь переменную, объявленную на глобальном уровне, например string prefix; И в эту переменную нужно вписать имя программы:
string prefix=MQLInfoString(MQL_PROGRAM_NAME)+"_";
Далее, в блоке, в котором вы задаёте имена переменным, нужно к этому префиксу добавить имя переменной, в вашем случае - как пример - символ "L":
string object_name=prefix+"L";
Таким образом, если для всех имён объектов так задавать в программе имена, то перед именем каждой вашей переменной будет одинаковый набор символов - в данном примере - название программы.
Если программа называется "Test", то имя переменной будет "Test_L"
Ну и в OnDeinit() следует удалить все объекты, содержащие префикс:
if(reason!=3) ObjectsDeleteAll(0,prefix);
Такая строка удалит (в случае, если причиной деинициализации была не смена таймфрейма или символа графика) все объекты любого типа, в имени которой есть содержание переменной prefix, на том графике, на котором запущена программа. Удалит подходящие объекты как с главного окна, так и со всех подокон, расположенных на главном окне.
"Ну, вы, блин, даёте" (с)
"Вписать в идентификацию объекта имя программы" -- а если на графике стоит несколько одинаковых индикаторов с одинаковым именем программы (что очень распространённое явление), но с разными настройками?
-- а если мя программы в стиле "не смог дочитать до конца, сильно длинное" -- и из-за этого не хватит длины на действительно значащие данные, характеризующие сам объект.
Написано же, например...
1. Все случаи в одном ответе не предусмотреть.
2. Все возможные случаи должен обдумывать программист, а не тот, кто подсказывает направление действий.
Знаешь что предложить абсолютно универсальное, предлагай, а деструктивность - зачем?"Ну, вы, блин, даёте" (с)
"Вписать в идентификацию объекта имя программы" -- а если на графике стоит несколько одинаковых индикаторов с одинаковым именем программы (что очень распространённое явление), но с разными настройками?
-- а если мя программы в стиле "не смог дочитать до конца, сильно длинное" -- и из-за этого не хватит длины на действительно значащие данные, характеризующие сам объект.
Для таких случаев есть номер подокна, с которого нужно удалить объекты. Я про это тоже писал выше. Но ты зачем-то упустил сей момент моего объяснения - подколоть хотел?
Так мимо ;)
зачем видеть "деструктивность" там где нет и не было?
я пояснил (да, с иронией) все негативные стороны твоего предложения -- как раз всё очень конструктивно.
Так а где конструктив-то?
Вот если бы ты предложил использовать для идентификации подокна графика такую форму вызова: ObjectsDeleteAll(0,prefix,sub_window);, о которой я намекнул в описании что сделает функция, но не стал расписывать, то это был бы конструктив. А так, как написал ты - выглядит попыткой показать себя, а не помочь человеку, которому помощь нужна, а не твой бесконструктивный пост.
Подозреваю, что дальше ты начнёшь высмеивать, что я не показал как номер подокна найти в индикаторе. Оставляю для твоего конструктивного поста ;)
"как всё запущено" (с) -- удалил свои "бесконструктивные посты" -- пусть будут только твои посты -- самые-самые-самые конструктивные.
Ну ты же написал человеку, что НЕЛЬЗЯ использовать проверку причины деинициализации - это что, конструктив? Ты пояснил это хоть как-то? Я не видел пояснения, а лишь твоё в этом утверждение, и посты свои ты удалил - зачем? Обсудили бы и развеяли твой страх перед проверкой причины деинициализации, которую многие используют без страха, что запутаются и всё у них рухнет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования