Возможно ли сохранить положение кнопки посредством mq4 ??? - страница 3

 
//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018"
#property link      "http://www.ya.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window


input int Shift=0;
int atr=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(reason==REASON_REMOVE)
     {
      ObjectDelete("L");
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| 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[])
  {
//---
   atr=(int)((iHigh(NULL,PERIOD_MN1,Shift)-iLow(NULL,PERIOD_MN1,Shift))/_Point);
//--- return value of prev_calculated for next call
   if(ObjectFind(0,"L")>=0){ObjectSetString(0,"L",OBJPROP_TEXT,(string)atr);}
   return(rates_total);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| ChartEvent function                                              | 
//+------------------------------------------------------------------+ 
void OnChartEvent(const int id,         // идентификатор события   
                  const long& lparam,   // параметр события типа long 
                  const double& dparam, // параметр события типа double 
                  const string& sparam  // параметр события типа string 
                  )
  {
//--- нажатие кнопки на клавиатуре 
   if(id==CHARTEVENT_KEYDOWN && lparam==40)
     {
      if(ObjectFind(0,"L")>=0)
        {
         ObjectDelete(0,"L");
        }
      else
        {
         PutLabel(atr);
        }
     }
// ЭТО ТЕКСТ       
  }
//+------------------------------------------------------------------+
void PutLabel(string text)
  {
   ObjectCreate(0,"L",OBJ_LABEL,0,0,0);
//--- установим координаты метки
   ObjectSetInteger(0,"L",OBJPROP_XDISTANCE,55);
   ObjectSetInteger(0,"L",OBJPROP_YDISTANCE,10);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"L",OBJPROP_CORNER,1);
//--- установим текст
   ObjectSetString(0,"L",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"L",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"L",OBJPROP_FONTSIZE,12);
//--- установим цвет
   ObjectSetInteger(0,"L",OBJPROP_COLOR,Red);
  }
//+------------------------------------------------------------------+

Дмитрий Ивкин я правильно понял то что вы хотели сделать?

Учитесь грамотно излагать свои мысли! Я больше времени потратил чтобы понять что вы хотите и 5 минут за утренним кофе чтобы поправить ваш код. 

 
Dmitry Ivkin:

У меня есть проверка в OnInit, есть текст или нет, но при закрытии терминала, и новом открытии текста нету! только если опять нажать кнопку, вот так, код приложил выше

Разберитесь наконец-то с причинами деинициализации.

REASON_PROGRAM

0

Эксперт прекратил свою работу, вызвав функцию ExpertRemove()

REASON_REMOVE

1

Программа удалена с графика

REASON_RECOMPILE

2

Программа перекомпилирована

REASON_CHARTCHANGE

3

Символ или период графика был изменен

REASON_CHARTCLOSE

4

График закрыт

REASON_PARAMETERS

5

Входные параметры были изменены пользователем

REASON_ACCOUNT

6

Активирован другой счет либо произошло переподключение к торговому серверу вследствие изменения настроек счета

REASON_TEMPLATE

7

Применен другой шаблон графика

REASON_INITFAILED

8

Признак того, что обработчик OnInit() вернул ненулевое значение

REASON_CLOSE

9

Терминал был закрыт


Кроме указанного вам ранее REASON_CHARTCHANGE существуют и другие. В данном случае надо просто отделить удаление индикатора с графика от закрытия терминала. Ну и с остальными причинами разобраться, в каких ещё случаях надо удалять метки.

2. Я вам сказал о загаживании мозга. Так вот, ИМХО, флаг в вашем варианте не самое правильное решение.

Причины деинициализации - Именованные константы - Стандартные константы, перечисления и структуры - Справочник MQL4
Причины деинициализации - Именованные константы - Стандартные константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
//| get text description                                             | //| Expert deinitialization function                                 |
 

А знаете что? Когда что-то делается с графическими объектами, надо обязательно использовать ChartRedraw(), что бы все изменения сразу отображались на графике. Иначе будет казаться,что происходит черти что, даже если весь код правильный. Может быть дело только в этом.

 
Vitaly Gorbunov:

Дмитрий Ивкин я правильно понял то что вы хотели сделать?

Учитесь грамотно излагать свои мысли! Я больше времени потратил чтобы понять что вы хотите и 5 минут за утренним кофе чтобы поправить ваш код. 

Спасибо большое буду разбирать ваш код, он работает, я начитался такого, .... draw я использовал потому что мне посоветовали, OBJPROP_STATE  мне так же посоветовали хоть я и прочел что OBJPROP_STATE  относится к OBJ_BUTTON но думаю... малоли

 
Dmitry Ivkin:

Спасибо большое буду разбирать ваш код, он работает, я начитался такого, .... draw я использовал потому что мне посоветовали, OBJPROP_STATE  мне так же посоветовали хоть я и прочел что OBJPROP_STATE  относится к OBJ_BUTTON но думаю... малоли

А заголовок своей темы не пробовали прочитать?

 
Dmitry Fedoseev:

А заголовок своей темы не пробовали прочитать?

я уже не однократно писал что то что я назвал кнопкой, это подразумевалось кнопка на клавиатуре! в коде нету кнопки ни 1

 
Dmitry Ivkin:

я уже не однократно писал что то что я назвал кнопкой, это подразумевалось кнопка на клавиатуре! в коде нету кнопки ни 1

На клавиатуре нет кнопок, там клавиши, к тому же у них нет разных положений.

 

Дмитрий Ивкин учитесь выражать свой вопрос грамотно иначе здесь вас затюкают, в конце концов задавая безграмотный вопрос над вами будут либо смеяться либо давать такие же безграмотные ответы и в добавок будут над этим угорать.

Не все советы бывают полезные, учитесь пользоваться справочником. 

 
Dmitry Ivkin:

Спасибо большое буду разбирать ваш код, он работает, я начитался такого, .... draw я использовал потому что мне посоветовали, OBJPROP_STATE  мне так же посоветовали хоть я и прочел что OBJPROP_STATE  относится к OBJ_BUTTON но думаю... малоли

Почитайте, вдруг пригодится в будущем, там чтения на 1 минуту.

Проблема XY
Проблема XY
  • www.mql5.com
Что за «Проблема XY»?Это ошибка, которая зачастую приводит к бессмысленной трате времени как просящего о помощи, так и тех, кто пытается ему отвечать. Её ещё называют «Проблемой Молотка». Суть её,...
Причина обращения: