mql4 события

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
supperUser29596
12
supperUser29596  

Нужна Ваша помощь. Есть советник на mql4. Кнопкой Start запускается цыкл. Подскажите, пожалуйста, как выйти из цыкла при нажатии на кнопку "Stop"? Функция  funStop() срабатывает

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

//+----------------- Button

void PutButton(string name,int x,int y,string text,int fontsize,color colortext,color colorfon,int width,int heigh)

  {

   ObjectCreate(0,name,OBJ_BUTTON,ChartWindowFind(),0,0);

   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

   ObjectSetInteger(0,name,OBJPROP_XSIZE,width);

   ObjectSetInteger(0,name,OBJPROP_YSIZE,heigh);

   ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);

   ObjectSetString(0,name,OBJPROP_TEXT,text);

   ObjectSetString(0,name,OBJPROP_FONT,"Arial");

   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize);

   ObjectSetInteger(0,name,OBJPROP_COLOR,colortext);

   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,colorfon);

   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);

   ObjectSetInteger(0,name,OBJPROP_BACK,false);

   ObjectSetInteger(0,name,OBJPROP_STATE,false);

  }

//-------< flags >------------------------------------

bool gl_flStop=false;


//-------< названия графических обектов >-------------

string gl_nameObButtStart="Start";

string gl_nameObButtStop="Stop";

//+------------------------------------------------------------------+

int OnInit()

  {

   PutButton(gl_nameObButtStart,10,75,"Start",14,clrBlue,clrKhaki,60,60);

   PutButton(gl_nameObButtStop,100,75,"Stop",14,clrBlue,clrKhaki,60,60);

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam)

  {

//--- проверим событие на нажатие кнопки мышки

   if(id==CHARTEVENT_OBJECT_CLICK)

     {

      string clickedChartObject=sparam;

      //--- Start

      if(clickedChartObject==gl_nameObButtStart)

        {

         funStart();

        }

      //--- Stop

      if(clickedChartObject==gl_nameObButtStop)

        {

         funStop();

        }

      ChartRedraw();// принудительно перерисуем все объекты на графике

     }

  }

//+------------------------------------------------------------------+

void funStart()

  {

   gl_flStop=false;

   for(int i=0; i<10; i++)

     {

      Sleep(200);

      Alert(i);

      if(gl_flStop==true) {break;}

     }

  }

//+------------------------------------------------------------------+

void funStop()

  {

   Alert("Stop");

   gl_flStop=true;

  }

//+------------------------------------------------------------------+


Aleksey Semenov
3801
Aleksey Semenov  
вот это замарочки - ну прям внутырь цикла и пиши в начало проверку на то не нажата ли кнопка стоп со всеми вытекающими - полноценный вызов из цикла той функции которая должна это проверять на каждом проходе цикла
Konstantin Erin
2161
Konstantin Erin  
supperUser29596Есть советник на mql4. Кнопкой Start запускается цыкл. Подскажите, пожалуйста, как выйти из цыкла при нажатии на кнопку "Stop"? Функция  funStop() срабатывает только после завершения цыкла, а мне надо что бы сразу при нажатии на кнопку выйти из цыкла.
void funStart()
  {
   Stop=false;
   for(int i=0; i<10; i++)
     {
      Sleep(200);
      Alert(i);
      if(Stop==true) {break;}
     }
  }
  Stop=false;
  for(int i=0; i<10; i++)
  {
    Alert(i);
    for(int k=0; k<40; k++)  // уменьшил задержку срабатывания в 40 раз
    {
      if(Stop) {break;}
      Sleep(5);
    }
      if(Stop) {break;}
  }

Alexey Viktorov
28109
Alexey Viktorov  
supperUser29596:

Нужна Ваша помощь. Есть советник на mql4. Кнопкой Start запускается цыкл. Подскажите, пожалуйста, как выйти из цыкла при нажатии на кнопку "Stop"? Функция  funStop() срабатывает

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

В тело цикла поставьте проверку нажатия кнопки 

if(ObjectSetInteger(0,name,OBJPROP_STATE,true))
 break;

и не забудьте вернуть значение

ObjectSetInteger(0,name,OBJPROP_STATE,false);
Alexey Viktorov
28109
Alexey Viktorov  

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

mql4 события

STARIJ, 2018.03.14 17:41

  Stop=false;
  for(int i=0; i<10; i++)
  {
    Alert(i);
    for(int k=0; k<40; k++)  // уменьшил задержку срабатывания в 40 раз
    {
      if(Stop) {break;}
      Sleep(5);
    }
      if(Stop) {break;}
  }


А это к чему?
supperUser29596
12
supperUser29596  
Alexey Viktorov:

В тело цикла поставьте проверку нажатия кнопки 

и не забудьте вернуть значение

Thank you very much!!! Без Вашей помощи не разобрался бы, все работает) 

   for(int i=0; i<20; i++)

     {

      Sleep(200);

      Alert(i);

      

      if( ObjectGetInteger(0,gl_nameObButtStop,OBJPROP_STATE,true))

        {

         ObjectSetInteger(0,gl_nameObButtStop,OBJPROP_STATE,false);

         break;

        }

     }

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