Здравствуйте, создал изначально нажатую кнопку button с показом содержимого в Oninit .
Если отжать кнопку и сменить ТФ содержимое заново отобразится на экране.
В документации сказано что при смене ТФ oninit по новой загрузит.
Вопрос, где изначально нужно создать кнопку и содержимое в моем случае?
Спасибо
не удаляйте кнопку в OnDeinit или в начале OnInit. Не пересоздавайте если она уже есть.
она сохраняется в шаблоне. Вместе со всеми своими property и состояниями (нажата/отпущена)
при первом запуске индикатора на чарт - кнопки в шаблоне нет, вы её создаёте; при следующих - она уже есть, вы её читаете.
не удаляйте кнопку в OnDeinit или в начале OnInit. Не пересоздавайте если она уже есть.
она сохраняется в шаблоне. Вместе со всеми своими property и состояниями (нажата/отпущена)
при первом запуске индикатора на чарт - кнопки в шаблоне нет, вы её создаёте; при следующих - она уже есть, вы её читаете.
В OnDeinit и так не удаляю
Удаkение происходит только при повторном нажатии на кнопку тобишь в OncharEvent
Далее, и так проверяю есть ли объект, если нет - создаю
2-ю и 3-ю строчку не понял от слова совсем.
Если вы про вариант со скрытия с поля видимости то он не подходит (хоть и работает)
ObjectSetInteger(0,"primer",OBJPROP_YDISTANCE,7000);
В OnDeinit и так не удаляю
Удаkение происходит только при повторном нажатии на кнопку тобишь в OncharEvent
Далее, и так проверяю есть ли объект, если нет - создаю
2-ю и 3-ю строчку не понял от слова совсем.
Если вы про вариант со скрытия с поля видимости то он не подходит (хоть и работает)
Обрати внимание на
OBJPROP_TIMEFRAMES | Видимость объекта на таймфреймах | набор флагов flags |
Это гораздо полезнее чем перемещение за пределы монитора.
- docs.mql4.com
Обрати внимание на
OBJPROP_TIMEFRAMES | Видимость объекта на таймфреймах | набор флагов flags |
Это гораздо полезнее чем перемещение за пределы монитора.
Я прощу прощения, немного не понял что вы советуете, по нажатию на кнопку у меня выводятся примерно 20 кнопок, 20 ценовых меток и подобное
вы советуете мне поставить на всех объектах - невидимость при всех ТФ?
Пожалуйста могли бы вы чуточку больше объяснить
Я отжимаю кнопку, меняю ТФ а у меня она снова нажата и показывается содержимое) хотя фиксацию положения сделал через глобальную переменную
Как исправить?
#property copyright "Copyright 2022" #property link "https://www.ya.biz" #property version "1.00" #property strict #property indicator_chart_window int nazat = 0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { PutButton("BUTON1",33,33,"BUTON1", true); if(ObjectFind("BUTON2")==0) { if (nazat == 1) { PutButton("BUTON2",33,103,"BUTON2", true); } } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void PutButton(string name,int x,int y,string text,bool state) { ObjectCreate(0,name,OBJ_BUTTON,0,0,0); //--- установим координаты кнопки ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); //--- установим размер кнопки ObjectSetInteger(0,name,OBJPROP_XSIZE,80); ObjectSetInteger(0,name,OBJPROP_YSIZE,30); //--- установим угол графика, относительно которого будут определяться координаты точки ObjectSetInteger(0,name,OBJPROP_CORNER,2); //--- установим текст ObjectSetString(0,name,OBJPROP_TEXT,text); //--- установим шрифт текста ObjectSetString(0,name,OBJPROP_FONT,"Arial"); //--- установим размер шрифта ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12); //--- установим цвет текста ObjectSetInteger(0,name,OBJPROP_COLOR,Red); //--- установим цвет фона ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White); //--- установим цвет границы ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue); //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(0,name,OBJPROP_HIDDEN,0); ObjectSetInteger(0,name,OBJPROP_STATE,state); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // идентификатор события const long& lparam, // параметр события типа long const double& dparam, // параметр события типа double const string& sparam // параметр события типа string ) { if(ObjectGetInteger(0,"BUTON1",OBJPROP_STATE)==true) { nazat = 1; PutButton("BUTON2",33,103,"BUTON2", false); } else { nazat = 0; ObjectDelete("BUTON2"); } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+
я-же написал выше - ПРОВЕРЯМ наличие кнопки.
И только если её нет - создаём и оформляем. Вы оформляете в любом случае
Спасибо за указание) Сделал - работает.
Если не ошибаюсь вы или Alexey Viktorov писали в прошлых постах что проверка наличия объекта, как то тормозит индикатор или же сам мт4
имеется ввиду что если у меня 30 кнопок и объектов что использовать такую проверку не лучшая идея. Если же это всё же так, то как еще можно сделать?
Спасибо за указание) Сделал - работает.
Если не ошибаюсь вы или Alexey Viktorov писали в прошлых постах что проверка наличия объекта, как то тормозит индикатор или же сам мт4
имеется ввиду что если у меня 30 кнопок и объектов что использовать такую проверку не лучшая идея. Если же это всё же так, то как еще можно сделать?
"скорость нужна при ловле блох" :-)
внутри OnTick,OnChartEvent,OnCalculate - да, там нужно минимизировать использование таких проверок. Там чем раньше функция завершится тем лучше работает итоговый советник. И в них вы априори знаете есть такой объёкт или нет. Вы его можете запомнить
а в OnInit - там другие требования и обстановка. Вам там не важна скорость, важнее надёжность
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, создал изначально нажатую кнопку button с показом содержимого в Oninit .
Если отжать кнопку и сменить ТФ содержимое заново отобразится на экране.
В документации сказано что при смене ТФ oninit по новой загрузит.
Вопрос, где изначально нужно создать кнопку и содержимое в моем случае?
Спасибо