Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 671

 
Artyom Trishkin:

Ничего сложного.

спс, вечером буду у компа, заберу себе... сложного то ничего, но времени катастрофически на все не хватает )))

 
Здравствуйте! Дайте, пожалуйста, пример кода создания кнопки на графике и чтобы она выполняла хотя бы одну операцию. Хотя бы в коммент выводила  любой знак. Спасибо.
 
inter78:
Здравствуйте! Дайте, пожалуйста, пример кода создания кнопки на графике и чтобы она выполняла хотя бы одну операцию. Хотя бы в коммент выводила  любой знак. Спасибо.

Вот примерно такой код:

#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
kn();
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectDelete("close");
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
if(ObjectGetInteger(0,"close",OBJPROP_STATE)==true)
 {
  ObjectSetString(0,"close",OBJPROP_TEXT,"Открыть ВСЕ"); 
  Comment("Открыть всё!");
 }
else
 {
  ObjectSetString(0,"close",OBJPROP_TEXT,"Закрыть ВСЕ"); 
  Comment("Закрыть всё!");
 }
return;
}

//==============================================================
void kn()
{
 if (ObjectFind("close")==-1)
  {
   ObjectCreate(0,"close",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"close",OBJPROP_XDISTANCE,30); 
   ObjectSetInteger(0,"close",OBJPROP_YDISTANCE,30); 
   //--- установим размер кнопки 
   ObjectSetInteger(0,"close",OBJPROP_XSIZE,100); 
   ObjectSetInteger(0,"close",OBJPROP_YSIZE,30); 
   //--- установим угол графика, относительно которого будут определяться координаты точки 
   ObjectSetInteger(0,"close",OBJPROP_CORNER,CORNER_LEFT_UPPER); 
   //--- установим текст 
   ObjectSetString(0,"close",OBJPROP_TEXT,"Закрыть ВСЕ"); 
   //--- установим цвет фона 
   ObjectSetInteger(0,"close",OBJPROP_BGCOLOR,clrRed); 
   //--- установим цвет текста 
   ObjectSetInteger(0,"close",OBJPROP_COLOR,clrWhite);
  }
}
 
Valerius:

Вот примерно такой код:

Комменты не выходят.
 
inter78:
Комменты не выходят.

После запуска программы, нажимаете на кнопочку и в левом верхнем углу появляется соответствующая надпись. Ещё раз нажимаете, надпись меняется. Не забудьте нажать кнопочку автоторговля или в настройках советника разрешить торговлю. В правом верхнем углу должна улыбаться рожица. В  тестере всё работает.

 
Valerius:

После запуска программы, нажимаете на кнопочку и в левом верхнем углу появляется соответствующая надпись. Ещё раз нажимаете, надпись меняется. Не забудьте нажать кнопочку автоторговля или в настройках советника разрешить торговлю. В правом верхнем углу должна улыбаться рожица. В  тестере всё работает.

 А как индикатор будет работать ?
 
inter78:
 А как индикатор будет работать ?

Так сделано же под советник а не под индикатор.

 
Жалко. Мне нужен индикатор.
 
inter78:
Жалко. Мне нужен индикатор.

Так ведь никаких особых отличий нет.

//==============================================================
void kn()
{
 if (ObjectFind("close")==-1)
  {
   ObjectCreate(0,"close",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"close",OBJPROP_XDISTANCE,30); 
   ObjectSetInteger(0,"close",OBJPROP_YDISTANCE,30); 
   //--- установим размер кнопки 
   ObjectSetInteger(0,"close",OBJPROP_XSIZE,100); 
   ObjectSetInteger(0,"close",OBJPROP_YSIZE,30); 
   //--- установим угол графика, относительно которого будут определяться координаты точки 
   ObjectSetInteger(0,"close",OBJPROP_CORNER,CORNER_LEFT_UPPER); 
   //--- установим текст 
   ObjectSetString(0,"close",OBJPROP_TEXT,"Закрыть ВСЕ"); 
   //--- установим цвет фона 
   ObjectSetInteger(0,"close",OBJPROP_BGCOLOR,clrRed); 
   //--- установим цвет текста 
   ObjectSetInteger(0,"close",OBJPROP_COLOR,clrWhite);
  }
}

Это код создания кнопки.

Кнопка создаётся в функции инициализации

int OnInit()
{
kn();
return(INIT_SUCCEEDED);
}

А это

if(ObjectGetInteger(0,"close",OBJPROP_STATE)==true)
 {
  ObjectSetString(0,"close",OBJPROP_TEXT,"Открыть ВСЕ"); 
  Comment("Открыть всё!");
 }
else
 {
  ObjectSetString(0,"close",OBJPROP_TEXT,"Закрыть ВСЕ"); 
  Comment("Закрыть всё!");
 }

Код контроля нажатия кнопки.

 
Alexey Viktorov:

Так ведь никаких особых отличий нет.

Это код создания кнопки.

Кнопка создаётся в функции инициализации

А это

Код контроля нажатия кнопки.

Вообще-то  я так и сделал но мне не нравится долгое срабатывание

int start()
 {
  string    Direktor="ID";     // Имя каталога 
  string    Fail_ID=Symbol();      // Имя файла 
  int file_ID;
  file_ID=FileOpen(Direktor+"//"+Fail_ID,FILE_READ|FILE_WRITE|FILE_TXT); 
  FileWrite(file_ID,ChartID()); 
  FileClose(file_ID); 

  int total_GLOB=GlobalVariablesTotal();
  string name;
  string text;
  int kol=0;
  int x=1000;
  string strGl;
  string strGl_2;
  string strGl_3;
  double strGl_4;
  double strGl_5;
  for(int g=0;g<total_GLOB;g++)
    {
     name= GlobalVariableName(g);
     string g_2=IntegerToString(g+1,2,'0');
     text=g_2+" .  "+name+"   "+DoubleToString(GlobalVariableGet(name),4);
     kol++;
     strGl=IntegerToString(MathAbs(GlobalVariableGet(name)*10000),15,'0');
     strGl_2=StringSubstr(strGl,11,2);
     strGl_3=StringSubstr(strGl,13,2);
     strGl_4=StringToDouble(strGl_2);
     strGl_5=StringToDouble(strGl_3);
     ObjectCreate(name,OBJ_BUTTON,0,0,0);
         if(ObjectGet(name,OBJPROP_STATE)==true)
         {
          string Fail_ID_2=name;
          int file_ID_2 =FileOpen(Direktor+"//"+Fail_ID_2,FILE_READ|FILE_WRITE|FILE_TXT);
          string id =FileReadString(file_ID_2);
          long id2=StringToInteger(id);
          ChartSetInteger(id2,CHART_BRING_TO_TOP,true);
          FileClose(file_ID_2); 
         }
     if(strGl_4==strGl_5)
     {
      ObjectSet(name,6,clrDarkSlateGray);
      ObjectSet(name,OBJPROP_BGCOLOR,clrAquamarine);
      }
     if(strGl_4!=strGl_5)
     {
      ObjectSet(name,6,clrDarkSlateGray);
      ObjectSet(name,OBJPROP_BGCOLOR,clrSnow);
      }
     ObjectSet(name,102,x);
     ObjectSet(name,OBJPROP_SELECTED,false);
     ObjectSetText(name,text,10,"Arial",clrLightCyan);
     ObjectSet(name,103,40+(kol*20));
     if(GlobalVariableGet(name)<0) ObjectSet(name,6,Red);
     if(GlobalVariableGet(name)>0) ObjectSet(name,6,clrMediumBlue);
     if(GlobalVariableGet(name)==0) ObjectDelete(name);
     ObjectSetInteger(0,name,OBJPROP_XSIZE,180); 

//--- переведем кнопку в заданное состояние 
     ObjectSetInteger(0,name,OBJPROP_STATE,false); 

     if(Symbol()==name)
      {
       ObjectSet(name,6,clrMaroon);
       ObjectSet(name,103,25);
       ObjectSet(name,OBJPROP_FONTSIZE,13);
       ObjectSetInteger(0,name,OBJPROP_YSIZE,25); 
       ObjectSetInteger(0,name,OBJPROP_XSIZE,200); 
      }
    }

  return(0);
 }
void OnDeinit(const int reason)
  {
  GlobalVariablesDeleteAll();
ObjectsDeleteAll(0,0,OBJ_BUTTON);

  }
  
Причина обращения: